/[sudobot]/trunk/src/commands/automation/ExpireCommand.ts
ViewVC logotype

Contents of /trunk/src/commands/automation/ExpireCommand.ts

Parent Directory Parent Directory | Revision Log Revision Log


Revision 344 - (show annotations)
Mon Jul 29 17:29:40 2024 UTC (8 months, 1 week ago) by rakin
File MIME type: application/typescript
File size: 3467 byte(s)
chore: eslint autofix
1 import { CommandInteraction, Message, TextChannel } from 'discord.js';
2 import BaseCommand from '../../utils/structures/BaseCommand';
3 import DiscordClient from '../../client/Client';
4 import CommandOptions from '../../types/CommandOptions';
5 import InteractionOptions from '../../types/InteractionOptions';
6 import MessageEmbed from '../../client/MessageEmbed';
7 import ms from 'ms';
8 import { setTimeoutv2 } from '../../utils/setTimeout';
9
10 export default class ExpireCommand extends BaseCommand {
11 supportsInteractions = true;
12
13 constructor() {
14 super('expire', 'automation', []);
15 }
16
17 async run(client: DiscordClient, msg: Message | CommandInteraction, options: CommandOptions | InteractionOptions) {
18 if (!options.isInteraction && options.args[1] === undefined) {
19 await msg.reply({
20 embeds: [
21 new MessageEmbed()
22 .setColor('#f14a60')
23 .setDescription(`This command requires at least two arguments.`)
24 ]
25 });
26
27 return;
28 }
29
30 const time = ms(options.isInteraction ? <string> await options.options.getString('time') : options.args[0]);
31
32 if (!time) {
33 await msg.reply({
34 embeds: [
35 new MessageEmbed()
36 .setColor('#f14a60')
37 .setDescription(`Invalid time interval given.`)
38 ]
39 });
40
41 return;
42 }
43
44 let channel: TextChannel = <TextChannel> msg.channel;
45 let text: string;
46
47 if (options.isInteraction) {
48 if (options.options.getChannel('channel')) {
49 channel = <TextChannel> await options.options.getChannel('channel');
50 }
51
52 text = <string> await options.options.getString('content');
53 }
54 else if (msg instanceof Message) {
55 const args = [...options.args];
56 args.shift();
57
58 if (msg.mentions.channels.last()) {
59 channel = await <TextChannel> msg.mentions.channels.last();
60 args.pop();
61 }
62
63 text = args.join(' ');
64 }
65
66 if (!channel.send) {
67 await msg.reply({
68 content: 'Invalid text channel.',
69 ephemeral: true
70 });
71
72 return;
73 }
74
75 try {
76 const message = await channel.send({
77 content: text!
78 });
79
80 const timeout = await setTimeoutv2('expire', time, msg.guild!.id, `expire ${time} ${text!} #${channel.name}`, message.id, channel.id, msg.guild!.id);
81
82 await msg.reply({
83 embeds: [
84 new MessageEmbed()
85 .setDescription('A queue job has been added.')
86 .setFooter({
87 text: 'ID: ' + timeout.row.id
88 })
89 ],
90 ephemeral: true
91 });
92 }
93 catch(e) {
94 console.log(e);
95
96 await msg.reply({
97 embeds: [
98 new MessageEmbed()
99 .setColor('#f14a60')
100 .setDescription(`I don't have enough permission to send messages on this channel.`)
101 ]
102 });
103
104 return;
105 }
106
107 if (msg instanceof Message) {
108 await msg.react('⏰');
109 }
110 }
111 }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26