| import { LoadingEmbed } from "./../../../utils/defaultEmbeds.js"; |
| import Discord, { CommandInteraction, MessageActionRow, MessageButton, MessageSelectMenu } from "discord.js"; |
| import { SlashCommandSubcommandBuilder } from "@discordjs/builders"; |
| import { WrappedCheck } from "jshaiku"; |
| import EmojiEmbed from "../../../utils/generateEmojiEmbed.js"; |
| import client from "../../../utils/client.js"; |
| import { toHexArray, toHexInteger } from "../../../utils/calculate.js"; |
| |
| |
| const logs = { |
| "channelUpdate": "Channels created, deleted or modified", |
| "emojiUpdate": "Server emojis modified", |
| "stickerUpdate": "Server stickers modified", |
| "guildUpdate": "Server settings updated", |
| "guildMemberUpdate": "Member updated (i.e. nickname)", |
| "guildMemberPunish": "Members punished (i.e. muted, banned, kicked)", |
| "guildRoleUpdate": "Role settings changed", |
| "guildInviteUpdate": "Server invite created or deleted", |
| "messageUpdate": "Message edited", |
| "messageDelete": "Message deleted", |
| "messageDeleteBulk": "Messages purged", |
| "messageReactionUpdate": "Message reactions cleared", |
| "messageMassPing": "Message pings multiple members at once", |
| "messageAnnounce": "Message published in announcement channel", |
| "threadUpdate": "Thread created or deleted", |
| "webhookUpdate": "Webhooks created or deleted", |
| "guildMemberVerify": "Member runs verify", |
| "autoModeratorDeleted": "Messages auto deleted by Nucleus", |
| "nucleusSettingsUpdated": "Nucleus' settings updated by a moderator", |
| "ticketUpdate": "Tickets created or deleted" |
| }; |
| |
| const command = (builder: SlashCommandSubcommandBuilder) => |
| builder |
| .setName("events") |
| .setDescription("Sets what events should be logged"); |
| |
| const callback = async (interaction: CommandInteraction): Promise<any> => { |
| await interaction.reply({embeds: LoadingEmbed, fetchReply: true, ephemeral: true}); |
| let m; |
| while (true) { |
| const config = await client.database.guilds.read(interaction.guild.id); |
| const converted = toHexArray(config.logging.logs.toLog); |
| m = await interaction.editReply({embeds: [new EmojiEmbed() |
| .setTitle("Logging Events") |
| .setDescription("Below are the events being logged in the server. You can toggle them on and off in the dropdown") |
| .setStatus("Success") |
| .setEmoji("CHANNEL.TEXT.CREATE") |
| ], components: [ |
| new MessageActionRow().addComponents([new MessageSelectMenu() |
| .setPlaceholder("Set events to log") |
| .setMaxValues(Object.keys(logs).length) |
| .setCustomId("logs") |
| .setMinValues(0) |
| .setOptions(Object.keys(logs).map((e, i) => ({ |
| label: logs[e], |
| value: i.toString(), |
| default: converted.includes(e) |
| }))) |
| ]), |
| new MessageActionRow().addComponents([ |
| new MessageButton() |
| .setLabel("Select all") |
| .setStyle("PRIMARY") |
| .setCustomId("all"), |
| new MessageButton() |
| .setLabel("Select none") |
| .setStyle("DANGER") |
| .setCustomId("none") |
| ]) |
| ]}); |
| let i; |
| try { |
| i = await m.awaitMessageComponent({ time: 300000 }); |
| } catch (e) { |
| break; |
| } |
| i.deferUpdate(); |
| if (i.customId === "logs") { |
| const selected = i.values; |
| const newLogs = toHexInteger(selected.map(e => Object.keys(logs)[parseInt(e)])); |
| await client.database.guilds.write(interaction.guild.id, {"logging.logs.toLog": newLogs}); |
| } else if (i.customId === "all") { |
| const newLogs = toHexInteger(Object.keys(logs).map(e => e)); |
| await client.database.guilds.write(interaction.guild.id, {"logging.logs.toLog": newLogs}); |
| } else if (i.customId === "none") { |
| await client.database.guilds.write(interaction.guild.id, {"logging.logs.toLog": 0}); |
| } else { |
| break; |
| } |
| } |
| m = await interaction.editReply({embeds: [new EmojiEmbed() |
| .setTitle("Logging Events") |
| .setDescription("Below are the events being logged in the server. You can toggle them on and off in the dropdown") |
| .setFooter({text: "Message timed out"}) |
| .setStatus("Success") |
| .setEmoji("CHANNEL.TEXT.CREATE") |
| ]}); |
| }; |
| |
| const check = (interaction: CommandInteraction, defaultCheck: WrappedCheck) => { |
| const member = (interaction.member as Discord.GuildMember); |
| if (!member.permissions.has("MANAGE_GUILD")) throw "You must have the *Manage Server* permission to use this command"; |
| return true; |
| }; |
| |
| export { command }; |
| export { callback }; |
| export { check }; |