zappyzep/backend/src/plugins/Slowmode/commands/SlowmodeClearCmd.ts
2021-07-29 00:37:19 +01:00

68 lines
2.4 KiB
TypeScript

import { ChannelTypeStrings } from "src/types";
import { commandTypeHelpers as ct } from "../../../commandTypes";
import { sendErrorMessage, sendSuccessMessage } from "../../../pluginUtils";
import { asSingleLine, disableInlineCode } from "../../../utils";
import { getMissingChannelPermissions } from "../../../utils/getMissingChannelPermissions";
import { missingPermissionError } from "../../../utils/missingPermissionError";
import { BOT_SLOWMODE_CLEAR_PERMISSIONS } from "../requiredPermissions";
import { slowmodeCmd } from "../types";
import { clearBotSlowmodeFromUserId } from "../util/clearBotSlowmodeFromUserId";
export const SlowmodeClearCmd = slowmodeCmd({
trigger: ["slowmode clear", "slowmode c"],
permission: "can_manage",
signature: {
channel: ct.textChannel(),
user: ct.resolvedUserLoose(),
force: ct.bool({ option: true, isSwitch: true }),
},
async run({ message: msg, args, pluginData }) {
const channelSlowmode = await pluginData.state.slowmodes.getChannelSlowmode(args.channel.id);
if (!channelSlowmode) {
sendErrorMessage(pluginData, msg.channel, "Channel doesn't have slowmode!");
return;
}
const me = pluginData.guild.members.cache.get(pluginData.client.user!.id)!;
const missingPermissions = getMissingChannelPermissions(me, args.channel, BOT_SLOWMODE_CLEAR_PERMISSIONS);
if (missingPermissions) {
sendErrorMessage(
pluginData,
msg.channel,
`Unable to clear slowmode. ${missingPermissionError(missingPermissions)}`,
);
return;
}
try {
if (args.channel.type === ChannelTypeStrings.TEXT) {
await clearBotSlowmodeFromUserId(pluginData, args.channel, args.user.id, args.force);
} else {
sendErrorMessage(
pluginData,
msg.channel,
asSingleLine(`
Failed to clear slowmode from **${args.user.tag}** in <#${args.channel.id}>:
Threads cannot have Bot Slowmode
`),
);
return;
}
} catch (e) {
sendErrorMessage(
pluginData,
msg.channel,
asSingleLine(`
Failed to clear slowmode from **${args.user.tag}** in <#${args.channel.id}>:
\`${disableInlineCode(e.message)}\`
`),
);
return;
}
sendSuccessMessage(pluginData, msg.channel, `Slowmode cleared from **${args.user.tag}** in <#${args.channel.id}>`);
},
});