Nimbi

help.ts

May 27th, 2022 (edited)
410
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import * as CONFIG from '../../modules/config';
  2. import * as CMD from '../../modules/config/commands';
  3.  
  4. const GROUP = CONFIG.CLIENT.COMMANDS;
  5. const CHANNELS = CONFIG.CHANNELS;
  6. const EMBEDS = CONFIG.EMBEDS;
  7. const IMAGES = CONFIG.IMAGES;
  8.  
  9. let messageId: string | null = null;
  10. let authorId: string | null = null;
  11.  
  12. interface IMenuItem {
  13.   title: string;
  14.   text: string;
  15.   description?: string;
  16.   asCancel?: boolean;
  17.   color?: number;
  18.   aliases?: string[];
  19. }
  20.  
  21. const options = new Map<discord.decor.Emojis | string, IMenuItem>([
  22.   [
  23.     discord.decor.Emojis.RED_CIRCLE,
  24.     {
  25.       title: 'Administrator Commands',
  26.       text:
  27.         '\n' +
  28.         '**__' +
  29.         CMD.BAN_COMMAND.NAME +
  30.         '__**' +
  31.         '\n' +
  32.         CMD.BAN_COMMAND.DESCRIPTION +
  33.         '\n**Sub Commands**: ' +
  34.         '\n' +
  35.         CMD.BAN_COMMAND.SUBCOMMAND.ADD.NAME +
  36.         '\n**Aliases**: `' +
  37.         CMD.BAN_COMMAND.SUBCOMMAND.ADD.ALIASES +
  38.         '`\n**Description**: ```\n' +
  39.         CMD.BAN_COMMAND.SUBCOMMAND.ADD.DESCRIPTION +
  40.         '\n```\n**Arguments**: ' +
  41.         CMD.BAN_COMMAND.SUBCOMMAND.ADD.ARGUMENTS +
  42.         '\n' +
  43.         CMD.BAN_COMMAND.SUBCOMMAND.REMOVE.NAME +
  44.         '\n**Aliases**: `' +
  45.         CMD.BAN_COMMAND.SUBCOMMAND.REMOVE.ALIASES +
  46.         '`\n**Description**: ```\n' +
  47.         CMD.BAN_COMMAND.SUBCOMMAND.REMOVE.DESCRIPTION +
  48.         '\n```\n**Arguments**: ' +
  49.         CMD.BAN_COMMAND.SUBCOMMAND.REMOVE.ARGUMENTS +
  50.         '\n' +
  51.         CMD.BAN_COMMAND.SUBCOMMAND.LIST.NAME +
  52.         '\n**Aliases**: `' +
  53.         CMD.BAN_COMMAND.SUBCOMMAND.LIST.ALIASES +
  54.         '`\n**Description**: ```\n' +
  55.         CMD.BAN_COMMAND.SUBCOMMAND.LIST.DESCRIPTION +
  56.         '\n```\n\n' +
  57.         '\n' +
  58.         '**__' +
  59.         CMD.KICK_COMMAND.NAME +
  60.         '__**' +
  61.         '\n' +
  62.         CMD.KICK_COMMAND.DESCRIPTION +
  63.         '\n**Aliases**: `' +
  64.         CMD.KICK_COMMAND.ALIASES +
  65.         '`\n**Description**: ```\n' +
  66.         CMD.KICK_COMMAND.DESCRIPTION +
  67.         '\n```\n**Arguments**: ' +
  68.         CMD.KICK_COMMAND.ARGUMENTS +
  69.         '\n\n`<>` flags represent required arguments.\n`[]` flags represent optional arguments.',
  70.       aliases: ['admin', 'administrator'],
  71.     },
  72.   ],
  73.   [
  74.     discord.decor.Emojis.ORANGE_CIRCLE,
  75.     {
  76.       title: 'Manager Commands',
  77.       text:
  78.         '\n' +
  79.         '**__' +
  80.         CMD.ANNOUNCE_COMMAND.NAME +
  81.         '__**' +
  82.         '\n' +
  83.         CMD.ANNOUNCE_COMMAND.DESCRIPTION +
  84.         '\n**Aliases**: `' +
  85.         CMD.ANNOUNCE_COMMAND.ALIASES +
  86.         '`\n**Description**: ```\n' +
  87.         CMD.ANNOUNCE_COMMAND.DESCRIPTION +
  88.         '\n```\n**Arguments**: ' +
  89.         CMD.ANNOUNCE_COMMAND.ARGUMENTS +
  90.         '\n\n`<>` flags represent required arguments.\n`[]` flags represent optional arguments.',
  91.       aliases: ['mng', 'manager'],
  92.     },
  93.   ],
  94.   [
  95.     discord.decor.Emojis.YELLOW_CIRCLE,
  96.     {
  97.       title: 'Moderator Commands',
  98.       text:
  99.         '\n' +
  100.         '**__' +
  101.         CMD.MUTE_COMMAND.NAME +
  102.         '__**' +
  103.         '\n' +
  104.         CMD.MUTE_COMMAND.DESCRIPTION +
  105.         '\n**Sub Commands**: ' +
  106.         '\n' +
  107.         CMD.MUTE_COMMAND.SUBCOMMAND.ADD.NAME +
  108.         '\n**Aliases**: `' +
  109.         CMD.MUTE_COMMAND.SUBCOMMAND.ADD.ALIASES +
  110.         '`\n**Description**: ```\n' +
  111.         CMD.MUTE_COMMAND.SUBCOMMAND.ADD.DESCRIPTION +
  112.         '\n```\n**Arguments**: ' +
  113.         CMD.MUTE_COMMAND.SUBCOMMAND.ADD.ARGUMENTS +
  114.         '\n' +
  115.         CMD.MUTE_COMMAND.SUBCOMMAND.REMOVE.NAME +
  116.         '\n**Aliases**: `' +
  117.         CMD.MUTE_COMMAND.SUBCOMMAND.REMOVE.ALIASES +
  118.         '`\n**Description**: ```\n' +
  119.         CMD.MUTE_COMMAND.SUBCOMMAND.REMOVE.DESCRIPTION +
  120.         '\n```\n**Arguments**: ' +
  121.         CMD.MUTE_COMMAND.SUBCOMMAND.REMOVE.ARGUMENTS +
  122.         '\n' +
  123.         CMD.MUTE_COMMAND.SUBCOMMAND.LIST.NAME +
  124.         '\n**Aliases**: `' +
  125.         CMD.MUTE_COMMAND.SUBCOMMAND.LIST.ALIASES +
  126.         '`\n**Description**: ```\n' +
  127.         CMD.MUTE_COMMAND.SUBCOMMAND.LIST.DESCRIPTION +
  128.         '\n```\n\n' +
  129.         '\n' +
  130.         '**__' +
  131.         CMD.WARN_COMMAND.NAME +
  132.         '__**' +
  133.         '\n' +
  134.         CMD.WARN_COMMAND.DESCRIPTION +
  135.         '\n**Sub Commands**: ' +
  136.         '\n' +
  137.         CMD.WARN_COMMAND.SUBCOMMAND.ADD.NAME +
  138.         '\n**Aliases**: `' +
  139.         CMD.WARN_COMMAND.SUBCOMMAND.ADD.ALIASES +
  140.         '`\n**Description**: ```\n' +
  141.         CMD.WARN_COMMAND.SUBCOMMAND.ADD.DESCRIPTION +
  142.         '\n```\n**Arguments**: ' +
  143.         CMD.WARN_COMMAND.SUBCOMMAND.ADD.ARGUMENTS +
  144.         '\n' +
  145.         CMD.WARN_COMMAND.SUBCOMMAND.REMOVE.NAME +
  146.         '\n**Aliases**: `' +
  147.         CMD.WARN_COMMAND.SUBCOMMAND.REMOVE.ALIASES +
  148.         '`\n**Description**: ```\n' +
  149.         CMD.WARN_COMMAND.SUBCOMMAND.REMOVE.DESCRIPTION +
  150.         '\n```\n**Arguments**: ' +
  151.         CMD.WARN_COMMAND.SUBCOMMAND.REMOVE.ARGUMENTS +
  152.         '\n' +
  153.         CMD.WARN_COMMAND.SUBCOMMAND.LIST.NAME +
  154.         '\n**Aliases**: `' +
  155.         CMD.WARN_COMMAND.SUBCOMMAND.LIST.ALIASES +
  156.         '`\n**Description**: ```\n' +
  157.         CMD.WARN_COMMAND.SUBCOMMAND.LIST.DESCRIPTION +
  158.         '\n```\n\n`<>` flags represent required arguments.\n`[]` flags represent optional arguments.',
  159.       aliases: ['mod', 'moderator'],
  160.     },
  161.   ],
  162.   [
  163.     discord.decor.Emojis.PURPLE_CIRCLE,
  164.     {
  165.       title: 'Helper Commands',
  166.       text:
  167.         '\n' +
  168.         '**__' +
  169.         CMD.CLEAR_COMMAND.NAME +
  170.         '__**' +
  171.         '\n' +
  172.         CMD.CLEAR_COMMAND.DESCRIPTION +
  173.         '\n**Aliases**: `' +
  174.         CMD.CLEAR_COMMAND.ALIASES +
  175.         '`\n**Description**: ```\n' +
  176.         CMD.CLEAR_COMMAND.DESCRIPTION +
  177.         '\n```\n**Arguments**: ' +
  178.         CMD.CLEAR_COMMAND.ARGUMENTS +
  179.         '\n\n`<>` flags represent required arguments.\n`[]` flags represent optional arguments.',
  180.       aliases: ['helper'],
  181.     },
  182.   ],
  183.   [
  184.     discord.decor.Emojis.BLUE_CIRCLE,
  185.     {
  186.       title: 'Utility Commands',
  187.       text:
  188.         '\n' +
  189.         '**__' +
  190.         CMD.HELP_COMMAND.NAME +
  191.         '__**' +
  192.         '\n' +
  193.         CMD.HELP_COMMAND.DESCRIPTION +
  194.         '\n**Aliases**: `' +
  195.         CMD.HELP_COMMAND.ALIASES +
  196.         '`\n**Description**: ```\n' +
  197.         CMD.HELP_COMMAND.DESCRIPTION +
  198.         '\n```\n**Arguments**: ' +
  199.         CMD.HELP_COMMAND.ARGUMENTS +
  200.         '\n\n`<>` flags represent required arguments.\n`[]` flags represent optional arguments.',
  201.       aliases: ['util', 'utility'],
  202.     },
  203.   ],
  204.   [
  205.     discord.decor.Emojis.GREEN_CIRCLE,
  206.     {
  207.       title: 'Slash Commands',
  208.       text:
  209.         '\n' +
  210.         '**__' +
  211.         CMD.SLOWMODE_COMMAND.NAME +
  212.         '__**' +
  213.         '\n' +
  214.         CMD.SLOWMODE_COMMAND.DESCRIPTION +
  215.         '\n**Aliases**: `' +
  216.         CMD.SLOWMODE_COMMAND.ALIASES +
  217.         '`\n**Description**: ```\n' +
  218.         CMD.SLOWMODE_COMMAND.DESCRIPTION +
  219.         '\n```\n**Arguments**: ' +
  220.         CMD.SLOWMODE_COMMAND.ARGUMENTS +
  221.         '\n\n`<>` flags represent required arguments.\n`[]` flags represent optional arguments.',
  222.       aliases: ['slash'],
  223.     },
  224.   ],
  225.   [
  226.     discord.decor.Emojis.X,
  227.     {
  228.       title: 'Close Menu',
  229.       text: 'Closed the menu',
  230.       asCancel: true,
  231.     },
  232.   ],
  233. ]);
  234.  
  235. const optionKeys = Array.from(options.keys());
  236.  
  237. GROUP.on(
  238.   {
  239.     name: CMD.HELP_COMMAND.NAME,
  240.     aliases: CMD.HELP_COMMAND.ALIASES,
  241.     description: CMD.HELP_COMMAND.DESCRIPTION,
  242.     filters: CONFIG.PERMISSIONS.LEVEL.USER,
  243.   },
  244.   (args) => ({
  245.     optionalSelection: args.textOptional(),
  246.   }),
  247.   async (msg, { optionalSelection }) => {
  248.     try {
  249.       if (optionalSelection) {
  250.         const item =
  251.           options.get(optionalSelection) ??
  252.           options.get(
  253.             Array.from(options.keys()).find((v) => {
  254.               const value = options.get(v)!;
  255.               const nameCheck =
  256.                 value.title.toLowerCase() === optionalSelection.toLowerCase();
  257.               const aliasCheck = (value.aliases ?? [])
  258.                 .map((v) => v.toLowerCase())
  259.                 .includes(optionalSelection.toLowerCase());
  260.               return nameCheck || aliasCheck;
  261.             }) ?? ''
  262.           );
  263.         if (!item) return await msg.reply('❌ I could not find that menu');
  264.  
  265.         if (item.asCancel)
  266.           return await msg.reply("❌ There isn't anything to cancel!");
  267.  
  268.         const embed = new discord.Embed();
  269.         embed.setColor(item.color ?? EMBEDS.DEFAULT_COLOR.BLUE);
  270.         embed.setTitle(item.title);
  271.         embed.setDescription(item.text);
  272.         embed.setThumbnail({ url: IMAGES.PYLON_LOGO });
  273.         embed.setFooter({
  274.           text: EMBEDS.FOOTER_TEXT,
  275.           iconUrl: IMAGES.PYLON_LOGO,
  276.         });
  277.  
  278.         await msg.reply({ embed: embed });
  279.  
  280.         messageId = null;
  281.         authorId = null;
  282.       } else
  283.         await msg
  284.           .reply(
  285.             new discord.Embed({
  286.               color: EMBEDS.DEFAULT_COLOR.BLUE,
  287.               title: 'Pylon Help Menu',
  288.               description: `Click the reactions to see my available commands!\n
  289. ${optionKeys
  290.   .map((v) => {
  291.     const item = options.get(v)!;
  292.     return `${v} - ${item.title}${
  293.       item.aliases ? ` (${item.aliases.join(', ')})` : ''
  294.     }${item.description ? `\n*${item.description}*` : ''}`;
  295.   })
  296.   .join('\n\n')}`,
  297.             })
  298.               .setThumbnail({ url: IMAGES.PYLON_LOGO })
  299.               .setTimestamp(new Date().toISOString())
  300.           )
  301.           .then(async (message) => {
  302.             optionKeys.forEach(async (v) => await message.addReaction(v));
  303.  
  304.             messageId = message.id;
  305.             authorId = msg.author.id;
  306.           });
  307.     } catch (e) {
  308.       const channel = await discord.getTextChannel(CHANNELS.ERROR_CHANNEL);
  309.  
  310.       if (!channel) throw new Error(':x: Invalid Error Channel Specified!');
  311.       const embed = new discord.Embed();
  312.       embed.setDescription(
  313.         '```ts\n[' + e.name + '(' + e.code + '): ' + e.message + ']\n```'
  314.       );
  315.       embed.addField({
  316.         name: 'Error Stack',
  317.         value: '```ts\n' + e.stack + '\n```',
  318.         inline: false,
  319.       });
  320.       embed.addField({
  321.         name: 'Error Code',
  322.         value: '```\n' + String(e.code) + '\n```',
  323.         inline: true,
  324.       });
  325.       embed.addField({
  326.         name: 'Channel ID',
  327.         value: '```\n' + String(msg.channelId) + '\n```',
  328.         inline: true,
  329.       });
  330.       embed.setThumbnail({ url: IMAGES.PYLON_LOGO });
  331.       embed.setColor(EMBEDS.DEFAULT_COLOR.ORANGE);
  332.       embed.setTimestamp(new Date().toISOString());
  333.       embed.setFooter({ text: EMBEDS.FOOTER_TEXT, iconUrl: IMAGES.PYLON_LOGO });
  334.  
  335.       console.error(e);
  336.       channel?.sendMessage({ embed: embed });
  337.     }
  338.   }
  339. );
  340.  
  341. discord.on(discord.Event.MESSAGE_REACTION_ADD, async (theReaction) => {
  342.   const reactionMenu = await (
  343.     await discord.getGuildTextChannel(theReaction.channelId)
  344.   )?.getMessage(theReaction.messageId);
  345.  
  346.   if (!reactionMenu) return;
  347.  
  348.   if (
  349.     theReaction.emoji.type === discord.Emoji.Type.UNICODE &&
  350.     options.has(theReaction.emoji.name!) &&
  351.     theReaction.messageId == messageId &&
  352.     theReaction.member &&
  353.     theReaction.member.user.id == authorId
  354.   ) {
  355.     const item = options.get(theReaction.emoji.name!);
  356.     if (!item) return;
  357.  
  358.     const embed = new discord.Embed();
  359.     embed.setColor(item.color ?? EMBEDS.DEFAULT_COLOR.BLUE);
  360.     embed.setTitle(item.title);
  361.     embed.setDescription(item.text);
  362.     embed.setThumbnail({ url: IMAGES.PYLON_LOGO });
  363.     embed.setFooter({ text: EMBEDS.FOOTER_TEXT, iconUrl: IMAGES.PYLON_LOGO });
  364.  
  365.     const response = await reactionMenu.reply({ embed: embed });
  366.  
  367.     messageId = null;
  368.     authorId = null;
  369.  
  370.     await reactionMenu.delete();
  371.  
  372.     if (item.asCancel) setTimeout(() => response?.delete(), 5000);
  373.   }
  374. });
  375.  
RAW Paste Data Copied