Cleanup involving destructures and prettier

This commit is contained in:
powermaker450 2024-10-20 15:16:49 -04:00
parent aec01905b5
commit 4564cfb6a2
7 changed files with 72 additions and 63 deletions

View file

@ -52,9 +52,12 @@ export const data = new SlashCommandBuilder()
export async function execute(interaction: ChatInputCommandInteraction) { export async function execute(interaction: ChatInputCommandInteraction) {
// TODO: This all works as intended, but I'd like for it so be a reusable function // TODO: This all works as intended, but I'd like for it so be a reusable function
// instead because all of this is used in src/main.ts // instead because all of this is used in src/main.ts
const { id: guildId } = interaction.guild!;
const { id: userId } = interaction.user;
try { try {
// If the user is banned in this guild, don't let them post // If the user is banned in this guild, don't let them post
if (dt.isBannedByUser(interaction.guild?.id!, interaction.user.id)) { if (dt.isBannedByUser(guildId, userId)) {
return interaction.reply({ return interaction.reply({
content: "You are banned from confessions in this server!", content: "You are banned from confessions in this server!",
ephemeral: true ephemeral: true
@ -62,7 +65,7 @@ export async function execute(interaction: ChatInputCommandInteraction) {
} }
// If no guild info is present for this guild, don't let the user post // If no guild info is present for this guild, don't let the user post
if (!dt.getGuildInfo(interaction.guild?.id!)) { if (!dt.getGuildInfo(guildId)) {
return interaction.reply({ return interaction.reply({
content: content:
"The bot hasn't been set up yet! Ask the server admins to set it up.", "The bot hasn't been set up yet! Ask the server admins to set it up.",
@ -70,10 +73,8 @@ export async function execute(interaction: ChatInputCommandInteraction) {
}); });
} }
const confessChannel = dt.getGuildInfo(interaction.guild?.id!)?.settings const confessChannel = dt.getGuildInfo(guildId)?.settings.confessChannel;
.confessChannel; const adminChannel = dt.getGuildInfo(guildId)?.settings.modChannel;
const adminChannel = dt.getGuildInfo(interaction.guild?.id!)?.settings
.modChannel;
const messageContent = `"${interaction.options.getString("message")}"`; const messageContent = `"${interaction.options.getString("message")}"`;
const attachment = interaction.options.getString("attachment")!; const attachment = interaction.options.getString("attachment")!;
@ -121,11 +122,11 @@ export async function execute(interaction: ChatInputCommandInteraction) {
.addFields( .addFields(
{ {
name: "Author", name: "Author",
value: `<@${interaction.user.id}>` value: `<@${userId}>`
}, },
{ {
name: "Author ID", name: "Author ID",
value: interaction.user.id value: userId
} }
); );
@ -153,9 +154,10 @@ export async function execute(interaction: ChatInputCommandInteraction) {
components: [actionRow] components: [actionRow]
}); });
adminChannel && await (BotClient.channels.cache.get(adminChannel!) as TextChannel).send({ adminChannel &&
embeds: [adminConfessionEmbed] (await (BotClient.channels.cache.get(adminChannel!) as TextChannel).send({
}); embeds: [adminConfessionEmbed]
}));
dt.addConfession( dt.addConfession(
message, message,
@ -166,8 +168,7 @@ export async function execute(interaction: ChatInputCommandInteraction) {
attachment attachment
); );
const confessionsLength = dt.getGuildInfo(interaction.guild?.id!) const confessionsLength = dt.getGuildInfo(guildId)!.confessions.length;
?.confessions.length!;
// If there are 2 or more confessions, remove the previous confession's button components // If there are 2 or more confessions, remove the previous confession's button components
if (confessionsLength >= 2) { if (confessionsLength >= 2) {
@ -175,9 +176,7 @@ export async function execute(interaction: ChatInputCommandInteraction) {
BotClient.channels.cache.get(confessChannel!) as TextChannel BotClient.channels.cache.get(confessChannel!) as TextChannel
).messages ).messages
.fetch( .fetch(
dt.getGuildInfo(interaction.guild?.id!)?.confessions[ dt.getGuildInfo(guildId)!.confessions[confessionsLength - 2].messageId
confessionsLength - 2
].messageId!
) )
.then(message => { .then(message => {
message.edit({ components: [] }); message.edit({ components: [] });

View file

@ -38,8 +38,11 @@ export const data = new SlashCommandBuilder()
); );
export async function execute(interaction: ChatInputCommandInteraction) { export async function execute(interaction: ChatInputCommandInteraction) {
const { id: guildId } = interaction.guild!;
const { id: userId } = interaction.user;
// If there is no guild info, don't let the user delete anything // If there is no guild info, don't let the user delete anything
if (!dt.getGuildInfo(interaction.guild?.id!)) { if (!dt.getGuildInfo(guildId)) {
return interaction.reply({ return interaction.reply({
content: content:
"The bot hasn't been set up yet! Ask the server admins to set it up.", "The bot hasn't been set up yet! Ask the server admins to set it up.",
@ -48,9 +51,9 @@ export async function execute(interaction: ChatInputCommandInteraction) {
} }
const idVal = interaction.options.getString("id")!; const idVal = interaction.options.getString("id")!;
const result = dt.getConfession(interaction.guild?.id!, idVal); const result = dt.getConfession(guildId, idVal);
// If there is a result, and the user is either an author or has manage messages // If there is a result, and the user is either an author or has manage messages
const allowedByUser = result && result.authorId === interaction.user.id; const allowedByUser = result && result.authorId === userId;
const allowedByMod = const allowedByMod =
result && result &&
interaction.memberPermissions?.has(PermissionFlagsBits.ManageMessages); interaction.memberPermissions?.has(PermissionFlagsBits.ManageMessages);
@ -58,12 +61,8 @@ export async function execute(interaction: ChatInputCommandInteraction) {
// If a confession is found with the given ID, check if the user is the one that posted it, and delete it if they are. // If a confession is found with the given ID, check if the user is the one that posted it, and delete it if they are.
// Otherwise, don't let the user delete anything. // Otherwise, don't let the user delete anything.
if (allowedByUser || allowedByMod) { if (allowedByUser || allowedByMod) {
const confession = dt.getConfession( const confession = dt.getConfession(guildId, idVal)!.messageId;
interaction.guild?.id!, const channelId = dt.getGuildInfo(guildId)!.settings.confessChannel;
idVal
)?.messageId;
const channelId = dt.getGuildInfo(interaction.guild?.id!)?.settings
.confessChannel!;
const emptyEmbed = new EmbedBuilder() const emptyEmbed = new EmbedBuilder()
.setColor(getRandomColor()) .setColor(getRandomColor())
.setTitle("Confession Deleted") .setTitle("Confession Deleted")
@ -76,7 +75,7 @@ export async function execute(interaction: ChatInputCommandInteraction) {
try { try {
// Replace the given confession with an empty embed // Replace the given confession with an empty embed
await (BotClient.channels.cache.get(channelId) as TextChannel).messages await (BotClient.channels.cache.get(channelId) as TextChannel).messages
.fetch(confession!) .fetch(confession)
.then(e => { .then(e => {
e.edit({ e.edit({
embeds: [emptyEmbed] embeds: [emptyEmbed]

View file

@ -61,7 +61,7 @@ export const data = new SlashCommandBuilder()
); );
export async function execute(interaction: ChatInputCommandInteraction) { export async function execute(interaction: ChatInputCommandInteraction) {
const guildId = interaction.guild?.id!; const { id: guildId } = interaction.guild!;
// /confessmod ban <id> // /confessmod ban <id>
if (interaction.options.getSubcommand() === "ban") { if (interaction.options.getSubcommand() === "ban") {
@ -95,7 +95,7 @@ export async function execute(interaction: ChatInputCommandInteraction) {
} }
// /confessmod list // /confessmod list
} else if (interaction.options.getSubcommand() === "list") { } else if (interaction.options.getSubcommand() === "list") {
const bannedMembers = dt.getBans(interaction.guild?.id!); const bannedMembers = dt.getBans(guildId);
let content = bannedMembers.length let content = bannedMembers.length
? "Banned Members:\n" ? "Banned Members:\n"
@ -124,10 +124,7 @@ export async function execute(interaction: ChatInputCommandInteraction) {
} }
// /confessmod pardon <id> // /confessmod pardon <id>
} else if (interaction.options.getSubcommand() === "pardon") { } else if (interaction.options.getSubcommand() === "pardon") {
const result = dt.removeBan( const result = dt.removeBan(guildId, interaction.options.getString("id")!);
interaction.guild?.id!,
interaction.options.getString("id")!
);
try { try {
return result return result

View file

@ -38,14 +38,16 @@ export const data = new SlashCommandBuilder()
.setDefaultMemberPermissions(PermissionFlagsBits.ManageGuild); .setDefaultMemberPermissions(PermissionFlagsBits.ManageGuild);
export async function execute(interaction: CommandInteraction) { export async function execute(interaction: CommandInteraction) {
if (dt.checkSetup(interaction.guild?.id!)) { const { id: guildId } = interaction.guild!;
const { displayName: username } = interaction.user;
if (dt.checkSetup(guildId)) {
return interaction.reply({ return interaction.reply({
content: "This guild has already been set up!", content: "This guild has already been set up!",
ephemeral: true ephemeral: true
}); });
} }
const guildId = interaction.guild?.id;
let confessChannel: string, logChannel: string; let confessChannel: string, logChannel: string;
const channelList = new ChannelSelectMenuBuilder() const channelList = new ChannelSelectMenuBuilder()
@ -56,17 +58,18 @@ export async function execute(interaction: CommandInteraction) {
const skipButton = new ButtonBuilder() const skipButton = new ButtonBuilder()
.setCustomId("skipModChannel") .setCustomId("skipModChannel")
.setLabel("Skip") .setLabel("Skip")
.setStyle(ButtonStyle.Secondary) .setStyle(ButtonStyle.Secondary);
const channelRow = const channelRow =
new ActionRowBuilder<ChannelSelectMenuBuilder>().addComponents(channelList); new ActionRowBuilder<ChannelSelectMenuBuilder>().addComponents(channelList);
const buttonRow = new ActionRowBuilder<ButtonBuilder>() const buttonRow = new ActionRowBuilder<ButtonBuilder>().addComponents(
.addComponents(skipButton); skipButton
);
try { try {
const response = await interaction.reply({ const response = await interaction.reply({
content: `# Let's get started, ${interaction.user.displayName}!\nFirst, let's choose a channel for your confessions.`, content: `# Let's get started, ${username}!\nFirst, let's choose a channel for your confessions.`,
ephemeral: true, ephemeral: true,
components: [channelRow] components: [channelRow]
}); });
@ -77,7 +80,7 @@ export async function execute(interaction: CommandInteraction) {
}); });
collector.on("collect", async i => { collector.on("collect", async i => {
[ confessChannel ] = i.values; [confessChannel] = i.values;
await i.update({ await i.update({
content: "Awesome!", content: "Awesome!",
@ -115,14 +118,14 @@ export async function execute(interaction: CommandInteraction) {
let skipped = false; let skipped = false;
logCollector.on("collect", async ij => { logCollector.on("collect", async ij => {
[ logChannel ] = ij.values; [logChannel] = ij.values;
await ij.update({ await ij.update({
content: "Setup Complete!", content: "Setup Complete!",
components: [] components: []
}); });
dt.setup(guildId!, { dt.setup(guildId, {
confessChannel: confessChannel, confessChannel: confessChannel,
modChannel: logChannel, modChannel: logChannel,
bans: [] bans: []
@ -148,11 +151,12 @@ export async function execute(interaction: CommandInteraction) {
logCollector.stop(); logCollector.stop();
skipCollector.stop(); skipCollector.stop();
} }
}) });
logCollector.on("end", content => { logCollector.on("end", content => {
// If there is no content and the channel hasn't been skipped, follow up with an error message. // If there is no content and the channel hasn't been skipped, follow up with an error message.
(!content.size && !skipped) && !content.size &&
!skipped &&
interaction.followUp({ interaction.followUp({
content: "No channel selected. Please try again.", content: "No channel selected. Please try again.",
ephemeral: true, ephemeral: true,

View file

@ -16,7 +16,11 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
import { ChatInputCommandInteraction, PermissionFlagsBits, SlashCommandBuilder } from "discord.js"; import {
ChatInputCommandInteraction,
PermissionFlagsBits,
SlashCommandBuilder
} from "discord.js";
import { deployCommands } from "../bot"; import { deployCommands } from "../bot";
import Logger from "../utils/Logger"; import Logger from "../utils/Logger";
@ -44,10 +48,13 @@ export async function execute(interaction: ChatInputCommandInteraction) {
cooldownList.add(guildId); cooldownList.add(guildId);
logger.log(`Applied cooldown to "${guildName}"`); logger.log(`Applied cooldown to "${guildName}"`);
setTimeout(() => { setTimeout(
cooldownList.delete(guildId); () => {
logger.log(`Removed cooldown from "${guildName}"`); cooldownList.delete(guildId);
}, minutes*60*1000); logger.log(`Removed cooldown from "${guildName}"`);
},
minutes * 60 * 1000
);
return interaction.reply({ return interaction.reply({
content: "Commands refreshed.", content: "Commands refreshed.",

View file

@ -183,9 +183,12 @@ BotClient.on(Events.InteractionCreate, async interaction => {
components: [actionRow] components: [actionRow]
}); });
adminChannel && await (BotClient.channels.cache.get(adminChannel!) as TextChannel).send({ adminChannel &&
embeds: [adminConfessionEmbed] (await (
}); BotClient.channels.cache.get(adminChannel!) as TextChannel
).send({
embeds: [adminConfessionEmbed]
}));
dt.addConfession( dt.addConfession(
message, message,

View file

@ -82,9 +82,9 @@ export class StoreMan {
} }
// Checks if a guild is not set up // Checks if a guild is not set up
public checkSetup(id: string): boolean { public checkSetup(guildId: string): boolean {
for (const guild of this.data) { for (const guild of this.data) {
if (guild.id === id) { if (guild.id === guildId) {
return true; return true;
} }
} }
@ -93,9 +93,9 @@ export class StoreMan {
} }
// Sets up a guild and stores it in the persistent file // Sets up a guild and stores it in the persistent file
public setup(id: string, opts: GuildSettings): void { public setup(guildId: string, opts: GuildSettings): void {
this.data.push({ this.data.push({
id: id, id: guildId,
confessions: [], confessions: [],
settings: opts settings: opts
}); });
@ -104,16 +104,16 @@ export class StoreMan {
} }
// Clear the settings for a given guild // Clear the settings for a given guild
public clearSettings(id: string): void { public clearSettings(guildId: string): void {
this.data = this.data.filter(guild => { this.data = this.data.filter(guild => {
return guild.id !== id; return guild.id !== guildId;
}); });
this.saveFile(); this.saveFile();
} }
public getGuildInfo(id: string): GuildData | null { public getGuildInfo(guildId: string): GuildData | null {
for (const guild of this.data) { for (const guild of this.data) {
if (guild.id === id) { if (guild.id === guildId) {
return guild; return guild;
} }
} }
@ -130,7 +130,7 @@ export class StoreMan {
content: string, content: string,
attachment?: string attachment?: string
): boolean { ): boolean {
const guildId = message.guild?.id; const { id: guildId } = message.guild!;
for (const guild of this.data) { for (const guild of this.data) {
if (guild.id === guildId) { if (guild.id === guildId) {