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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26