apps/migration/src/2.get-members.ts (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
import type { GuildMemberResponse } from "@purrkit/types";
import fs from "node:fs";
import { DISCORD_GUILD_ID } from "./constants";
import { rest } from "./lib/rest";
import { db, tickets } from "./old-db";
const neededUsers = await db
.select({
subjectId: tickets.authorId,
closerId: tickets.closedBy,
})
.from(tickets)
.execute();
const activeUserIds = new Set<string>();
for (const row of neededUsers) {
if (row.subjectId) activeUserIds.add(row.subjectId);
if (row.closerId) activeUserIds.add(row.closerId);
}
console.log(`found ${activeUserIds.size} needed user ids`);
let lastUserId: string | undefined;
const fetchedMembers: GuildMemberResponse[] = [];
while (true) {
const response = await rest.guilds(DISCORD_GUILD_ID).members.get({
query: {
limit: 1000,
after: lastUserId ? Number(lastUserId) : undefined,
},
});
if (!response.ok || response.data.length === 0) {
console.log(JSON.stringify(response.data));
break;
}
lastUserId = response.data[response.data.length - 1]!.user.id;
fs.writeFileSync(`members/members.${lastUserId}.json`, JSON.stringify(response.data));
fetchedMembers.push(...response.data);
console.log(
`fetched ${response.data.length} members page (total ${fetchedMembers.length + response.data.length})`,
);
if (response.data.length < 1000) break;
}
fs.writeFileSync(`members/all-members.json`, JSON.stringify(fetchedMembers));
const missingUsers = new Set<string>(activeUserIds);
for (const member of fetchedMembers) missingUsers.delete(member.user.id);
missingUsers.delete("system");
missingUsers.delete("reporter");
missingUsers.delete("0");
missingUsers.delete("1782593884");
console.log(`missing ${missingUsers.size} users`);
fs.writeFileSync(`members/missing-users.json`, JSON.stringify(Array.from(missingUsers)));
|