3 |
import QueuedJob from "../models/QueuedJob"; |
import QueuedJob from "../models/QueuedJob"; |
4 |
import Queue, { QueueOptions } from "../utils/structures/Queue"; |
import Queue, { QueueOptions } from "../utils/structures/Queue"; |
5 |
import Service from "../utils/structures/Service"; |
import Service from "../utils/structures/Service"; |
|
import { v4 as uuid } from "uuid"; |
|
6 |
import path from "path"; |
import path from "path"; |
7 |
|
import { generate as randomstring } from 'randomstring'; |
8 |
|
|
9 |
export type QueueCreateOptions = { |
export type QueueCreateOptions = { |
10 |
data?: { [key: string | number]: any }; |
data?: { [key: string | number]: any }; |
11 |
runAt?: Date; |
runAt?: Date; |
12 |
runAfter?: number; |
runAfter?: number; |
13 |
|
guild?: string; |
14 |
}; |
}; |
15 |
|
|
16 |
export default class QueueManager extends Service { |
export default class QueueManager extends Service { |
35 |
return this.queues.get(id)?.cancel(); |
return this.queues.get(id)?.cancel(); |
36 |
} |
} |
37 |
|
|
38 |
async addQueue(queueClass: new (client: DiscordClient, queueOptions: QueueOptions) => Queue, { data, runAt, runAfter }: QueueCreateOptions) { |
async addQueue(queueClass: new (client: DiscordClient, queueOptions: QueueOptions) => Queue, { data, runAt, runAfter, guild }: QueueCreateOptions) { |
39 |
if (runAfter !== 0 && runAfter !== 0 && !runAfter && !runAt) { |
if (runAfter !== 0 && runAfter !== 0 && !runAfter && !runAt) { |
40 |
throw new Error("One of runAfter or runAt must be specified for creating a queue"); |
throw new Error("One of runAfter or runAt must be specified for creating a queue"); |
41 |
} |
} |
42 |
|
|
43 |
const id = uuid(); |
const id = randomstring(7); |
44 |
const model = await QueuedJob.create({ uuid: id, data, runOn: runAfter ? new Date(Date.now() + runAfter) : runAt!, createdAt: new Date(), className: queueClass.name }); |
const model = await QueuedJob.create({ uuid: id, data, runOn: runAfter ? new Date(Date.now() + runAfter) : runAt!, createdAt: new Date(), className: queueClass.name, guild }); |
45 |
const queue = new queueClass(this.client, { model, id, runAt, runAfter }); |
const queue = new queueClass(this.client, { model, id, runAt, runAfter }); |
46 |
this.setQueue(queue); |
this.setQueue(queue); |
47 |
|
return queue; |
48 |
} |
} |
49 |
|
|
50 |
runQueue(id: string) { |
runQueue(id: string) { |