forked from cosmic/scythe
73 lines
2.0 KiB
TypeScript
73 lines
2.0 KiB
TypeScript
import type { TextChannel } from "discord.js";
|
|
import { Client, Discord, On, type ArgsOf } from "discordx";
|
|
|
|
import db from "../db";
|
|
import { byeTable, colonTable, greetsTable } from "../db/schema";
|
|
import { eq } from "drizzle-orm";
|
|
|
|
@Discord()
|
|
export class MemberEvents {
|
|
@On({ event: "guildMemberAdd" })
|
|
async memberAdd([member]: ArgsOf<"guildMemberAdd">, client: Client) {
|
|
const greetRes = await db
|
|
.select()
|
|
.from(greetsTable)
|
|
.where(eq(greetsTable.guild, member.guild.id));
|
|
if (greetRes.length > 0) {
|
|
const channel = client.channels.cache.get(
|
|
greetRes[0].channel,
|
|
) as TextChannel;
|
|
await channel.send(
|
|
greetRes[0].message.replace("{user}", `<@${member.user.id}>`),
|
|
);
|
|
}
|
|
|
|
if (member.user.bot) {
|
|
const botRole = member.guild.roles.cache.get(Bun.env.BOT_ROLE!);
|
|
if (botRole) {
|
|
await member.roles.add(botRole);
|
|
}
|
|
} else {
|
|
if(Date.now() - member.user.createdAt.getTime() < 1000 * 60 * 60 * 24 * 7) {
|
|
try {
|
|
await member.send("to protect against raids, bots, and other disturbances, accounts under a week old are kicked upon joining. please wait for your account to mature before rejoining.")
|
|
} catch(_) {}
|
|
await member.kick("account less than week old")
|
|
return;
|
|
}
|
|
await db.insert(colonTable).values({
|
|
user: member.id,
|
|
amount: 0,
|
|
messages_count: 0,
|
|
});
|
|
}
|
|
}
|
|
|
|
@On({ event: "guildMemberRemove" })
|
|
async memberRemove([member]: ArgsOf<"guildMemberRemove">, client: Client) {
|
|
const byeRes = await db
|
|
.select()
|
|
.from(byeTable)
|
|
.where(eq(byeTable.guild, member.guild.id));
|
|
if (byeRes.length > 0) {
|
|
const channel = client.channels.cache.get(
|
|
byeRes[0].channel,
|
|
) as TextChannel;
|
|
await channel.send(
|
|
byeRes[0].message.replace("{user}", `${member.user.username}`),
|
|
);
|
|
}
|
|
|
|
await db.delete(colonTable).where(eq(colonTable.user, member.id));
|
|
}
|
|
|
|
@On({ event: "guildMemberUpdate" })
|
|
async memberUpdate([_, newM]: ArgsOf<"guildMemberUpdate">) {
|
|
if (newM.roles.cache.get(Bun.env.BAD_ROLE!)) {
|
|
await newM.ban({
|
|
reason: "youngin",
|
|
});
|
|
}
|
|
}
|
|
}
|