95 lines
4.4 KiB
JavaScript
95 lines
4.4 KiB
JavaScript
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) {
|
|
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:** <t:${Math.floor(new Date(ban.banTimestamp)/1000)}>\n**Expires Timestamp:** ${ban.expiresTimestamp ? `<t:${new Date(ban.expiresTimestamp)/1000}>` : "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:** <t:${Math.floor(new Date(ban.banTimestamp)/1000)}>\n**Expires Timestamp:** ${ban.expiresTimestamp ? `<t:${new Date(ban.expiresTimestamp)/1000}>` : "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:** <t:${Math.floor(new Date(ban.banTimestamp)/1000)}>\n**Expires Timestamp:** ${ban.expiresTimestamp ? `<t:${new Date(ban.expiresTimestamp)/1000}>` : "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} |