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
const discordWelcomeBotCron = async () => {
// Only target new users going forwards from bot creation
if (@me.discordWelcomeBotStartedAt === undefined) {
@me.discordWelcomeBotStartedAt = Date.now();
}
// Don't message a user more than once
if (@me.discordWelcomedMembers === undefined) {
@me.discordWelcomedMembers = [];
}
// Store channels we've sent a DM to
// in case we want to forward replies to the bot
if (@me.discordDMs === undefined) {
@me.discordDMs = [];
}
const members = await @vtdocs.discordGetMembers(
@me.secrets.discordBot,
@me.secrets.discordServerId,
);
await Promise.all(members.map(async (member) => {
const existingMember = (new Date(member.joined_at)).getTime() <
@me.discordWelcomeBotStartedAt;
const alreadyWelcomed = @me.discordWelcomedMembers.includes(
member.user.id,
);
if (existingMember || alreadyWelcomed) {
return;
}
const DMid = await @vtdocs.discordSendDM(
@me.secrets.discordBot,
member.user.id,
"👋 Welcome!",
);
// Store that we have messaged this user
@me.discordWelcomedMembers.push(member.user.id);
if (DMid !== undefined)
@me.discordDMs.push(DMid);
}));
await Promise.all([
@std.set(
"discordWelcomeBotStartedAt",
@me.discordWelcomeBotStartedAt,
),
@std.set("discordDMs", @me.discordDMs),
@std.set(
"discordWelcomedMembers",
@me.discordWelcomedMembers,
),
]);
};
0
0
👆 This is a val. Vals are TypeScript snippets of code, written in the browser and run on our servers. Create scheduled functions, email yourself, and persist small pieces of data — all from the browser.