diff options
Diffstat (limited to 'src/commands/utilities/viewRaw.ts')
-rw-r--r-- | src/commands/utilities/viewRaw.ts | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/src/commands/utilities/viewRaw.ts b/src/commands/utilities/viewRaw.ts new file mode 100644 index 0000000..b7017c6 --- /dev/null +++ b/src/commands/utilities/viewRaw.ts @@ -0,0 +1,108 @@ +import { DMChannel, MessageEmbed, NewsChannel, Snowflake, TextChannel } from 'discord.js'; +import { BushCommand, BushMessage, BushSlashMessage } from '../../lib'; + +export default class ViewRawCommand extends BushCommand { + public constructor() { + super('view-raw', { + aliases: ['view-raw', 'vr'], + category: 'utilities', + description: { + usage: 'viewraw <message id> <channel>', + examples: ['viewraw 322862723090219008'], + content: 'Shows raw information about a message.' + }, + args: [ + { + id: 'message', + type: 'snowflake', + prompt: { + start: 'What message would you like to view?', + retry: '{error} Choose a valid message.', + optional: false + } + }, + { + id: 'channel', + type: 'channel', + prompt: { + start: 'What channel is the message in?', + retry: '{error} Choose a valid channel.', + optional: true + } + }, + { + id: 'json', + match: 'flag', + flag: '--json' + }, + { + id: 'js', + match: 'flag', + flag: '--js' + } + ], + slash: true, + slashOptions: [ + { + name: 'message', + description: 'What message would you like to view?', + type: 'STRING', + required: true + }, + { + name: 'channel', + description: 'What channel is the message in?', + type: 'CHANNEL', + required: false + }, + { + name: 'json', + description: 'Would you like to view the raw JSON message data?', + type: 'BOOLEAN', + required: false + }, + { + name: 'js', + description: 'Would you like to view the raw message data?', + type: 'BOOLEAN', + required: false + } + ], + channel: 'guild', + clientPermissions: (m) => util.clientSendAndPermCheck(m, ['EMBED_LINKS'], true), + userPermissions: [] + }); + } + + public override async exec( + message: BushMessage | BushSlashMessage, + args: { message: Snowflake; channel: TextChannel | NewsChannel | DMChannel; json?: boolean; js: boolean } + ): Promise<unknown> { + if (!args.channel) args.channel = (message.channel as TextChannel | NewsChannel | DMChannel)!; + const newMessage = await args.channel.messages.fetch(`${args.message}` as Snowflake).catch(() => null); + if (!newMessage) + return await message.util.reply( + `${util.emojis.error} There was an error fetching that message, make sure that is a valid id and if the message is not in this channel, please provide a channel.` + ); + + const messageEmbed = await ViewRawCommand.getRawData(newMessage as BushMessage, { json: args.json, js: args.js }); + + return await message.util.reply({ embeds: [messageEmbed] }); + } + + public static async getRawData(message: BushMessage, options: { json?: boolean; js: boolean }): Promise<MessageEmbed> { + const content = + options.json || options.js + ? options.json + ? JSON.stringify(message.toJSON(), undefined, 2) + : util.inspect(message.toJSON()) || '[No Content]' + : message.content || '[No Content]'; + const lang = options.json ? 'json' : options.js ? 'js' : undefined; + return new MessageEmbed() + .setFooter(message.author.tag, message.author.avatarURL({ dynamic: true }) ?? undefined) + .setTimestamp(message.createdTimestamp) + .setColor(message.member?.roles?.color?.color ?? util.colors.default) + .setTitle('Raw Message Information') + .setDescription(await util.codeblock(content, 2048, lang)); + } +} |