aboutsummaryrefslogtreecommitdiff
path: root/src/commands
diff options
context:
space:
mode:
Diffstat (limited to 'src/commands')
-rw-r--r--src/commands/config/features.ts1
-rw-r--r--src/commands/config/log.ts86
2 files changed, 87 insertions, 0 deletions
diff --git a/src/commands/config/features.ts b/src/commands/config/features.ts
index 7a7c3bb..3c607c7 100644
--- a/src/commands/config/features.ts
+++ b/src/commands/config/features.ts
@@ -19,6 +19,7 @@ export default class FeaturesCommand extends BushCommand {
}
public override async exec(message: BushMessage | BushSlashMessage): Promise<unknown> {
if (!message.guild) return await message.util.reply(`${util.emojis.error} This command can only be used in servers.`);
+
const featureEmbed = new MessageEmbed().setTitle(`${message.guild!.name}'s Features`).setColor(util.colors.default);
const enabledFeatures = await message.guild!.getSetting('enabledFeatures');
diff --git a/src/commands/config/log.ts b/src/commands/config/log.ts
new file mode 100644
index 0000000..592f700
--- /dev/null
+++ b/src/commands/config/log.ts
@@ -0,0 +1,86 @@
+import { BushCommand, BushMessage, BushSlashMessage, guildLogsArr, GuildLogType } from '@lib';
+import { ArgumentOptions, Flag } from 'discord-akairo';
+import { TextChannel } from 'discord.js';
+
+export default class LogCommand extends BushCommand {
+ public constructor() {
+ super('log', {
+ aliases: ['log', 'logging'],
+ category: 'config',
+ description: {
+ content: 'Set or remove a log channel.',
+ usage: 'log <logType> [channel]',
+ examples: ['log automod #automod-logs']
+ },
+ slash: true,
+ slashOptions: [
+ {
+ name: 'log_type',
+ description: 'What log type would you like to change?',
+ type: 'STRING',
+ required: true,
+ choices: guildLogsArr.map((log) => ({ name: log, value: log }))
+ },
+ {
+ name: 'channel',
+ description: 'What channel would you like these logs to be sent in?',
+ type: 'CHANNEL',
+ required: false
+ }
+ ],
+ channel: 'guild',
+ clientPermissions: ['SEND_MESSAGES'],
+ userPermissions: ['SEND_MESSAGES', 'MANAGE_GUILD']
+ });
+ }
+
+ *args(): IterableIterator<ArgumentOptions | Flag> {
+ const log_type = yield {
+ id: 'log',
+ type: guildLogsArr,
+ prompt: {
+ start: 'What log type would you like to change?',
+ retry: `{error} Choose either ${util.oxford(
+ guildLogsArr.map((l) => `\`${l}\``),
+ 'or'
+ )}`,
+ optional: false
+ }
+ };
+
+ const channel = yield {
+ id: 'channel',
+ type: 'textChannel',
+ prompt: {
+ start: `What channel would you like ${log_type} logs to be sent in?`,
+ retry: `{error} Choose a valid text channel for ${log_type} logs to be sent in.`
+ }
+ };
+
+ return { log_type, channel };
+ }
+
+ public override async exec(
+ message: BushMessage | BushSlashMessage,
+ args: { log_type: GuildLogType; channel: TextChannel }
+ ): Promise<unknown> {
+ if (!message.guild) return await message.util.reply(`${util.emojis.error} This command can only be used in servers.`);
+ const currentLogs = await message.guild.getSetting('logChannels');
+ const oldChannel = currentLogs[args.log_type] ?? undefined;
+
+ const action = !!args.channel;
+
+ action ? (currentLogs[args.log_type] = args.channel.id) : delete currentLogs[args.log_type];
+
+ const success = await message.guild.setSetting('logChannels', currentLogs);
+ return await message.util.reply(
+ `${
+ success
+ ? `${util.emojis.success} Successfully ${oldChannel ? 'changed' : 'set'}`
+ : `${util.emojis.error} Unable to ${oldChannel ? 'change' : 'set'}`
+ } ${
+ oldChannel ? ` the \`${args.log_type}\` log channel from <#${oldChannel}>` : ` the \`${args.log_type}\` log channel`
+ } to ${args.channel ? `<#${args.channel.id}>` : '`disabled`'}`
+ );
+ }
+}