all repos — stealth-developers @ 05020a60748d4790c6826660a9b0d87a3aa2fb99

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)));