From d6d08a9d97dd6ef4ada53cc58485b44a8a1994e4 Mon Sep 17 00:00:00 2001 From: alexavil Date: Mon, 26 May 2025 15:59:04 +0000 Subject: [PATCH 1/7] fix directory creation --- index.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.js b/index.js index 9143e2f..2350abc 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,9 @@ import "dotenv/config"; +if (!fs.existsSync("./data/")) fs.mkdirSync("./data/"); +if (!fs.existsSync("./logs/")) fs.mkdirSync("./logs/"); +if (!fs.existsSync("./cache/")) fs.mkdirSync("./cache/"); + import { dirname } from "path"; import { fileURLToPath } from "url"; @@ -69,10 +73,6 @@ const client = new Discord.Client({ ], }); -if (!fs.existsSync("./data/")) fs.mkdirSync("./data/"); -if (!fs.existsSync("./logs/")) fs.mkdirSync("./logs/"); -if (!fs.existsSync("./cache/")) fs.mkdirSync("./cache/"); - const settings = new sqlite3("./data/settings.db"); const queue = new sqlite3("./data/queue.db"); const tags = new sqlite3("./data/tags.db"); From d0a15ed0b765f7ded567a1c1dc5fc73988ead20c Mon Sep 17 00:00:00 2001 From: alexavil Date: Mon, 26 May 2025 16:02:46 +0000 Subject: [PATCH 2/7] fix empty tags messages --- interactions/commands/tags/tags.js | 5 +++++ interactions/menus/tagdelete.js | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/interactions/commands/tags/tags.js b/interactions/commands/tags/tags.js index c7e0ca0..8366bfa 100644 --- a/interactions/commands/tags/tags.js +++ b/interactions/commands/tags/tags.js @@ -25,6 +25,11 @@ export default { .setLabel(`Create a tag`) .setStyle(ButtonStyle.Primary); let row = new Discord.ActionRowBuilder().addComponents(addtag); + return interaction.editReply({ + embeds: [tagsembed], + components: [row], + flags: Discord.MessageFlags.Ephemeral, + }); } else { let reply = generateTagsEmbed(responses, 1, interaction); service.tags_pages.set(id, 1); diff --git a/interactions/menus/tagdelete.js b/interactions/menus/tagdelete.js index 313fd18..d3eae17 100644 --- a/interactions/menus/tagdelete.js +++ b/interactions/menus/tagdelete.js @@ -28,6 +28,12 @@ export default { .setLabel(`Create a tag`) .setStyle(ButtonStyle.Primary); let row = new Discord.ActionRowBuilder().addComponents(addtag); + return interaction.update({ + content: "", + embeds: [tagsembed], + components: [row], + flags: Discord.MessageFlags.Ephemeral, + }); } else { let reply = generateTagsEmbed(responses, 1, interaction); service.tags_pages.set(id, 1); From 14511c6f311dadf265ad260edd2ca2ae876e2cc2 Mon Sep 17 00:00:00 2001 From: alexavil Date: Mon, 26 May 2025 16:10:21 +0000 Subject: [PATCH 3/7] improve debug messages --- index.js | 76 ++++++++++++----------- interactions/buttons/cache_confirm.js | 2 +- interactions/buttons/clear_cache.js | 4 +- interactions/buttons/def_confirm.js | 4 +- interactions/buttons/defaults.js | 4 +- interactions/buttons/loop.js | 4 +- interactions/buttons/notifications.js | 4 +- interactions/buttons/pause.js | 4 +- interactions/buttons/skip.js | 6 +- interactions/buttons/stop.js | 4 +- interactions/buttons/tagdef_confirm.js | 4 +- interactions/buttons/tagdefaults.js | 4 +- interactions/commands/music/controls.js | 4 +- interactions/commands/music/disconnect.js | 4 +- interactions/commands/music/play.js | 2 +- interactions/commands/music/queue.js | 4 +- interactions/commands/music/upload.js | 2 +- interactions/commands/tags/tags.js | 4 +- interactions/menus/gleave.js | 2 +- interactions/menus/selectlocal.js | 2 +- interactions/menus/tagdelete.js | 6 +- interactions/modals/say.js | 4 +- interactions/modals/setfails.js | 4 +- interactions/modals/settimeout.js | 4 +- interactions/modals/tagcreate.js | 4 +- utils/music.js | 8 +-- 26 files changed, 88 insertions(+), 86 deletions(-) diff --git a/index.js b/index.js index 2350abc..33d02f1 100644 --- a/index.js +++ b/index.js @@ -4,6 +4,9 @@ if (!fs.existsSync("./data/")) fs.mkdirSync("./data/"); if (!fs.existsSync("./logs/")) fs.mkdirSync("./logs/"); if (!fs.existsSync("./cache/")) fs.mkdirSync("./cache/"); +let debug = process.env.DEBUG; +let telemetry = process.env.TELEMETRY; + import { dirname } from "path"; import { fileURLToPath } from "url"; @@ -41,14 +44,12 @@ else { } if (process.env.ACTIVITIES) activities = process.env.ACTIVITIES.split(","); +let avatar = process.env.AVATAR; + const { default: music } = await import("./utils/music.js"); const { default: service } = await import("./utils/ServiceVariables.js"); import { getHash } from "./utils/HashCalculator.js"; -let debug = process.env.DEBUG; -let avatar = process.env.AVATAR; -let telemetry = process.env.TELEMETRY; - const client = new Discord.Client({ intents: [ GatewayIntentBits.AutoModerationConfiguration, @@ -169,11 +170,11 @@ if (debug === "true") { const log_stdout = process.stdout; console.log = function (d) { - // + let msg = "[DEBUG] " + d; log_file.write( - new Date().toLocaleString() + " --- " + util.format(d) + "\n", + new Date().toLocaleString() + " --- " + util.format(msg) + "\n", ); - log_stdout.write(util.format(d) + "\n"); + log_stdout.write(util.format(msg) + "\n"); }; console.log(`WARNING: ${name} is in debug mode! @@ -182,13 +183,15 @@ if (debug === "true") { We highly recommend redirecting the output to a file. This mode is not recommended for use in production. Please proceed with caution.`); console.log( - "[DEBUG] Build hash: " + + "Build hash: " + child.execSync("git rev-parse --short HEAD").toString().trim(), ); client.on("debug", console.log); client.on("warn", console.log); } +if (telemetry === "true" || debug === "true") initSentry(); + function setProfile() { if (client.user.username !== name && name !== undefined) client.user.setUsername(name); @@ -197,7 +200,7 @@ function setProfile() { } function initSentry() { - if (debug === "true") console.log("[DEBUG] Initializing Sentry..."); + if (debug === "true") console.log("Initializing Sentry..."); Sentry.init({ dsn: "https://3f2f508f31b53efc75cf35eda503e49b@o4505970900467712.ingest.us.sentry.io/4509011809796097", integrations: [nodeProfilingIntegration()], @@ -213,14 +216,14 @@ function CheckForPerms() { client.guilds.cache.forEach((guild) => { let id = guild.id; if (debug === "true") - console.log(`[DEBUG] Checking for permissions in guild ${id}...`); + console.log(`Checking for permissions in guild ${id}...`); let notifs_value = settings .prepare(`SELECT * FROM guild_${id} WHERE option = 'notifications'`) .get().value; if (notifs_value === "false") { if (debug === "true") console.log( - `[DEBUG] Guild ${id} has notifications disabled. Message will not be sent.`, + `Guild ${id} has notifications disabled. Message will not be sent.`, ); return false; } @@ -231,14 +234,14 @@ function CheckForPerms() { RequiredPerms.forEach((perm) => { if (!botmember.permissions.has(perm[0])) { if (debug === "true") - console.log(`[DEBUG] Guild ${id} is missing ${perm[1]}.`); + console.log(`Guild ${id} is missing ${perm[1]}.`); message += `${perm[1]}\n`; missing++; } }); if (missing > 0) { if (debug === "true") - console.log(`[DEBUG] Sending permissions alert for guild ${id}...`); + console.log(`Sending permissions alert for guild ${id}...`); message += `\nPlease check your role and member settings!`; const notifbtn = new Discord.ButtonBuilder() .setCustomId(`notifications`) @@ -256,14 +259,14 @@ function CheckForPerms() { if (err.code === Discord.Constants.APIErrors.CANNOT_MESSAGE_USER) { if (debug === "true") console.log( - `[DEBUG] Cannot message owner of guild ${id}. Message will not be sent.`, + `Cannot message owner of guild ${id}. Message will not be sent.`, ); return false; } }); } else { if (debug === "true") - console.log(`[DEBUG] Guild ${id} has all required permissions.`); + console.log(`Guild ${id} has all required permissions.`); return true; } }); @@ -303,7 +306,7 @@ function verifyCache() { function clearMusicData(id) { if (debug === "true") console.log( - `[DEBUG] Bot has restarted, clearing music data for guild ${id}.`, + `Bot has restarted, clearing music data for guild ${id}.`, ); music.clearQueue(id); music.players.delete(id); @@ -314,7 +317,7 @@ function clearMusicData(id) { function createConfig(id) { if (debug === "true") - console.log(`[DEBUG] Creating/validating config for guild ${id}.`); + console.log(`Creating/validating config for guild ${id}.`); settings .prepare( `CREATE TABLE IF NOT EXISTS guild_${id} (option TEXT UNIQUE, value TEXT)`, @@ -340,7 +343,7 @@ function createConfig(id) { } function validateSettings() { - if (debug === "true") console.log("[DEBUG] Validating settings..."); + if (debug === "true") console.log("Validating settings..."); let tables = settings .prepare(`SELECT name FROM sqlite_schema WHERE type='table'`) .all(); @@ -353,7 +356,7 @@ function validateSettings() { function deleteConfig(id) { if (debug === "true") - console.log(`[DEBUG] Deleting config for guild ${id}...`); + console.log(`Deleting config for guild ${id}...`); settings.prepare(`DROP TABLE IF EXISTS guild_${id}`).run(); queue.prepare(`DROP TABLE IF EXISTS guild_${id}`).run(); tags.prepare(`DROP TABLE IF EXISTS guild_${id}`).run(); @@ -361,18 +364,17 @@ function deleteConfig(id) { function editActivity() { let gamestring = Math.floor(Math.random() * activities.length); - if (debug === "true") console.log(`[DEBUG] Editing bot activity...`); + if (debug === "true") console.log(`Editing bot activity...`); client.user.setActivity(activities[gamestring]); } client.on("ready", () => { - if (telemetry === "true" || debug === "true") initSentry(); setProfile(); validateSettings(); verifyCache(); let permcheck = new cron.CronJob("00 00 */8 * * *", CheckForPerms); permcheck.start(); - if (debug === "true") console.log("[DEBUG] Running jobs for every guild..."); + if (debug === "true") console.log("Running jobs for every guild..."); client.guilds.cache.forEach((guild) => { createConfig(guild.id); clearMusicData(guild.id); @@ -382,19 +384,19 @@ client.on("ready", () => { job.start(); editActivity(); } - if (debug === "true") console.log("[DEBUG] Jobs completed..."); + if (debug === "true") console.log("Jobs completed..."); console.log("I am ready!"); }); client.on("guildCreate", (guild) => { if (debug === "true") - console.log(`[DEBUG] A new guild (${guild.id}) has been added!`); + console.log(`A new guild (${guild.id}) has been added!`); createConfig(guild.id); }); client.on("guildDelete", (guild) => { if (debug === "true") - console.log(`[DEBUG] A guild (${guild.id}) has been removed!`); + console.log(`A guild (${guild.id}) has been removed!`); deleteConfig(guild.id); }); @@ -413,7 +415,7 @@ client.on("interactionCreate", async (interaction) => { try { if (debug === "true") console.log( - `[DEBUG] Trying to execute ${interaction.customId} in ${id}.`, + `Trying to execute ${interaction.customId} in ${id}.`, ); modal.execute(interaction); if (monitor !== undefined) return monitor.end(); @@ -421,7 +423,7 @@ client.on("interactionCreate", async (interaction) => { } catch (error) { if (telemetry === "true" || debug === "true") Sentry.captureException(error); - if (debug === "true") console.log("[DEBUG] Error: " + error.message); + if (debug === "true") console.log("Error: " + error.message); return; } } @@ -432,7 +434,7 @@ client.on("interactionCreate", async (interaction) => { try { if (debug === "true") console.log( - `[DEBUG] Trying to execute ${interaction.customId} in ${id}.`, + `Trying to execute ${interaction.customId} in ${id}.`, ); button.execute(interaction); if (monitor !== undefined) return monitor.end(); @@ -440,7 +442,7 @@ client.on("interactionCreate", async (interaction) => { } catch (error) { if (telemetry === "true" || debug === "true") Sentry.captureException(error); - if (debug === "true") console.log("[DEBUG] Error: " + error.message); + if (debug === "true") console.log("Error: " + error.message); return; } } @@ -451,7 +453,7 @@ client.on("interactionCreate", async (interaction) => { try { if (debug === "true") console.log( - `[DEBUG] Trying to execute ${interaction.customId} in ${id}.`, + `Trying to execute ${interaction.customId} in ${id}.`, ); menu.execute(interaction); if (monitor !== undefined) return monitor.end(); @@ -459,7 +461,7 @@ client.on("interactionCreate", async (interaction) => { } catch (error) { if (telemetry === "true" || debug === "true") Sentry.captureException(error); - if (debug === "true") console.log("[DEBUG] Error: " + error.message); + if (debug === "true") console.log("Error: " + error.message); return; } } @@ -473,7 +475,7 @@ client.on("interactionCreate", async (interaction) => { try { if (debug === "true") console.log( - `[DEBUG] Trying to execute ${interaction.commandName} in ${id}.`, + `Trying to execute ${interaction.commandName} in ${id}.`, ); if (command.shouldWait !== false) await interaction.deferReply({ flags: Discord.MessageFlags.Ephemeral }); @@ -483,7 +485,7 @@ client.on("interactionCreate", async (interaction) => { } catch (error) { if (telemetry === "true" || debug === "true") Sentry.captureException(error); - if (debug === "true") console.log("[DEBUG] Error: " + error.message); + if (debug === "true") console.log("Error: " + error.message); if (interaction.replied || interaction.deferred) { await interaction.followUp({ content: "uhh can u say that again?", @@ -504,13 +506,13 @@ client.on("messageCreate", (message) => { let custom_tags = tags.prepare(`SELECT * FROM guild_${id}`).all(); - if (debug === "true") console.log("[DEBUG] Got a message!"); + if (debug === "true") console.log("Got a message!"); let monitor = undefined; custom_tags.forEach((tag) => { if (!message.author.bot && message.content === tag.tag) { - if (debug === "true") console.log("[DEBUG] Tag found!"); + if (debug === "true") console.log("Tag found!"); if (telemetry === "true" || debug === "true") { monitor = Sentry.startInactiveSpan({ op: "transaction", @@ -531,12 +533,12 @@ client.on("messageCreate", (message) => { }); process.on("unhandledRejection", (error) => { - if (debug === "true") console.log("[DEBUG] Error: " + error.message); + if (debug === "true") console.log("Error: " + error.message); if (telemetry === "true" || debug === "true") Sentry.captureException(error); }); process.on("uncaughtException", (error) => { - if (debug === "true") console.log("[DEBUG] Error: " + error.message); + if (debug === "true") console.log("Error: " + error.message); if (telemetry === "true" || debug === "true") Sentry.captureException(error); }); diff --git a/interactions/buttons/cache_confirm.js b/interactions/buttons/cache_confirm.js index b90355b..867099b 100644 --- a/interactions/buttons/cache_confirm.js +++ b/interactions/buttons/cache_confirm.js @@ -18,7 +18,7 @@ const { default: music } = await import("../../utils/music.js"); export default { name: "cache_confirm", async execute(interaction) { - if (debug === "true") console.log("[DEBUG] User confirmed, proceeding..."); + if (debug === "true") console.log("User confirmed, proceeding..."); for (const file of await fs.readdir(path.join(__dirname, cacheFolder))) { await fs.unlink(path.join(__dirname, cacheFolder, file)); } diff --git a/interactions/buttons/clear_cache.js b/interactions/buttons/clear_cache.js index 35fe87a..c8826b6 100644 --- a/interactions/buttons/clear_cache.js +++ b/interactions/buttons/clear_cache.js @@ -6,9 +6,9 @@ export default { async execute(interaction) { const id = interaction.guild.id; if (debug === "true") - console.log(`[DEBUG] Preparing to clear cache for ${id}...`); + console.log(`Preparing to clear cache for ${id}...`); if (debug === "true") - console.log("[DEBUG] Confirmation required - awaiting user input..."); + console.log("Confirmation required - awaiting user input..."); const confirm = new Discord.ButtonBuilder() .setCustomId(`cache_confirm`) .setLabel(`Yes`) diff --git a/interactions/buttons/def_confirm.js b/interactions/buttons/def_confirm.js index beef174..6ef4cb4 100644 --- a/interactions/buttons/def_confirm.js +++ b/interactions/buttons/def_confirm.js @@ -9,7 +9,7 @@ export default { name: "def_confirm", async execute(interaction) { let id = interaction.guild.id; - if (debug === "true") console.log("[DEBUG] User confirmed, proceeding..."); + if (debug === "true") console.log("User confirmed, proceeding..."); settings.prepare(`DROP TABLE IF EXISTS guild_${id}`).run(); settings .prepare( @@ -25,7 +25,7 @@ export default { statement.run("fail_threshold", "10"); }); transaction(); - if (debug === "true") console.log(`[DEBUG] Reset finished for ${id}!`); + if (debug === "true") console.log(`Reset finished for ${id}!`); return interaction.update({ content: "Your settings have been reset successfully!", components: [], diff --git a/interactions/buttons/defaults.js b/interactions/buttons/defaults.js index 6e08f37..3c82fcb 100644 --- a/interactions/buttons/defaults.js +++ b/interactions/buttons/defaults.js @@ -6,9 +6,9 @@ export default { async execute(interaction) { const id = interaction.guild.id; if (debug === "true") - console.log(`[DEBUG] Preparing to reset settings for ${id}...`); + console.log(`Preparing to reset settings for ${id}...`); if (debug === "true") - console.log("[DEBUG] Confirmation required - awaiting user input..."); + console.log("Confirmation required - awaiting user input..."); const confirm = new Discord.ButtonBuilder() .setCustomId(`def_confirm`) .setLabel(`Yes`) diff --git a/interactions/buttons/loop.js b/interactions/buttons/loop.js index 6f34dfc..1dce346 100644 --- a/interactions/buttons/loop.js +++ b/interactions/buttons/loop.js @@ -18,7 +18,7 @@ export default { ) { case "true": { if (debug === "true") - console.log("[DEBUG] Unlooping the current track..."); + console.log("Unlooping the current track..."); queue .prepare(`UPDATE guild_${id} SET isLooped = 'false' LIMIT 1`) .run(); @@ -29,7 +29,7 @@ export default { } case "false": { if (debug === "true") - console.log("[DEBUG] Looping the current track..."); + console.log("Looping the current track..."); queue.prepare(`UPDATE guild_${id} SET isLooped = 'true' LIMIT 1`).run(); return interaction.reply({ content: "The current track will be looped!", diff --git a/interactions/buttons/notifications.js b/interactions/buttons/notifications.js index e2b8b98..4e0e3d7 100644 --- a/interactions/buttons/notifications.js +++ b/interactions/buttons/notifications.js @@ -14,7 +14,7 @@ export default { case "false": if (debug === "true") console.log( - "[DEBUG] Notifications are disabled for " + + "Notifications are disabled for " + id + ", switching on...", ); @@ -25,7 +25,7 @@ export default { case "true": if (debug === "true") console.log( - "[DEBUG] Notifications are enabled for " + + "Notifications are enabled for " + id + ", switching off...", ); diff --git a/interactions/buttons/pause.js b/interactions/buttons/pause.js index c2ec586..9ca3f13 100644 --- a/interactions/buttons/pause.js +++ b/interactions/buttons/pause.js @@ -11,7 +11,7 @@ export default { switch (player._state.status) { case "paused": { if (debug === "true") - console.log("[DEBUG] Player is paused, unpausing..."); + console.log("Player is paused, unpausing..."); player.unpause(); return interaction.reply({ content: "Unpaused!", @@ -20,7 +20,7 @@ export default { } case "playing": { if (debug === "true") - console.log("[DEBUG] Player is not paused, pausing..."); + console.log("Player is not paused, pausing..."); player.pause(); return interaction.reply({ content: "Paused!", diff --git a/interactions/buttons/skip.js b/interactions/buttons/skip.js index c8b1835..3a0ef83 100644 --- a/interactions/buttons/skip.js +++ b/interactions/buttons/skip.js @@ -18,7 +18,7 @@ export default { channel.members.size !== 2) || music.getQueueLength(interaction.guild.id) === 1 ) { - if (debug === "true") console.log("[DEBUG] Skip not allowed..."); + if (debug === "true") console.log("Skip not allowed..."); return interaction.reply({ content: "You are not allowed to skip!", flags: Discord.MessageFlags.Ephemeral, @@ -26,10 +26,10 @@ export default { } if (music.getFromQueue(id).isLooped === "true") { if (debug === "true") - console.log("[DEBUG] The current track is looped, unlooping..."); + console.log("The current track is looped, unlooping..."); queue.prepare(`UPDATE guild_${id} SET isLooped = 'false' LIMIT 1`).run(); } - if (debug === "true") console.log("[DEBUG] Skipping the current track..."); + if (debug === "true") console.log("Skipping the current track..."); if (player._state.status === "paused") player.unpause(); player.stop(); interaction.reply({ diff --git a/interactions/buttons/stop.js b/interactions/buttons/stop.js index 00fdf13..e5c2959 100644 --- a/interactions/buttons/stop.js +++ b/interactions/buttons/stop.js @@ -17,7 +17,7 @@ export default { channel.members.size !== 2 ) { if (debug === "true") - console.log("[DEBUG] User is not admin or alone, stop not allowed..."); + console.log("User is not admin or alone, stop not allowed..."); return interaction.reply({ content: "You are not allowed to stop!", flags: Discord.MessageFlags.Ephemeral, @@ -30,7 +30,7 @@ export default { flags: Discord.MessageFlags.Ephemeral, }); else { - if (debug === "true") console.log("[DEBUG] Stopping the connection..."); + if (debug === "true") console.log("Stopping the connection..."); let connection = getVoiceConnection(id); connection.destroy(); music.players.delete(id); diff --git a/interactions/buttons/tagdef_confirm.js b/interactions/buttons/tagdef_confirm.js index c5b69ce..3c9755c 100644 --- a/interactions/buttons/tagdef_confirm.js +++ b/interactions/buttons/tagdef_confirm.js @@ -9,14 +9,14 @@ export default { name: "tagdef_confirm", async execute(interaction) { let id = interaction.guild.id; - if (debug === "true") console.log("[DEBUG] User confirmed, proceeding..."); + if (debug === "true") console.log("User confirmed, proceeding..."); tags.prepare(`DROP TABLE IF EXISTS guild_${id}`).run(); tags .prepare( `CREATE TABLE IF NOT EXISTS guild_${id} (tag TEXT, response TEXT)`, ) .run(); - if (debug === "true") console.log(`[DEBUG] Reset finished for ${id}!`); + if (debug === "true") console.log(`Reset finished for ${id}!`); return interaction.update({ content: "Your tags have been wiped successfully!", components: [], diff --git a/interactions/buttons/tagdefaults.js b/interactions/buttons/tagdefaults.js index 39140bb..4314c00 100644 --- a/interactions/buttons/tagdefaults.js +++ b/interactions/buttons/tagdefaults.js @@ -6,9 +6,9 @@ export default { async execute(interaction) { const id = interaction.guild.id; if (debug === "true") - console.log(`[DEBUG] Preparing to clear tags for ${id}...`); + console.log(`Preparing to clear tags for ${id}...`); if (debug === "true") - console.log("[DEBUG] Confirmation required - awaiting user input..."); + console.log("Confirmation required - awaiting user input..."); const confirm = new Discord.ButtonBuilder() .setCustomId(`tagdef_confirm`) .setLabel(`Yes`) diff --git a/interactions/commands/music/controls.js b/interactions/commands/music/controls.js index 655f2f0..9a84dc9 100644 --- a/interactions/commands/music/controls.js +++ b/interactions/commands/music/controls.js @@ -9,12 +9,12 @@ export default { async execute(interaction) { if (!interaction.member.voice.channel) { if (debug === "true") - console.log("[DEBUG] No voice channel found, aborting..."); + console.log("No voice channel found, aborting..."); return interaction.editReply("You need to join a voice channel first!"); } if (music.getQueueLength(interaction.guild.id) === 0) { if (debug === "true") - console.log("[DEBUG] No tracks are playing, aborting..."); + console.log("No tracks are playing, aborting..."); return interaction.editReply( "The queue is empty, add tracks to use the player controls!", ); diff --git a/interactions/commands/music/disconnect.js b/interactions/commands/music/disconnect.js index f096912..cc33c50 100644 --- a/interactions/commands/music/disconnect.js +++ b/interactions/commands/music/disconnect.js @@ -19,13 +19,13 @@ export default { channel.members.size !== 2 ) { if (debug === "true") - console.log("[DEBUG] User is not admin or alone, stop not allowed..."); + console.log("User is not admin or alone, stop not allowed..."); return interaction.reply({ content: "You are not allowed to disconnect the bot!", flags: Discord.MessageFlags.Ephemeral, }); } - if (debug === "true") console.log("[DEBUG] Stopping the connection..."); + if (debug === "true") console.log("Stopping the connection..."); let connection = getVoiceConnection(id); if (connection) connection.destroy(); music.players.delete(id); diff --git a/interactions/commands/music/play.js b/interactions/commands/music/play.js index 0aca164..ede6ba6 100644 --- a/interactions/commands/music/play.js +++ b/interactions/commands/music/play.js @@ -33,7 +33,7 @@ export default { const id = interaction.guild.id; if (!interaction.member.voice.channel) { if (debug === "true") - console.log("[DEBUG] No voice channel found, aborting..."); + console.log("No voice channel found, aborting..."); return interaction.editReply("You need to join a voice channel first!"); } let track = interaction.options.getAttachment("track"); diff --git a/interactions/commands/music/queue.js b/interactions/commands/music/queue.js index 6c35c71..2cca226 100644 --- a/interactions/commands/music/queue.js +++ b/interactions/commands/music/queue.js @@ -14,7 +14,7 @@ export default { let queuelength = queue.prepare(`SELECT * FROM guild_${id}`).all().length; if (queuelength !== 0) { if (debug === "true") - console.log(`[DEBUG] Queue for ${id} is not empty, fetching tracks...`); + console.log(`Queue for ${id} is not empty, fetching tracks...`); queue .prepare(`SELECT * FROM guild_${id}`) .all() @@ -29,7 +29,7 @@ export default { } }); } else { - if (debug === "true") console.log(`[DEBUG] Queue for ${id} is empty...`); + if (debug === "true") console.log(`Queue for ${id} is empty...`); embed.setDescription("The queue is currently empty."); } embed.setTitle(`Queue for ${interaction.guild.name}`); diff --git a/interactions/commands/music/upload.js b/interactions/commands/music/upload.js index ba1a1f9..6886a70 100644 --- a/interactions/commands/music/upload.js +++ b/interactions/commands/music/upload.js @@ -28,7 +28,7 @@ export default { }); } else { if (debug === "true") - console.log(`[DEBUG] Adding track(s) to the cache...`); + console.log(`Adding track(s) to the cache...`); let name = interaction.options.getString("display_name"); let status; if (name !== undefined) status = await music.getLocalFile(track, name); diff --git a/interactions/commands/tags/tags.js b/interactions/commands/tags/tags.js index 8366bfa..27f99d6 100644 --- a/interactions/commands/tags/tags.js +++ b/interactions/commands/tags/tags.js @@ -12,10 +12,10 @@ export default { .setDescription("List tags"), async execute(interaction) { let id = interaction.guild.id; - if (debug === "true") console.log(`[DEBUG] Fetching tag list for ${id}...`); + if (debug === "true") console.log(`Fetching tag list for ${id}...`); let responses = tags.prepare(`SELECT * FROM guild_${id}`).all(); if (responses.length === 0) { - if (debug === "true") console.log("[DEBUG] No tags found..."); + if (debug === "true") console.log("No tags found..."); let tagsembed = new Discord.EmbedBuilder().setTitle( `Tags for ${interaction.guild.name}`, ); diff --git a/interactions/menus/gleave.js b/interactions/menus/gleave.js index 41bbb9e..3f078c2 100644 --- a/interactions/menus/gleave.js +++ b/interactions/menus/gleave.js @@ -2,7 +2,7 @@ const debug = process.env.DEBUG; export default { name: "gleave", async execute(interaction) { - if (debug === "true") console.log(`[DEBUG] Starting guild deletion...`); + if (debug === "true") console.log(`Starting guild deletion...`); const guilds = interaction.values; for (const guild of guilds) { interaction.client.guilds.cache.get(guild).leave(); diff --git a/interactions/menus/selectlocal.js b/interactions/menus/selectlocal.js index 79f2719..34f8d91 100644 --- a/interactions/menus/selectlocal.js +++ b/interactions/menus/selectlocal.js @@ -11,7 +11,7 @@ export default { async execute(interaction) { let id = interaction.guild.id; if (debug === "true") - console.log(`[DEBUG] Adding track(s) to the queue...`); + console.log(`Adding track(s) to the queue...`); let connection = music.getConnection(interaction); const tracks = interaction.values; service.music_pages.delete(id); diff --git a/interactions/menus/tagdelete.js b/interactions/menus/tagdelete.js index d3eae17..a98f02a 100644 --- a/interactions/menus/tagdelete.js +++ b/interactions/menus/tagdelete.js @@ -10,15 +10,15 @@ export default { async execute(interaction) { let id = interaction.guild.id; if (debug === "true") - console.log(`[DEBUG] Starting tag deletion for ${id}...`); + console.log(`Starting tag deletion for ${id}...`); const keywords = interaction.values; for (const keyword of keywords) { tags.prepare(`DELETE FROM guild_${id} WHERE tag = '${keyword}'`).run(); } - if (debug === "true") console.log(`[DEBUG] Fetching tag list for ${id}...`); + if (debug === "true") console.log(`Fetching tag list for ${id}...`); let responses = tags.prepare(`SELECT * FROM guild_${id}`).all(); if (responses.length === 0) { - if (debug === "true") console.log("[DEBUG] No tags found..."); + if (debug === "true") console.log("No tags found..."); let tagsembed = new Discord.EmbedBuilder().setTitle( `Tags for ${interaction.guild.name}`, ); diff --git a/interactions/modals/say.js b/interactions/modals/say.js index 777e354..8649bb4 100644 --- a/interactions/modals/say.js +++ b/interactions/modals/say.js @@ -8,7 +8,7 @@ export default { let msg = interaction.fields.getTextInputValue("responseInput"); if (chl) { if (debug === "true") - console.log(`[DEBUG] Sending dev-generated message to ${chl}...`); + console.log(`Sending dev-generated message to ${chl}...`); interaction.client.channels.cache.get(chl).send(msg); interaction.reply({ content: "Success!", @@ -17,7 +17,7 @@ export default { } else { if (debug === "true") console.log( - `[DEBUG] Sending dev-generated message to ${interaction.channel.id}...`, + `Sending dev-generated message to ${interaction.channel.id}...`, ); interaction.channel.send(msg); interaction.reply({ diff --git a/interactions/modals/setfails.js b/interactions/modals/setfails.js index 1f18ad1..a223763 100644 --- a/interactions/modals/setfails.js +++ b/interactions/modals/setfails.js @@ -12,14 +12,14 @@ export default { 10, ); if (errors < 0 || !Number.isInteger(errors)) { - if (debug === "true") console.log("[DEBUG] Invalid input, aborting..."); + if (debug === "true") console.log("Invalid input, aborting..."); return interaction.reply({ content: "Please provide a valid number!", flags: Discord.MessageFlags.Ephemeral, }); } if (debug === "true") - console.log(`[DEBUG] New error threshold for ${id}: ${errors}...`); + console.log(`New error threshold for ${id}: ${errors}...`); settings .prepare(`UPDATE guild_${id} SET value = ? WHERE option = ?`) .run(errors, "fail_threshold"); diff --git a/interactions/modals/settimeout.js b/interactions/modals/settimeout.js index 27cd2b8..6c98ad6 100644 --- a/interactions/modals/settimeout.js +++ b/interactions/modals/settimeout.js @@ -12,14 +12,14 @@ export default { 10, ); if (timeout < 0 || !Number.isInteger(timeout)) { - if (debug === "true") console.log("[DEBUG] Invalid input, aborting..."); + if (debug === "true") console.log("Invalid input, aborting..."); return interaction.reply({ content: "Please provide a valid number in seconds!", flags: Discord.MessageFlags.Ephemeral, }); } if (debug === "true") - console.log(`[DEBUG] New disconnect timeout for ${id}: ${timeout}...`); + console.log(`New disconnect timeout for ${id}: ${timeout}...`); settings .prepare(`UPDATE guild_${id} SET value = ? WHERE option = ?`) .run(timeout, "disconnect_timeout"); diff --git a/interactions/modals/tagcreate.js b/interactions/modals/tagcreate.js index 2920aec..86b283b 100644 --- a/interactions/modals/tagcreate.js +++ b/interactions/modals/tagcreate.js @@ -16,7 +16,7 @@ export default { .get(keyword); if (tag !== undefined) { if (debug === "true") - console.log("[DEBUG] Tag already exists, aborting..."); + console.log("Tag already exists, aborting..."); return interaction.update({ content: "A tag with that key word already exists!", flags: Discord.MessageFlags.Ephemeral, @@ -25,7 +25,7 @@ export default { tags .prepare(`INSERT OR IGNORE INTO guild_${id} VALUES (?, ?)`) .run(keyword, response); - if (debug === "true") console.log(`[DEBUG] Fetching tag list for ${id}...`); + if (debug === "true") console.log(`Fetching tag list for ${id}...`); let responses = tags.prepare(`SELECT * FROM guild_${id}`).all(); let reply = generateTagsEmbed( responses, diff --git a/utils/music.js b/utils/music.js index a814bd3..69ee8c2 100644 --- a/utils/music.js +++ b/utils/music.js @@ -127,7 +127,7 @@ async function getLocalFile(file, display_name) { }); }) .on("error", (err) => { - if (debug === "true") console.log("[DEBUG] Error: " + err.message); + if (debug === "true") console.log("Error: " + err.message); fs.unlink(path.join(__dirname, cacheFolder, file.name), () => { reject(1); }); @@ -147,14 +147,14 @@ function playLocalFile(file, connection, interaction) { player.play(resource); player.on(AudioPlayerStatus.Idle, async () => { if (debug.debug === true) { - console.log("[DEBUG] No more tracks to play, starting timeout..."); + console.log("No more tracks to play, starting timeout..."); } if (getFromQueue(connection.joinConfig.guildId).isLooped === "false") { removeFromQueue(connection.joinConfig.guildId); } if (getQueueLength(connection.joinConfig.guildId) > 0) { if (debug === "true") { - console.log("[DEBUG] Starting the next track..."); + console.log("Starting the next track..."); } let file = getFromQueue(connection.joinConfig.guildId); playLocalFile(file.name, connection, interaction); @@ -162,7 +162,7 @@ function playLocalFile(file, connection, interaction) { announceTrack(file.track, file.author, interaction); } else { if (debug === "true") { - console.log("[DEBUG] No more tracks to play, starting timeout..."); + console.log("No more tracks to play, starting timeout..."); } let timeout = parseInt( From 49b9664e044812a84f084e55575af5ff0a49aba7 Mon Sep 17 00:00:00 2001 From: alexavil Date: Mon, 26 May 2025 16:10:47 +0000 Subject: [PATCH 4/7] formatting --- index.js | 29 +++++++------------------ interactions/buttons/clear_cache.js | 3 +-- interactions/buttons/loop.js | 6 ++--- interactions/buttons/notifications.js | 8 ++----- interactions/buttons/pause.js | 6 ++--- interactions/buttons/tagdefaults.js | 3 +-- interactions/commands/help/about.js | 6 ++++- interactions/commands/music/controls.js | 6 ++--- interactions/commands/music/play.js | 3 +-- interactions/commands/music/upload.js | 3 +-- interactions/menus/selectlocal.js | 3 +-- interactions/menus/tagdelete.js | 3 +-- interactions/modals/tagcreate.js | 3 +-- 13 files changed, 28 insertions(+), 54 deletions(-) diff --git a/index.js b/index.js index 33d02f1..90f55b8 100644 --- a/index.js +++ b/index.js @@ -233,8 +233,7 @@ function CheckForPerms() { let missing = 0; RequiredPerms.forEach((perm) => { if (!botmember.permissions.has(perm[0])) { - if (debug === "true") - console.log(`Guild ${id} is missing ${perm[1]}.`); + if (debug === "true") console.log(`Guild ${id} is missing ${perm[1]}.`); message += `${perm[1]}\n`; missing++; } @@ -305,9 +304,7 @@ function verifyCache() { function clearMusicData(id) { if (debug === "true") - console.log( - `Bot has restarted, clearing music data for guild ${id}.`, - ); + console.log(`Bot has restarted, clearing music data for guild ${id}.`); music.clearQueue(id); music.players.delete(id); music.connections.delete(id); @@ -355,8 +352,7 @@ function validateSettings() { } function deleteConfig(id) { - if (debug === "true") - console.log(`Deleting config for guild ${id}...`); + if (debug === "true") console.log(`Deleting config for guild ${id}...`); settings.prepare(`DROP TABLE IF EXISTS guild_${id}`).run(); queue.prepare(`DROP TABLE IF EXISTS guild_${id}`).run(); tags.prepare(`DROP TABLE IF EXISTS guild_${id}`).run(); @@ -395,8 +391,7 @@ client.on("guildCreate", (guild) => { }); client.on("guildDelete", (guild) => { - if (debug === "true") - console.log(`A guild (${guild.id}) has been removed!`); + if (debug === "true") console.log(`A guild (${guild.id}) has been removed!`); deleteConfig(guild.id); }); @@ -414,9 +409,7 @@ client.on("interactionCreate", async (interaction) => { try { if (debug === "true") - console.log( - `Trying to execute ${interaction.customId} in ${id}.`, - ); + console.log(`Trying to execute ${interaction.customId} in ${id}.`); modal.execute(interaction); if (monitor !== undefined) return monitor.end(); else return; @@ -433,9 +426,7 @@ client.on("interactionCreate", async (interaction) => { try { if (debug === "true") - console.log( - `Trying to execute ${interaction.customId} in ${id}.`, - ); + console.log(`Trying to execute ${interaction.customId} in ${id}.`); button.execute(interaction); if (monitor !== undefined) return monitor.end(); else return; @@ -452,9 +443,7 @@ client.on("interactionCreate", async (interaction) => { try { if (debug === "true") - console.log( - `Trying to execute ${interaction.customId} in ${id}.`, - ); + console.log(`Trying to execute ${interaction.customId} in ${id}.`); menu.execute(interaction); if (monitor !== undefined) return monitor.end(); else return; @@ -474,9 +463,7 @@ client.on("interactionCreate", async (interaction) => { try { if (debug === "true") - console.log( - `Trying to execute ${interaction.commandName} in ${id}.`, - ); + console.log(`Trying to execute ${interaction.commandName} in ${id}.`); if (command.shouldWait !== false) await interaction.deferReply({ flags: Discord.MessageFlags.Ephemeral }); await command.execute(interaction); diff --git a/interactions/buttons/clear_cache.js b/interactions/buttons/clear_cache.js index c8826b6..d51844e 100644 --- a/interactions/buttons/clear_cache.js +++ b/interactions/buttons/clear_cache.js @@ -5,8 +5,7 @@ export default { name: "clear_cache", async execute(interaction) { const id = interaction.guild.id; - if (debug === "true") - console.log(`Preparing to clear cache for ${id}...`); + if (debug === "true") console.log(`Preparing to clear cache for ${id}...`); if (debug === "true") console.log("Confirmation required - awaiting user input..."); const confirm = new Discord.ButtonBuilder() diff --git a/interactions/buttons/loop.js b/interactions/buttons/loop.js index 1dce346..a36d133 100644 --- a/interactions/buttons/loop.js +++ b/interactions/buttons/loop.js @@ -17,8 +17,7 @@ export default { .isLooped ) { case "true": { - if (debug === "true") - console.log("Unlooping the current track..."); + if (debug === "true") console.log("Unlooping the current track..."); queue .prepare(`UPDATE guild_${id} SET isLooped = 'false' LIMIT 1`) .run(); @@ -28,8 +27,7 @@ export default { }); } case "false": { - if (debug === "true") - console.log("Looping the current track..."); + if (debug === "true") console.log("Looping the current track..."); queue.prepare(`UPDATE guild_${id} SET isLooped = 'true' LIMIT 1`).run(); return interaction.reply({ content: "The current track will be looped!", diff --git a/interactions/buttons/notifications.js b/interactions/buttons/notifications.js index 4e0e3d7..17f298c 100644 --- a/interactions/buttons/notifications.js +++ b/interactions/buttons/notifications.js @@ -14,9 +14,7 @@ export default { case "false": if (debug === "true") console.log( - "Notifications are disabled for " + - id + - ", switching on...", + "Notifications are disabled for " + id + ", switching on...", ); settings .prepare(`UPDATE guild_${id} SET value = ? WHERE option = ?`) @@ -25,9 +23,7 @@ export default { case "true": if (debug === "true") console.log( - "Notifications are enabled for " + - id + - ", switching off...", + "Notifications are enabled for " + id + ", switching off...", ); settings .prepare(`UPDATE guild_${id} SET value = ? WHERE option = ?`) diff --git a/interactions/buttons/pause.js b/interactions/buttons/pause.js index 9ca3f13..cdbf306 100644 --- a/interactions/buttons/pause.js +++ b/interactions/buttons/pause.js @@ -10,8 +10,7 @@ export default { if (!player) return interaction.reply("Nothing to pause!"); switch (player._state.status) { case "paused": { - if (debug === "true") - console.log("Player is paused, unpausing..."); + if (debug === "true") console.log("Player is paused, unpausing..."); player.unpause(); return interaction.reply({ content: "Unpaused!", @@ -19,8 +18,7 @@ export default { }); } case "playing": { - if (debug === "true") - console.log("Player is not paused, pausing..."); + if (debug === "true") console.log("Player is not paused, pausing..."); player.pause(); return interaction.reply({ content: "Paused!", diff --git a/interactions/buttons/tagdefaults.js b/interactions/buttons/tagdefaults.js index 4314c00..314926d 100644 --- a/interactions/buttons/tagdefaults.js +++ b/interactions/buttons/tagdefaults.js @@ -5,8 +5,7 @@ export default { name: "tagdefaults", async execute(interaction) { const id = interaction.guild.id; - if (debug === "true") - console.log(`Preparing to clear tags for ${id}...`); + if (debug === "true") console.log(`Preparing to clear tags for ${id}...`); if (debug === "true") console.log("Confirmation required - awaiting user input..."); const confirm = new Discord.ButtonBuilder() diff --git a/interactions/commands/help/about.js b/interactions/commands/help/about.js index 13c939a..2a04cbb 100644 --- a/interactions/commands/help/about.js +++ b/interactions/commands/help/about.js @@ -33,7 +33,11 @@ export default { .setLabel(`Website`) .setURL("https://doppelbot.jsbox.xyz/") .setStyle(Discord.ButtonStyle.Link); - const row = new Discord.ActionRowBuilder().addComponents(privacy, update, blog); + const row = new Discord.ActionRowBuilder().addComponents( + privacy, + update, + blog, + ); interaction.editReply({ embeds: [help], components: [row] }); }, }; diff --git a/interactions/commands/music/controls.js b/interactions/commands/music/controls.js index 9a84dc9..42e5da1 100644 --- a/interactions/commands/music/controls.js +++ b/interactions/commands/music/controls.js @@ -8,13 +8,11 @@ export default { .setDescription("Display player controls (VC only)"), async execute(interaction) { if (!interaction.member.voice.channel) { - if (debug === "true") - console.log("No voice channel found, aborting..."); + if (debug === "true") console.log("No voice channel found, aborting..."); return interaction.editReply("You need to join a voice channel first!"); } if (music.getQueueLength(interaction.guild.id) === 0) { - if (debug === "true") - console.log("No tracks are playing, aborting..."); + if (debug === "true") console.log("No tracks are playing, aborting..."); return interaction.editReply( "The queue is empty, add tracks to use the player controls!", ); diff --git a/interactions/commands/music/play.js b/interactions/commands/music/play.js index ede6ba6..cc35da2 100644 --- a/interactions/commands/music/play.js +++ b/interactions/commands/music/play.js @@ -32,8 +32,7 @@ export default { async execute(interaction) { const id = interaction.guild.id; if (!interaction.member.voice.channel) { - if (debug === "true") - console.log("No voice channel found, aborting..."); + if (debug === "true") console.log("No voice channel found, aborting..."); return interaction.editReply("You need to join a voice channel first!"); } let track = interaction.options.getAttachment("track"); diff --git a/interactions/commands/music/upload.js b/interactions/commands/music/upload.js index 6886a70..bd31215 100644 --- a/interactions/commands/music/upload.js +++ b/interactions/commands/music/upload.js @@ -27,8 +27,7 @@ export default { flags: Discord.MessageFlags.Ephemeral, }); } else { - if (debug === "true") - console.log(`Adding track(s) to the cache...`); + if (debug === "true") console.log(`Adding track(s) to the cache...`); let name = interaction.options.getString("display_name"); let status; if (name !== undefined) status = await music.getLocalFile(track, name); diff --git a/interactions/menus/selectlocal.js b/interactions/menus/selectlocal.js index 34f8d91..7145e05 100644 --- a/interactions/menus/selectlocal.js +++ b/interactions/menus/selectlocal.js @@ -10,8 +10,7 @@ export default { name: "selectlocal", async execute(interaction) { let id = interaction.guild.id; - if (debug === "true") - console.log(`Adding track(s) to the queue...`); + if (debug === "true") console.log(`Adding track(s) to the queue...`); let connection = music.getConnection(interaction); const tracks = interaction.values; service.music_pages.delete(id); diff --git a/interactions/menus/tagdelete.js b/interactions/menus/tagdelete.js index a98f02a..5618e12 100644 --- a/interactions/menus/tagdelete.js +++ b/interactions/menus/tagdelete.js @@ -9,8 +9,7 @@ export default { name: "tagdelete", async execute(interaction) { let id = interaction.guild.id; - if (debug === "true") - console.log(`Starting tag deletion for ${id}...`); + if (debug === "true") console.log(`Starting tag deletion for ${id}...`); const keywords = interaction.values; for (const keyword of keywords) { tags.prepare(`DELETE FROM guild_${id} WHERE tag = '${keyword}'`).run(); diff --git a/interactions/modals/tagcreate.js b/interactions/modals/tagcreate.js index 86b283b..870369f 100644 --- a/interactions/modals/tagcreate.js +++ b/interactions/modals/tagcreate.js @@ -15,8 +15,7 @@ export default { .prepare(`SELECT * FROM guild_${id} WHERE tag = ?`) .get(keyword); if (tag !== undefined) { - if (debug === "true") - console.log("Tag already exists, aborting..."); + if (debug === "true") console.log("Tag already exists, aborting..."); return interaction.update({ content: "A tag with that key word already exists!", flags: Discord.MessageFlags.Ephemeral, From 3d110ef21c234b686c5b79bb6aa45532ddad0867 Mon Sep 17 00:00:00 2001 From: alexavil Date: Mon, 26 May 2025 16:19:25 +0000 Subject: [PATCH 5/7] manage dependencies --- package-lock.json | 229 +++++++++++++++++++++++++++++----------------- package.json | 8 +- 2 files changed, 148 insertions(+), 89 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0cc1312..13d3bb2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,13 +10,13 @@ "license": "MIT", "dependencies": { "@discordjs/voice": "^0.18.0", - "@sentry/node": "^9.13.0", - "@sentry/profiling-node": "^9.13.0", + "@sentry/node": "^9.22.0", + "@sentry/profiling-node": "^9.22.0", "@sentry/tracing": "^7.120.3", "avconv": "^3.1.0", - "better-sqlite3": "^11.9.1", + "better-sqlite3": "^11.10.0", "cron": "^4.3.0", - "discord.js": "^14.18.0", + "discord.js": "^14.19.3", "dotenv": "^16.5.0", "ffmpeg": "^0.0.4", "ffmpeg-static": "^5.2.0", @@ -44,15 +44,15 @@ } }, "node_modules/@discordjs/builders": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.10.1.tgz", - "integrity": "sha512-OWo1fY4ztL1/M/DUyRPShB4d/EzVfuUvPTRRHRIt/YxBrUYSz0a+JicD5F5zHFoNs2oTuWavxCOVFV1UljHTng==", + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.11.2.tgz", + "integrity": "sha512-F1WTABdd8/R9D1icJzajC4IuLyyS8f3rTOz66JsSI3pKvpCAtsMBweu8cyNYsIyvcrKAVn9EPK+Psoymq+XC0A==", "license": "Apache-2.0", "dependencies": { - "@discordjs/formatters": "^0.6.0", + "@discordjs/formatters": "^0.6.1", "@discordjs/util": "^1.1.1", "@sapphire/shapeshift": "^4.0.0", - "discord-api-types": "^0.37.119", + "discord-api-types": "^0.38.1", "fast-deep-equal": "^3.1.3", "ts-mixer": "^6.0.4", "tslib": "^2.6.3" @@ -64,6 +64,15 @@ "url": "https://github.com/discordjs/discord.js?sponsor" } }, + "node_modules/@discordjs/builders/node_modules/discord-api-types": { + "version": "0.38.8", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.8.tgz", + "integrity": "sha512-xuRXPD44FcbKHrQK15FS1HFlMRNJtsaZou/SVws18vQ7zHqmlxyDktMkZpyvD6gE2ctGOVYC/jUyoMMAyBWfcw==", + "license": "MIT", + "workspaces": [ + "scripts/actions/documentation" + ] + }, "node_modules/@discordjs/collection": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", @@ -74,12 +83,12 @@ } }, "node_modules/@discordjs/formatters": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.6.0.tgz", - "integrity": "sha512-YIruKw4UILt/ivO4uISmrGq2GdMY6EkoTtD0oS0GvkJFRZbTSdPhzYiUILbJ/QslsvC9H9nTgGgnarnIl4jMfw==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.6.1.tgz", + "integrity": "sha512-5cnX+tASiPCqCWtFcFslxBVUaCetB0thvM/JyavhbXInP1HJIEU+Qv/zMrnuwSsX3yWH2lVXNJZeDK3EiP4HHg==", "license": "Apache-2.0", "dependencies": { - "discord-api-types": "^0.37.114" + "discord-api-types": "^0.38.1" }, "engines": { "node": ">=16.11.0" @@ -88,10 +97,19 @@ "url": "https://github.com/discordjs/discord.js?sponsor" } }, + "node_modules/@discordjs/formatters/node_modules/discord-api-types": { + "version": "0.38.8", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.8.tgz", + "integrity": "sha512-xuRXPD44FcbKHrQK15FS1HFlMRNJtsaZou/SVws18vQ7zHqmlxyDktMkZpyvD6gE2ctGOVYC/jUyoMMAyBWfcw==", + "license": "MIT", + "workspaces": [ + "scripts/actions/documentation" + ] + }, "node_modules/@discordjs/rest": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.4.3.tgz", - "integrity": "sha512-+SO4RKvWsM+y8uFHgYQrcTl/3+cY02uQOH7/7bKbVZsTfrfpoE62o5p+mmV+s7FVhTX82/kQUGGbu4YlV60RtA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.5.0.tgz", + "integrity": "sha512-PWhchxTzpn9EV3vvPRpwS0EE2rNYB9pvzDU/eLLW3mByJl0ZHZjHI2/wA8EbH2gRMQV7nu+0FoDF84oiPl8VAQ==", "license": "Apache-2.0", "dependencies": { "@discordjs/collection": "^2.1.1", @@ -99,7 +117,7 @@ "@sapphire/async-queue": "^1.5.3", "@sapphire/snowflake": "^3.5.3", "@vladfrangu/async_event_emitter": "^2.4.6", - "discord-api-types": "^0.37.119", + "discord-api-types": "^0.38.1", "magic-bytes.js": "^1.10.0", "tslib": "^2.6.3", "undici": "6.21.1" @@ -123,6 +141,15 @@ "url": "https://github.com/discordjs/discord.js?sponsor" } }, + "node_modules/@discordjs/rest/node_modules/discord-api-types": { + "version": "0.38.8", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.8.tgz", + "integrity": "sha512-xuRXPD44FcbKHrQK15FS1HFlMRNJtsaZou/SVws18vQ7zHqmlxyDktMkZpyvD6gE2ctGOVYC/jUyoMMAyBWfcw==", + "license": "MIT", + "workspaces": [ + "scripts/actions/documentation" + ] + }, "node_modules/@discordjs/util": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.1.1.tgz", @@ -189,18 +216,18 @@ } }, "node_modules/@discordjs/ws": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.2.1.tgz", - "integrity": "sha512-PBvenhZG56a6tMWF/f4P6f4GxZKJTBG95n7aiGSPTnodmz4N5g60t79rSIAq7ywMbv8A4jFtexMruH+oe51aQQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.2.2.tgz", + "integrity": "sha512-dyfq7yn0wO0IYeYOs3z79I6/HumhmKISzFL0Z+007zQJMtAFGtt3AEoq1nuLXtcunUE5YYYQqgKvybXukAK8/w==", "license": "Apache-2.0", "dependencies": { "@discordjs/collection": "^2.1.0", - "@discordjs/rest": "^2.4.3", + "@discordjs/rest": "^2.5.0", "@discordjs/util": "^1.1.0", "@sapphire/async-queue": "^1.5.2", "@types/ws": "^8.5.10", "@vladfrangu/async_event_emitter": "^2.2.4", - "discord-api-types": "^0.37.119", + "discord-api-types": "^0.38.1", "tslib": "^2.6.2", "ws": "^8.17.0" }, @@ -223,6 +250,15 @@ "url": "https://github.com/discordjs/discord.js?sponsor" } }, + "node_modules/@discordjs/ws/node_modules/discord-api-types": { + "version": "0.38.8", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.8.tgz", + "integrity": "sha512-xuRXPD44FcbKHrQK15FS1HFlMRNJtsaZou/SVws18vQ7zHqmlxyDktMkZpyvD6gE2ctGOVYC/jUyoMMAyBWfcw==", + "license": "MIT", + "workspaces": [ + "scripts/actions/documentation" + ] + }, "node_modules/@opentelemetry/api": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", @@ -367,23 +403,6 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-fastify": { - "version": "0.44.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.44.2.tgz", - "integrity": "sha512-arSp97Y4D2NWogoXRb8CzFK3W2ooVdvqRRtQDljFt9uC3zI6OuShgey6CVFC0JxT1iGjkAr1r4PDz23mWrFULQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.57.1", - "@opentelemetry/semantic-conventions": "^1.27.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, "node_modules/@opentelemetry/instrumentation-fs": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.19.1.tgz", @@ -778,9 +797,9 @@ } }, "node_modules/@prisma/instrumentation": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-6.5.0.tgz", - "integrity": "sha512-morJDtFRoAp5d/KENEm+K6Y3PQcn5bCvpJ5a9y3V3DNMrNy/ZSn2zulPGj+ld+Xj2UYVoaMJ8DpBX/o6iF6OiA==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-6.7.0.tgz", + "integrity": "sha512-3NuxWlbzYNevgPZbV0ktA2z6r0bfh0g22ONTxcK09a6+6MdIPjHsYx1Hnyu4yOq+j7LmupO5J69hhuOnuvj8oQ==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.52.0 || ^0.53.0 || ^0.54.0 || ^0.55.0 || ^0.56.0 || ^0.57.0" @@ -823,9 +842,9 @@ } }, "node_modules/@sentry-internal/node-cpu-profiler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/node-cpu-profiler/-/node-cpu-profiler-2.1.0.tgz", - "integrity": "sha512-/gPj8ARZ8Jw8gCQWToCiUyLoOxBDP8wuFNx07mAXegYiDa4NcIvo37ZzDWaTG+wjwa/LvCpHxHff6pejt4KOKg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/node-cpu-profiler/-/node-cpu-profiler-2.2.0.tgz", + "integrity": "sha512-oLHVYurqZfADPh5hvmQYS5qx8t0UZzT2u6+/68VXsFruQEOnYJTODKgU3BVLmemRs3WE6kCJjPeFdHVYOQGSzQ==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -864,18 +883,18 @@ } }, "node_modules/@sentry/core": { - "version": "9.13.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-9.13.0.tgz", - "integrity": "sha512-Zn1Qec5XNkNRE/M5QjL6YJLghETg6P188G/v2OzdHdHIRf0Y58/SnJilu3louF+ogos6kaSqqdMgzqKgZ8tCdg==", + "version": "9.22.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-9.22.0.tgz", + "integrity": "sha512-ixvtKmPF42Y6ckGUbFlB54OWI75H2gO5UYHojO6eXFpS7xO3ZGgV/QH6wb40mWK+0w5XZ0233FuU9VpsuE6mKA==", "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@sentry/node": { - "version": "9.13.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-9.13.0.tgz", - "integrity": "sha512-75UVkrED5b0BaazNQKCmF8NqeqjErxildPojDyC037JN+cVFMPr/kFFGGm7E+eCvA/j2pAPUzqifHp/PjykPcw==", + "version": "9.22.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-9.22.0.tgz", + "integrity": "sha512-89r2p6n0xeT2eiqIB0WXgz/rJzUgiOgZex7NvYwzEGeP0GoteDIf0Kbth/gCOy1md/ngiW+0X+S2Ed/uRw4XEQ==", "license": "MIT", "dependencies": { "@opentelemetry/api": "^1.9.0", @@ -886,7 +905,6 @@ "@opentelemetry/instrumentation-connect": "0.43.1", "@opentelemetry/instrumentation-dataloader": "0.16.1", "@opentelemetry/instrumentation-express": "0.47.1", - "@opentelemetry/instrumentation-fastify": "0.44.2", "@opentelemetry/instrumentation-fs": "0.19.1", "@opentelemetry/instrumentation-generic-pool": "0.43.1", "@opentelemetry/instrumentation-graphql": "0.47.1", @@ -908,44 +926,45 @@ "@opentelemetry/resources": "^1.30.1", "@opentelemetry/sdk-trace-base": "^1.30.1", "@opentelemetry/semantic-conventions": "^1.30.0", - "@prisma/instrumentation": "6.5.0", - "@sentry/core": "9.13.0", - "@sentry/opentelemetry": "9.13.0", - "import-in-the-middle": "^1.13.0" + "@prisma/instrumentation": "6.7.0", + "@sentry/core": "9.22.0", + "@sentry/opentelemetry": "9.22.0", + "import-in-the-middle": "^1.13.1", + "minimatch": "^9.0.0" }, "engines": { "node": ">=18" } }, "node_modules/@sentry/opentelemetry": { - "version": "9.13.0", - "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-9.13.0.tgz", - "integrity": "sha512-TLSP0n+sXKVcVkAM2ttVmXcAT2K3e9D5gdPfr6aCnW+KIGJuD7wzla/TIcTWFaVwUejbvXAB6IFpZ/qA8HFwyA==", + "version": "9.22.0", + "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-9.22.0.tgz", + "integrity": "sha512-m6JI2LUCm4FT34OQgh7or2Y9chKn8BrqawNqu7BEqbsGADE5VPwtdu7DwPOD7pC6KN9lGHVf0bqS7197e8Kz/A==", "license": "MIT", "dependencies": { - "@sentry/core": "9.13.0" + "@sentry/core": "9.22.0" }, "engines": { "node": ">=18" }, "peerDependencies": { "@opentelemetry/api": "^1.9.0", - "@opentelemetry/context-async-hooks": "^1.30.1", - "@opentelemetry/core": "^1.30.1", - "@opentelemetry/instrumentation": "^0.57.1", - "@opentelemetry/sdk-trace-base": "^1.30.1", - "@opentelemetry/semantic-conventions": "^1.28.0" + "@opentelemetry/context-async-hooks": "^1.30.1 || ^2.0.0", + "@opentelemetry/core": "^1.30.1 || ^2.0.0", + "@opentelemetry/instrumentation": "^0.57.1 || ^0.200.0", + "@opentelemetry/sdk-trace-base": "^1.30.1 || ^2.0.0", + "@opentelemetry/semantic-conventions": "^1.30.0" } }, "node_modules/@sentry/profiling-node": { - "version": "9.13.0", - "resolved": "https://registry.npmjs.org/@sentry/profiling-node/-/profiling-node-9.13.0.tgz", - "integrity": "sha512-bg5ypu6csGTdMjI5u6EW5RbIloAXHm5GvvqYYnGOt8V2p2jHPmShtxY6JXcOJ7CflNuZDknh6z58/m0T8HJ3zw==", + "version": "9.22.0", + "resolved": "https://registry.npmjs.org/@sentry/profiling-node/-/profiling-node-9.22.0.tgz", + "integrity": "sha512-a4sDnS3NmCgnk29/C790pN4F0z32m98VdowdTBzgU+1HFfQgcE18R6sFKU2y+VScVm7BD9xn7x94ich5+CsFtw==", "license": "MIT", "dependencies": { - "@sentry-internal/node-cpu-profiler": "^2.0.0", - "@sentry/core": "9.13.0", - "@sentry/node": "9.13.0" + "@sentry-internal/node-cpu-profiler": "^2.2.0", + "@sentry/core": "9.22.0", + "@sentry/node": "9.22.0" }, "bin": { "sentry-prune-profiler-binaries": "scripts/prune-profiler-binaries.js" @@ -1116,6 +1135,12 @@ "node": ">=4.2.0" } }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -1137,9 +1162,9 @@ "license": "MIT" }, "node_modules/better-sqlite3": { - "version": "11.9.1", - "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.9.1.tgz", - "integrity": "sha512-Ba0KR+Fzxh2jDRhdg6TSH0SJGzb8C0aBY4hR8w8madIdIzzC6Y1+kx5qR6eS1Z+Gy20h6ZU28aeyg0z1VIrShQ==", + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.10.0.tgz", + "integrity": "sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -1167,6 +1192,15 @@ "readable-stream": "^3.4.0" } }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -1312,21 +1346,22 @@ "license": "MIT" }, "node_modules/discord.js": { - "version": "14.18.0", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.18.0.tgz", - "integrity": "sha512-SvU5kVUvwunQhN2/+0t55QW/1EHfB1lp0TtLZUSXVHDmyHTrdOj5LRKdR0zLcybaA15F+NtdWuWmGOX9lE+CAw==", + "version": "14.19.3", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.19.3.tgz", + "integrity": "sha512-lncTRk0k+8Q5D3nThnODBR8fR8x2fM798o8Vsr40Krx0DjPwpZCuxxTcFMrXMQVOqM1QB9wqWgaXPg3TbmlHqA==", "license": "Apache-2.0", "dependencies": { - "@discordjs/builders": "^1.10.1", + "@discordjs/builders": "^1.11.2", "@discordjs/collection": "1.5.3", - "@discordjs/formatters": "^0.6.0", - "@discordjs/rest": "^2.4.3", + "@discordjs/formatters": "^0.6.1", + "@discordjs/rest": "^2.5.0", "@discordjs/util": "^1.1.1", - "@discordjs/ws": "^1.2.1", + "@discordjs/ws": "^1.2.2", "@sapphire/snowflake": "3.5.3", - "discord-api-types": "^0.37.119", + "discord-api-types": "^0.38.1", "fast-deep-equal": "3.1.3", "lodash.snakecase": "4.1.1", + "magic-bytes.js": "^1.10.0", "tslib": "^2.6.3", "undici": "6.21.1" }, @@ -1337,6 +1372,15 @@ "url": "https://github.com/discordjs/discord.js?sponsor" } }, + "node_modules/discord.js/node_modules/discord-api-types": { + "version": "0.38.8", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.8.tgz", + "integrity": "sha512-xuRXPD44FcbKHrQK15FS1HFlMRNJtsaZou/SVws18vQ7zHqmlxyDktMkZpyvD6gE2ctGOVYC/jUyoMMAyBWfcw==", + "license": "MIT", + "workspaces": [ + "scripts/actions/documentation" + ] + }, "node_modules/dotenv": { "version": "16.5.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", @@ -1607,11 +1651,26 @@ } }, "node_modules/magic-bytes.js": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.10.0.tgz", - "integrity": "sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.12.1.tgz", + "integrity": "sha512-ThQLOhN86ZkJ7qemtVRGYM+gRgR8GEXNli9H/PMvpnZsE44Xfh3wx9kGJaldg314v85m+bFW6WBMaVHJc/c3zA==", "license": "MIT" }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", diff --git a/package.json b/package.json index d9dbecd..1d7ad05 100644 --- a/package.json +++ b/package.json @@ -11,13 +11,13 @@ "license": "MIT", "dependencies": { "@discordjs/voice": "^0.18.0", - "@sentry/node": "^9.13.0", - "@sentry/profiling-node": "^9.13.0", + "@sentry/node": "^9.22.0", + "@sentry/profiling-node": "^9.22.0", "@sentry/tracing": "^7.120.3", "avconv": "^3.1.0", - "better-sqlite3": "^11.9.1", + "better-sqlite3": "^11.10.0", "cron": "^4.3.0", - "discord.js": "^14.18.0", + "discord.js": "^14.19.3", "dotenv": "^16.5.0", "ffmpeg": "^0.0.4", "ffmpeg-static": "^5.2.0", From 2a7fb162c01546bab6af7099879207d4fededb3d Mon Sep 17 00:00:00 2001 From: alexavil Date: Mon, 26 May 2025 16:36:50 +0000 Subject: [PATCH 6/7] update debug notice --- index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index 90f55b8..14e4211 100644 --- a/index.js +++ b/index.js @@ -180,7 +180,8 @@ if (debug === "true") { console.log(`WARNING: ${name} is in debug mode! Debug mode is intended to be used for testing purposes only. In this mode, ${name} will log most actions and commands, including sensitive information. - We highly recommend redirecting the output to a file. + Telemetry is enabled by default in this mode. + For troubleshooting, see your logs folder. This mode is not recommended for use in production. Please proceed with caution.`); console.log( "Build hash: " + From 3925c77dee8570efee52a9b682791dd7f3a5097f Mon Sep 17 00:00:00 2001 From: alexavil Date: Mon, 26 May 2025 16:40:26 +0000 Subject: [PATCH 7/7] remove unused intents --- index.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/index.js b/index.js index 14e4211..37f2c30 100644 --- a/index.js +++ b/index.js @@ -57,18 +57,12 @@ const client = new Discord.Client({ GatewayIntentBits.DirectMessageReactions, GatewayIntentBits.DirectMessageTyping, GatewayIntentBits.DirectMessages, - GatewayIntentBits.GuildExpressions, - GatewayIntentBits.GuildIntegrations, - GatewayIntentBits.GuildInvites, GatewayIntentBits.GuildMembers, GatewayIntentBits.GuildMessageReactions, GatewayIntentBits.GuildMessageTyping, GatewayIntentBits.GuildMessages, - GatewayIntentBits.GuildModeration, GatewayIntentBits.GuildPresences, - GatewayIntentBits.GuildScheduledEvents, GatewayIntentBits.GuildVoiceStates, - GatewayIntentBits.GuildWebhooks, GatewayIntentBits.Guilds, GatewayIntentBits.MessageContent, ],