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

Contents of /trunk/src/commands/automation/ScheduleCommand.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: 3272 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 ScheduleCommand extends BaseCommand {
13 supportsInteractions = true;
14
15 constructor() {
16 super('schedule', '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 timeout = await setTimeoutv2('send.ts', time, msg.guild!.id, `schedule ${time} ${text!} #${channel.name}`, text!, channel.id, msg.guild!.id);
70
71 await msg.reply({
72 embeds: [
73 new MessageEmbed()
74 .setDescription('A queue job has been added.')
75 .setFooter({
76 text: 'ID: ' + timeout.row.id
77 })
78 ],
79 ephemeral: true
80 });
81 }
82 catch(e) {
83 console.log(e);
84
85 await msg.reply({
86 embeds: [
87 new MessageEmbed()
88 .setColor('#f14a60')
89 .setDescription(`I don't have enough permission to send messages on this channel.`)
90 ]
91 });
92
93 return;
94 }
95
96 if (msg instanceof Message) {
97 await msg.react('⏰');
98 }
99 }
100 }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26