TheArtificer/src/commands/toggleInline.ts

154 lines
5.2 KiB
TypeScript

import { CreateGlobalApplicationCommand, DiscordApplicationCommandOptionTypes, DiscordenoMessage, hasGuildPermissions, Interaction } from '@discordeno';
import config from '~config';
import { generateHelpMessage } from 'commands/helpLibrary/generateHelpMessage.ts';
import dbClient from 'db/client.ts';
import { inlineList, queries } from 'db/common.ts';
import { failColor, infoColor1, successColor } from 'embeds/colors.ts';
import utils from 'utils/utils.ts';
export const toggleInlineSC: CreateGlobalApplicationCommand = {
name: 'toggle-inline-rolls',
description: 'Enable or disable inline rolling for this guild.',
options: [
{
type: DiscordApplicationCommandOptionTypes.SubCommand,
name: 'enable',
description: 'Enables/Allows inline rolling in this guild.',
},
{
type: DiscordApplicationCommandOptionTypes.SubCommand,
name: 'disable',
description: 'Disables/Blocks inline rolling in this guild.',
},
{
type: DiscordApplicationCommandOptionTypes.SubCommand,
name: 'status',
description: 'Gets the current status of inline rolling for this guild.',
},
{
type: DiscordApplicationCommandOptionTypes.SubCommand,
name: 'help',
description: 'Opens the help library to the Toggle Inline help page.',
},
],
};
export const toggleInline = async (msgOrInt: DiscordenoMessage | Interaction, args: string[]) => {
// Light telemetry to see how many times a command is being run
dbClient.execute(queries.callIncCnt('inline')).catch((e) => utils.commonLoggers.dbError('toggleInline.ts:16', 'call sproc INC_CNT on', e));
// Local apiArg in lowercase
const apiArg = (args[0] || '').toLowerCase();
const guildId = BigInt(msgOrInt.guildId ?? '0');
// Alert users who DM the bot that this command is for guilds only
if (guildId === 0n) {
utils.sendOrInteract(msgOrInt, 'toggleInline.ts:45', {
embeds: [
{
color: failColor,
title: 'Toggle Inline commands are only available in guilds.',
},
],
});
return;
}
let errorOut = false;
const guildQuery = await dbClient.query(`SELECT guildid FROM allow_inline WHERE guildid = ?`, [guildId]).catch((e0) => {
utils.commonLoggers.dbError('toggleInline.ts:36', 'query', e0);
utils.sendOrInteract(msgOrInt, 'toggleInline.ts:59', {
embeds: [
{
color: failColor,
title: 'Failed to check Inline roll status for this guild.',
description: 'If this issue persists, please report this to the developers.',
},
],
});
errorOut = true;
});
if (errorOut) return;
if (await hasGuildPermissions(guildId, utils.getAuthorIdFromMessageOrInteraction(msgOrInt), ['ADMINISTRATOR'])) {
let enable = false;
switch (apiArg) {
case 'allow':
case 'enable':
enable = true;
if (!inlineList.includes(guildId)) {
await dbClient.execute('INSERT INTO allow_inline(guildid) values(?)', [guildId]).catch((e) => {
utils.commonLoggers.dbError('toggleInline.ts:58', 'insert into allow_inline', e);
errorOut = true;
});
if (!errorOut) {
inlineList.push(guildId);
}
}
break;
case 'block':
case 'disable':
case 'delete':
await dbClient.execute('DELETE FROM allow_inline WHERE guildid = ?', [guildId]).catch((e) => {
utils.commonLoggers.dbError('toggleInline.ts:65', 'delete from allow_inline', e);
errorOut = true;
});
if (!errorOut && inlineList.includes(guildId)) {
inlineList.splice(inlineList.indexOf(guildId), 1);
}
break;
case 'status':
utils.sendOrInteract(msgOrInt, 'toggleInline.ts:98', {
embeds: [
{
color: infoColor1,
title: `Inline Rolls are ${guildQuery.length ? 'Enabled' : 'Disabled'} for this guild`,
description: `To ${guildQuery.length ? 'disable' : 'enable'} them, run the following command:\n\`${config.prefix}inline ${guildQuery.length ? 'disable' : 'enable'}\``,
},
],
});
return;
case 'h':
case 'help':
default:
utils.sendOrInteract(msgOrInt, 'toggleInline.ts:113', generateHelpMessage('inline'));
return;
}
if (errorOut) {
utils.sendOrInteract(msgOrInt, 'toggleInline.ts:117', {
embeds: [
{
color: failColor,
title: `Failed to ${enable ? 'Enable' : 'Disable'} Inline Rolls for this guild`,
description: 'Please try the command again. If this issue persists, please report this to the developers.',
},
],
});
return;
}
utils.sendOrInteract(msgOrInt, 'toggleInline.ts:128', {
embeds: [
{
color: successColor,
title: `Successfully ${enable ? 'Enabled' : 'Disabled'} Inline Rolls for this guild`,
},
],
});
} else {
utils.sendOrInteract(msgOrInt, 'toggleInline.ts:137', {
embeds: [
{
color: failColor,
title: 'Toggle Inline commands are powerful and can only be used by guild Owners and Admins.',
},
],
});
}
};