/[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 444 - (show annotations)
Mon Jul 29 17:30:16 2024 UTC (8 months, 1 week ago) by rakin
File MIME type: application/typescript
File size: 4469 byte(s)
style: eslint autofix
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 CustomQueue from '../../queues/CustomQueue';
28
29 export default class AddQueueCommand extends BaseCommand {
30 constructor() {
31 super('addqueue', 'automation', []);
32 }
33
34 async run(client: DiscordClient, msg: Message, options: CommandOptions) {
35 if (options.args[1] === undefined) {
36 await msg.reply({
37 embeds: [
38 new MessageEmbed()
39 .setColor('#f14a60')
40 .setDescription(`This command requires at least two arguments.`)
41 ]
42 });
43
44 return;
45 }
46
47 const time = await ms(options.args[0]);
48 let cmd: string[];
49
50 if (!time) {
51 await msg.reply({
52 embeds: [
53 new MessageEmbed()
54 .setColor('#f14a60')
55 .setDescription(`Invalid time interval given.`)
56 ]
57 });
58
59 return;
60 }
61
62 cmd = [...options.args];
63 cmd.shift();
64
65 const cmdObj = client.commands.get(cmd[0]);
66
67 if (!cmdObj) {
68 await msg.reply({
69 embeds: [
70 new MessageEmbed()
71 .setColor('#f14a60')
72 .setDescription(`Invalid command given.`)
73 ]
74 });
75
76 return;
77 }
78
79 if (!cmdObj.supportsLegacy) {
80 await msg.reply({
81 embeds: [
82 new MessageEmbed()
83 .setColor('#f14a60')
84 .setDescription(`This command conflicts with queued jobs. (Non-legacy handler)`)
85 ]
86 });
87
88 return;
89 }
90
91 const allowed = await client.auth.verify(msg.member!, cmdObj);
92
93 if (!allowed) {
94 await msg.reply({
95 embeds: [
96 new MessageEmbed()
97 .setColor('#f14a60')
98 .setDescription(`Operation not permitted. You don't have enough permissions to run this command.`)
99 ]
100 });
101
102 return;
103 }
104
105 // const command = await cmd.join(' ');
106
107 // const queue = await setTimeoutv2('queue', time, msg.guild!.id, command, command, msg.id, msg.channel!.id, msg.guild!.id);
108
109 const queue = await client.queueManager.addQueue(CustomQueue, {
110 data: {
111 channelID: msg.channel.id,
112 guildID: msg.guild!.id,
113 messageID: msg.id,
114 cmd,
115 },
116 runAt: new Date(Date.now() + time),
117 guild: msg.guild!.id
118 });
119
120 await msg.reply({
121 embeds: [
122 new MessageEmbed()
123 .setColor('#007bff')
124 .setDescription(`The queue has been added. Don't delete the command message - it will be used by the queue later.`)
125 .setFields([
126 {
127 name: "ID",
128 value: queue.id + '',
129 },
130 {
131 name: "Command",
132 value: `\`${cmd.join(' ')}\``
133 },
134 {
135 name: "Time",
136 value: "After " + timeSince(Date.now() - time).replace(' ago', '')
137 }
138 ])
139 ]
140 });
141 }
142 }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26