const flags = require("../flags") const log = require("../log") const reasonFlags = global.reasonFlags const pool = global.db_pool const lookupBanByID = async (client, interaction, options) => { const banID = options.find(option => option.name === "ban-id").value const connection = await pool.getConnection() try { const row = await connection.query('SELECT * FROM bans WHERE id = ?', [banID]) if (!row || row?.length === 0) { await interaction.reply({ content: `Ban with ID ${banID} not found`, ephemeral: true }) return } const ban = row[0]; const embed = { title: `Ban ID: ${ban.id}`, description: `**Roblox ID:** ${ban.robloxId}\n**Discord ID:** ${ban.discordId}\n**Roblox Username:** ${ban.robloxUsername}\n**Discord Username:** ${ban.discordUsername}\n**Reason Short:** ${ban.reasonShort}\n**Reason Long:** ${ban.reasonLong}\n**Reasons Flag:** ${flags.getSetFlags(ban.reasonsFlag, reasonFlags).join(", ")}\n**Moderator:** ${ban.moderator}\n**Ban Timestamp:** \n**Expires Timestamp:** ${ban.expiresTimestamp ? `` : "Never"}` } await interaction.reply({ embeds: [embed] }) } catch (err) { log.error('Error fetching bans:', err) await interaction.reply({ content: 'An error occurred while fetching the ban.', ephemeral: true }) } finally { connection.release() } } const lookupBanByRobloxID = async (client, interaction, options) => { // There can be multiple bans with the same Roblox ID const robloxID = options.find(option => option.name === "roblox-id").value const connection = await pool.getConnection() try { const rows = await connection.query('SELECT * FROM bans WHERE robloxId = ?', [robloxID]) if (rows.length === 0) { await interaction.reply({ content: `No bans found for Roblox ID ${robloxID}`, ephemeral: true }) return } const embeds = rows.map(ban => { return { title: `Ban ID: ${ban.id}`, description: `**Roblox ID:** ${ban.robloxId}\n**Discord ID:** ${ban.discordId}\n**Roblox Username:** ${ban.robloxUsername}\n**Discord Username:** ${ban.discordUsername}\n**Reason Short:** ${ban.reasonShort}\n**Reason Long:** ${ban.reasonLong}\n**Reasons Flag:** ${flags.getSetFlags(ban.reasonsFlag, reasonFlags).join(", ")}\n**Moderator:** ${ban.moderator}\n**Ban Timestamp:** \n**Expires Timestamp:** ${ban.expiresTimestamp ? `` : "Never"}` } }) await interaction.reply({ embeds: embeds }) } catch (err) { log.error('Error fetching bans:', err) await interaction.reply({ content: 'An error occurred while fetching the ban.', ephemeral: true }) } finally { connection.release() } } const lookupBanByDiscordID = async (client, interaction, options) => { const discordID = options.find(option => option.name === "discord-id").value const connection = await pool.getConnection() try { const rows = await connection.query('SELECT * FROM bans WHERE discordId = ?', [discordID]) if (rows.length === 0) { await interaction.reply({ content: `No bans found for Discord ID ${discordID}`, ephemeral: true }) return } const embeds = rows.map(ban => { return { title: `Ban ID: ${ban.id}`, description: `**Roblox ID:** ${ban.robloxId}\n**Discord ID:** ${ban.discordId}\n**Roblox Username:** ${ban.robloxUsername}\n**Discord Username:** ${ban.discordUsername}\n**Reason Short:** ${ban.reasonShort}\n**Reason Long:** ${ban.reasonLong}\n**Reasons Flag:** ${flags.getSetFlags(ban.reasonsFlag, reasonFlags).join(", ")}\n**Moderator:** ${ban.moderator}\n**Ban Timestamp:** \n**Expires Timestamp:** ${ban.expiresTimestamp ? `` : "Never"}` } }) interaction.reply({ embeds: embeds }) } catch (err) { log.error('Error fetching bans:', err) await interaction.reply({ content: 'An error occurred while fetching the ban.', ephemeral: true }) } finally { connection.release() } } const execute = (client, interaction) => { const subcommand = interaction.options.getSubcommand() const subcommandOptions = interaction.options.data[0].options switch (subcommand) { case "ban-id": lookupBanByID(client, interaction, subcommandOptions) break case "roblox-id": lookupBanByRobloxID(client, interaction, subcommandOptions) break case "discord-id": lookupBanByDiscordID(client, interaction, subcommandOptions) break } } module.exports = {execute}