aboutsummaryrefslogtreecommitdiff
path: root/src/commands/moulberry-bush/rule.ts
diff options
context:
space:
mode:
authorTymanWasTaken <tyman@tyman.tech>2021-05-27 14:58:21 -0600
committerTymanWasTaken <tyman@tyman.tech>2021-05-27 14:58:21 -0600
commit1546da359646b89f13d17784eb7653a52ca61efd (patch)
treed3af8ec1d125caecd6dc2202daed3d7922b7d1c5 /src/commands/moulberry-bush/rule.ts
parent358113f823936a8b5613535067941a17169d942f (diff)
downloadtanzanite-1546da359646b89f13d17784eb7653a52ca61efd.tar.gz
tanzanite-1546da359646b89f13d17784eb7653a52ca61efd.tar.bz2
tanzanite-1546da359646b89f13d17784eb7653a52ca61efd.zip
Fix file naming
Diffstat (limited to 'src/commands/moulberry-bush/rule.ts')
-rw-r--r--src/commands/moulberry-bush/rule.ts188
1 files changed, 188 insertions, 0 deletions
diff --git a/src/commands/moulberry-bush/rule.ts b/src/commands/moulberry-bush/rule.ts
new file mode 100644
index 0000000..69dcb6e
--- /dev/null
+++ b/src/commands/moulberry-bush/rule.ts
@@ -0,0 +1,188 @@
+import { Argument } from 'discord-akairo';
+import { Message, MessageEmbed, User } from 'discord.js';
+import { BushCommand } from '../../lib/extensions/BushCommand';
+import { ApplicationCommandOptionType } from 'discord-api-types';
+import { CommandInteraction } from 'discord.js';
+import { SlashCommandOption } from '../../lib/extensions/Util';
+
+export default class RuleCommand extends BushCommand {
+ private rules = [
+ {
+ title: "Follow Discord's TOS",
+ description:
+ "Be sure to follow discord's TOS found at <https://discordapp.com/tos>, you must be 13 to use discord so if you admit to being under 13 you will be banned from the server."
+ },
+ {
+ title: 'Be Respectful',
+ description:
+ 'Racist, sexist, homophobic, xenophobic, transphobic, ableist, hate speech, slurs, or any other derogatory, toxic, or discriminatory behavior will not be tolerated.'
+ },
+ {
+ title: 'No Spamming',
+ description:
+ 'Including but not limited to: any messages that do not contribute to the conversation, repeated messages, randomly tagging users, and chat flood.'
+ },
+ {
+ title: 'English',
+ description:
+ 'The primary language of the server is English, please keep all discussions in English.'
+ },
+ {
+ title: 'Safe for Work',
+ description:
+ 'Please keep NSFW and NSFL content out of this server, avoid borderline images as well as keeping your status and profile picture SFW.'
+ },
+ {
+ title: 'No Advertising',
+ description:
+ 'Do not promote anything without prior approval from a staff member, this includes DM advertising.'
+ },
+ {
+ title: 'Impersonation',
+ description:
+ 'Do not try to impersonate others for the express intent of being deceitful, defamation , and/or personal gain.'
+ },
+ {
+ title: 'Swearing',
+ description: 'Swearing is allowed only when not used as an insult.'
+ },
+ {
+ title: 'Only ping @emergency in emergencies',
+ description:
+ 'Pinging <@&833802660209229854> for no reason will result in severe punishment. <@&833802660209229854> is only to be pinged in true emergencies.'
+ },
+ {
+ title: 'No Backseat Moderating',
+ description:
+ 'If you see a rule being broken be broken, please report it using: `-report <user> [evidence]`.'
+ },
+ {
+ title: 'Staff may moderate at their discretion',
+ description:
+ 'If there are loopholes in our rules, the staff team may moderate based on what they deem appropriate. The staff team holds final discretion.'
+ },
+ {
+ title: "Sending media that are able to crash a user's Discord",
+ description:
+ "Sending videos, GIFs, emojis, etc. that are able to crash someone's discord will result in a **permanent** mute that cannot be appealed."
+ }
+ ];
+
+ public constructor() {
+ super('rule', {
+ aliases: ['rule', 'rules'],
+ category: "Moulberry's Bush",
+ description: {
+ content: 'A command to state a rule.',
+ usage: 'rule <rule> [user]',
+ examples: ['rule 1 IRONM00N', 'rule 2', 'rules']
+ },
+ args: [
+ {
+ id: 'rule',
+ type: Argument.range('number', 1, 12, true),
+ prompt: {
+ start: 'What rule would you like to have cited?',
+ retry: '<:no:787549684196704257> Choose a valid rule.',
+ optional: true
+ },
+ default: undefined
+ },
+ {
+ id: 'user',
+ type: 'user',
+ prompt: {
+ start: 'What user would you like to mention?',
+ retry: '<:no:787549684196704257> Choose a valid user to mention.',
+ optional: true
+ },
+ default: undefined
+ }
+ ],
+ clientPermissions: ['EMBED_LINKS', 'SEND_MESSAGES'],
+ channel: 'guild',
+ slashCommandOptions: [
+ {
+ type: ApplicationCommandOptionType.INTEGER,
+ name: 'rule',
+ description: 'The rule to show',
+ required: false
+ },
+ {
+ type: ApplicationCommandOptionType.USER,
+ name: 'user',
+ description: 'The user to ping',
+ required: false
+ }
+ ]
+ });
+ }
+ private getResponse(
+ message: Message | CommandInteraction,
+ rule?: number,
+ user?: User
+ ): string | MessageEmbed | [string, MessageEmbed] {
+ if (
+ message.guild.id !== '516977525906341928' &&
+ !this.client.ownerID.includes(
+ message instanceof Message ? message.author.id : message.user.id
+ )
+ ) {
+ return "<:no:787549684196704257> This command can only be run in Moulberry's Bush.";
+ }
+ let rulesEmbed = new MessageEmbed().setColor('ef3929');
+ if (message instanceof Message) {
+ rulesEmbed = rulesEmbed.setFooter(
+ `Triggered by ${message.author.tag}`,
+ message.author.avatarURL({ dynamic: true })
+ );
+ }
+ if (rule) {
+ const foundRule = this.rules[rule - 1];
+ rulesEmbed.addField(`${rule}) ${foundRule.title}`, foundRule.description);
+ } else {
+ for (const curRule of this.rules) {
+ rulesEmbed.addField(
+ `${this.rules.indexOf(curRule) + 1}) ${curRule.title}`,
+ curRule.description
+ );
+ }
+ }
+ if (!user) {
+ return rulesEmbed;
+ } else {
+ return [`<@!${user.id}>`, rulesEmbed];
+ }
+ }
+ public async exec(
+ message: Message,
+ { rule, user }: { rule?: number; user?: User }
+ ): Promise<void> {
+ const response = this.getResponse(message, rule, user);
+ if (Array.isArray(response)) {
+ await message.util.send(response[0], {
+ embed: response[1]
+ });
+ } else {
+ await message.util.send(response);
+ }
+ await message.delete().catch(() => undefined);
+ }
+
+ public async execSlash(
+ message: CommandInteraction,
+ {
+ rule,
+ user
+ }: { rule?: SlashCommandOption<number>; user?: SlashCommandOption<void> }
+ ): Promise<void> {
+ const response = this.getResponse(message, rule?.value, user?.user);
+ if (Array.isArray(response)) {
+ await message.reply(response[0], {
+ embeds: [response[1]]
+ });
+ } else {
+ await message.reply(response);
+ }
+ }
+}