diff --git a/src/base/types/types.ts b/src/base/types/types.ts new file mode 100644 index 0000000..8def2ed --- /dev/null +++ b/src/base/types/types.ts @@ -0,0 +1 @@ +export type ChalkColors = "black" | "red" | "green" | "yellow" | "blue" | "magenta" | "cyan" | "white" | "blackBright" | "gray" | "grey" | "redBright" | "greenBright" | "yellowBright" | "blueBright" | "magentaBright" | "cyanBright" | "whiteBright" \ No newline at end of file diff --git a/src/events/guildMemberUpdate.ts b/src/events/guildMemberUpdate.ts index 9e35a0a..3197ae2 100644 --- a/src/events/guildMemberUpdate.ts +++ b/src/events/guildMemberUpdate.ts @@ -26,6 +26,7 @@ export default { oldMember: GuildMember, newMember: GuildMember, ) { + if (oldMember.user.bot) return; try { if (oldMember.partial) oldMember = await oldMember.fetch(); if (newMember.partial) newMember = await newMember.fetch(); diff --git a/src/events/onServerAdd.ts b/src/events/onServerAdd.ts new file mode 100644 index 0000000..58fc8f6 --- /dev/null +++ b/src/events/onServerAdd.ts @@ -0,0 +1,40 @@ +import { ButtonBuilder, ButtonStyle, Client, ContainerBuilder, Events, Guild, MessageFlags } from "discord.js"; +import { logger } from "../libs/logger.js"; +import { SystemColors } from "../libs/colors.js"; + +export default { + name: Events.GuildCreate, + async execute(guild: Guild, client: Client) { + logger.custom(`Added to the server with ID ${guild.id}`, "ADDED", "magenta"); + try { + const owner = await guild.fetchOwner(); + const avatarUrl = client.user!.displayAvatarURL({ size: 1024 }); + + const termsBtn = new ButtonBuilder().setLabel('Terms of Service').setURL('https://boostify.breaddevv.cc/terms').setStyle(ButtonStyle.Link); + const privacy = new ButtonBuilder().setLabel('Privacy Policy').setURL('https://boostify.breaddevv.cc/privacy').setStyle(ButtonStyle.Link); + const github = new ButtonBuilder().setLabel('Our Repository').setURL('https://boostify.breaddevv.cc/github').setStyle(ButtonStyle.Link); + + const container = new ContainerBuilder().addSectionComponents(comp => + comp + .addTextDisplayComponents(text => + text.setContent( + `## Thank you for adding me!\n` + + `Hi! I'm Boostify! An open-source boosting bot to help you manage your server perks alongside your community!\n` + + `Use some of the links below to have a better knowledge about me!` + ) + ) + .setThumbnailAccessory(accessory => accessory.setURL(avatarUrl)) + ) + .addTextDisplayComponents(text => text.setContent(`-# You're receiving this text because you/other member added me to the server **${guild.name}** — In which you're the owner!`)) + .addActionRowComponents(row => row.addComponents(termsBtn, privacy, github)) + .setAccentColor(SystemColors.main); + + await owner.send({ + components: [container], + flags: MessageFlags.IsComponentsV2 + }); + } catch (err) { + logger.error(`Failed fetching owner & dmming them on server: ${guild.id}: ${err}`); + } + } +}; \ No newline at end of file diff --git a/src/libs/logger.ts b/src/libs/logger.ts index 2c51c0c..5074c2e 100644 --- a/src/libs/logger.ts +++ b/src/libs/logger.ts @@ -1,4 +1,5 @@ -import chalk from "chalk"; +import chalk, { Chalk } from "chalk"; +import { ChalkColors } from "../base/types/types.js"; const timestamp = () => chalk.dim(`${new Date().toISOString()}`); @@ -36,5 +37,8 @@ export const logger = { }, success: (message: string, ...args: any[]) => { console.log(`${timestamp()} ${chalk.green("✓")} ${message}`, ...args); - } + }, + custom: (message: string, title: string, color: ChalkColors = "green", ...args: any[]) => { + console.log(`${timestamp()} ${chalk[color](title.toUpperCase())} ${message}`, ...args) + } }; \ No newline at end of file