@@ -15,7 +15,9 @@ export class Bot extends Client {
15
15
partials : [ Partials . Message , Partials . Channel , Partials . Reaction ] ,
16
16
...options ,
17
17
} )
18
+
18
19
this . queue = [ ]
20
+ this . queueItemReferences = [ ] // TODO: Can we store this elsewhere and keep non-json references? Redis?
19
21
this . processing = null
20
22
this . config = config
21
23
this . log = logger
@@ -28,8 +30,14 @@ export class Bot extends Client {
28
30
*/
29
31
public queue : QueueItem [ ]
30
32
33
+ /**
34
+ * Array of previously used QueueItems.
35
+ */
36
+ public queueItemReferences : QueueItem [ ]
37
+
31
38
/**
32
39
* Current QueueItem processing.
40
+ * TODO: Support multi-processing
33
41
*/
34
42
public processing : QueueItem | null
35
43
@@ -66,20 +74,57 @@ export class Bot extends Client {
66
74
public addQueue = ( queueItem : QueueItem ) : number => this . queue . push ( queueItem )
67
75
68
76
/**
69
- * Deletes a QueueItem from queue. Throws if it can't find a QueueItem for uuid.
77
+ * Deletes a QueueItem from queue, adds it to queueItemReferences . Throws if it can't find a QueueItem for uuid.
70
78
* @param uuid UUID of QueueItem.
71
79
* @returns Array of deleted QueueItems.
72
80
*/
73
81
public removeQueue = ( uuid : string ) : QueueItem [ ] => {
74
82
const queueIndex = this . queue . findIndex ( queueItem => queueItem . uuid === uuid )
75
83
76
84
if ( queueIndex === - 1 ) return [ ]
77
- return this . queue . splice ( queueIndex , 1 )
85
+ const queueItem = this . queue . splice ( queueIndex , 1 )
86
+ this . queueItemReferences . push ( queueItem [ 0 ] )
87
+ return queueItem
88
+ }
89
+
90
+ /**
91
+ * Deletes a QueueItem from QueueItem reference storage. Throws if it can't find a QueueItem for uuid.
92
+ * @param uuid UUID of QueueItem.
93
+ * @returns Array of deleted QueueItems.
94
+ */
95
+ public removeQueueItemReference = ( uuid : string ) : QueueItem [ ] => {
96
+ const queueIndex = this . queueItemReferences . findIndex ( queueItem => queueItem . uuid === uuid )
97
+
98
+ if ( queueIndex === - 1 ) return [ ]
99
+ return this . queueItemReferences . splice ( queueIndex , 1 )
78
100
}
79
101
102
+ /**
103
+ * Finds a QueueItem in queue storage by uuid.
104
+ * @param uuid UUID of QueueItem.
105
+ * @returns Array of found QueueItems.
106
+ */
80
107
public findQueue = ( uuid : string ) : QueueItem | undefined => {
81
108
return this . queue . find ( queueItem => queueItem . uuid === uuid )
82
109
}
110
+
111
+ /**
112
+ * Finds a QueueItem in reference storage by uuid.
113
+ * @param uuid UUID of QueueItem.
114
+ * @returns Array of found QueueItems.
115
+ */
116
+ public findQueueItemReference = ( uuid : string ) : QueueItem | undefined => {
117
+ return this . queueItemReferences . find ( queueItem => queueItem . uuid === uuid )
118
+ }
119
+
120
+ /**
121
+ * Finds a QueueItem in reference storage by message ID.
122
+ * @param uuid UUID of QueueItem.
123
+ * @returns Array of found QueueItems.
124
+ */
125
+ public findQueueItemReferenceByMessageID = ( messageId : string ) : QueueItem | undefined => {
126
+ return this . queueItemReferences . find ( queueItem => queueItem . messageId === messageId )
127
+ }
83
128
}
84
129
85
130
module . exports = async ( config : typeof Config , logger : Logger , options : { [ k : string ] : string } ) => {
0 commit comments