UBS/commands/lookup.js

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 || 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:** <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}