import { discordSendDM } from "https://esm.town/v/vtdocs/discordSendDM?v=6";
import process from "node:process";
import { discordFetch } from "https://esm.town/v/vtdocs/discordFetch?v=10";
let { discordDMs } = await import("https://esm.town/v/nthypes/discordDMs");
let { discordWelcomedMembers } = await import("https://esm.town/v/nthypes/discordWelcomedMembers");
let { discordWelcomeBotStartedAt } = await import("https://esm.town/v/nthypes/discordWelcomeBotStartedAt");
export const discordWelcomeBotCron = async () => {
if (discordWelcomeBotStartedAt === undefined) {
discordWelcomeBotStartedAt = Date.now();
}
if (discordWelcomedMembers === undefined) {
discordWelcomedMembers = [];
}
if (discordDMs === undefined) {
discordDMs = [];
}
const discordGetMembers = async (
botToken: string,
serverId: number | string,
) => {
const allMembers = [];
let highestId = BigInt(0);
while (true) {
const result = await discordFetch(
botToken,
`/guilds/${serverId}/members?limit=1000&after=${highestId}`,
);
console.log(result);
if (result.length === 0) {
break;
}
console.log(result);
result.forEach((member) => {
const n = BigInt(member.user.id);
if (n > highestId) {
highestId = n;
}
});
allMembers.push(...result);
}
return allMembers;
};
const members = await discordGetMembers(
process.env.discordBot,
process.env.discordServerId,
);
await Promise.all(members.map(async (member) => {
const existingMember = (new Date(member.joined_at)).getTime() <
discordWelcomeBotStartedAt;
const alreadyWelcomed = discordWelcomedMembers.includes(
member.user.id,
);
if (existingMember || alreadyWelcomed) {
return;
}
const DMid = await discordSendDM(
process.env.discordBot,
member.user.id,
`👋 Welcome to Scriba Discord! Everyone is excited to meet you!
Feel free to post anything Scriba related in <#1131391218979455041>
DM <@1132434359375372470> for anything private
The Scriba Team and community are very friendly,
but I am an antisocial bot that doesn't answer messages.
View my source code: https://www.val.town/v/nthypes.discordWelcomeBotCron
`,
);
discordWelcomedMembers.push(member.user.id);
if (DMid !== undefined)
discordDMs.push(DMid);
}));
};