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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 430 - (show annotations)
Mon Jul 29 17:30:12 2024 UTC (8 months, 3 weeks ago) by rakin
File MIME type: application/typescript
File size: 4524 byte(s)
refactor: use new queue handler
1 /**
2 * This file is part of SudoBot.
3 *
4 * Copyright (C) 2021-2022 OSN Inc.
5 *
6 * SudoBot is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU Affero General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * SudoBot is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Affero General Public License for more details.
15 *
16 * You should have received a copy of the GNU Affero General Public License
17 * along with SudoBot. If not, see <https://www.gnu.org/licenses/>.
18 */
19
20 import { Message } from 'discord.js';
21 import BaseCommand from '../../utils/structures/BaseCommand';
22 import DiscordClient from '../../client/Client';
23 import CommandOptions from '../../types/CommandOptions';
24 import MessageEmbed from '../../client/MessageEmbed';
25 import ms from 'ms';
26 import { timeSince } from '../../utils/util';
27 import { setTimeoutv2 } from '../../utils/setTimeout';
28 import CustomQueue from '../../queues/CustomQueue';
29
30 export default class AddQueueCommand extends BaseCommand {
31 constructor() {
32 super('addqueue', 'automation', []);
33 }
34
35 async run(client: DiscordClient, msg: Message, options: CommandOptions) {
36 if (options.args[1] === undefined) {
37 await msg.reply({
38 embeds: [
39 new MessageEmbed()
40 .setColor('#f14a60')
41 .setDescription(`This command requires at least two arguments.`)
42 ]
43 });
44
45 return;
46 }
47
48 const time = await ms(options.args[0]);
49 let cmd: string[];
50
51 if (!time) {
52 await msg.reply({
53 embeds: [
54 new MessageEmbed()
55 .setColor('#f14a60')
56 .setDescription(`Invalid time interval given.`)
57 ]
58 });
59
60 return;
61 }
62
63 cmd = [...options.args];
64 cmd.shift();
65
66 const cmdObj = client.commands.get(cmd[0]);
67
68 if (!cmdObj) {
69 await msg.reply({
70 embeds: [
71 new MessageEmbed()
72 .setColor('#f14a60')
73 .setDescription(`Invalid command given.`)
74 ]
75 });
76
77 return;
78 }
79
80 if (!cmdObj.supportsLegacy) {
81 await msg.reply({
82 embeds: [
83 new MessageEmbed()
84 .setColor('#f14a60')
85 .setDescription(`This command conflicts with queued jobs. (Non-legacy handler)`)
86 ]
87 });
88
89 return;
90 }
91
92 const allowed = await client.auth.verify(msg.member!, cmdObj);
93
94 if (!allowed) {
95 await msg.reply({
96 embeds: [
97 new MessageEmbed()
98 .setColor('#f14a60')
99 .setDescription(`Operation not permitted. You don't have enough permissions to run this command.`)
100 ]
101 });
102
103 return;
104 }
105
106 // const command = await cmd.join(' ');
107
108 // const queue = await setTimeoutv2('queue', time, msg.guild!.id, command, command, msg.id, msg.channel!.id, msg.guild!.id);
109
110 const queue = await client.queueManager.addQueue(CustomQueue, {
111 data: {
112 channelID: msg.channel.id,
113 guildID: msg.guild!.id,
114 messageID: msg.id,
115 cmd,
116 },
117 runAt: new Date(Date.now() + time),
118 guild: msg.guild!.id
119 });
120
121 await msg.reply({
122 embeds: [
123 new MessageEmbed()
124 .setColor('#007bff')
125 .setDescription(`The queue has been added. Don't delete the command message - it will be used by the queue later.`)
126 .setFields([
127 {
128 name: "ID",
129 value: queue.id + '',
130 },
131 {
132 name: "Command",
133 value: `\`${cmd.join(' ')}\``
134 },
135 {
136 name: "Time",
137 value: "After " + timeSince(Date.now() - time).replace(' ago', '')
138 }
139 ])
140 ]
141 });
142 }
143 }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26