@@ -63,7 +63,7 @@ def __init__(
6363
6464 self .lock = asyncio .Lock ()
6565 self .queue : asyncio .PriorityQueue [
66- tuple [int , TaskType , str , str | tuple [ str , ...] | None ]
66+ tuple [int , TaskType , str , str | None ]
6767 ] = asyncio .PriorityQueue ()
6868
6969 if tracks :
@@ -103,7 +103,7 @@ async def task_manager(self):
103103 if now < self .next_task_time or self .queue .empty ():
104104 return
105105 task = self .queue .get_nowait ()
106- task_time , task_type , track , * details = task
106+ task_time , task_type , track , details = task
107107 # If the next task is not yet due, queue it and return.
108108 if now < task_time :
109109 self .queue .put_nowait (task )
@@ -121,9 +121,9 @@ async def task_manager(self):
121121 finally :
122122 self .queue_query_discord (track )
123123 elif task_type == TaskType .TASK_DISCORD_ADD :
124- await self .update_discord_add (track , * details )
124+ await self .update_discord_add (track , details )
125125 elif task_type == TaskType .TASK_DISCORD_DEL :
126- await self .update_discord_del (track , * details )
126+ await self .update_discord_del (track , details )
127127 else :
128128 logger .exception ("Unknown task type, %d" , task_type )
129129
@@ -182,10 +182,9 @@ async def fetch_track_requests(self, track: str) -> None:
182182 logger .debug ("Queue TASK_DISCORD_ADD %s %s for now" , track , request_id )
183183 self .queue .put_nowait ((0 , TaskType .TASK_DISCORD_ADD , track , request_id ))
184184
185- if del_requests :
186- to_del = tuple (list (del_requests )[:10 ])
187- logger .debug ("Queue TASK_DISCORD_DEL %s %s for now" , track , to_del )
188- self .queue .put_nowait ((0 , TaskType .TASK_DISCORD_DEL , track , to_del ))
185+ for request_id in list (del_requests )[:10 ]:
186+ logger .debug ("Queue TASK_DISCORD_DEL %s %s for now" , track , request_id )
187+ self .queue .put_nowait ((0 , TaskType .TASK_DISCORD_DEL , track , request_id ))
189188
190189 def queue_query_exercism (self , track : str ) -> None :
191190 """Queue a task to query Exercism for a track."""
@@ -216,7 +215,7 @@ async def fetch_discord_thread(self, track: str) -> None:
216215
217216 def queue_query_discord (self , track : str ) -> None :
218217 """Queue a task to query a Discord request thread."""
219- interval = 60 # one minute
218+ interval = 30 * 60 # 30 minutes
220219 task_time = int (time .time ()) + interval
221220 logger .debug ("Queue TASK_QUERY_DISCORD %s in %d seconds" , track , interval )
222221 self .queue .put_nowait ((task_time , TaskType .TASK_QUERY_DISCORD , track , None ))
@@ -231,27 +230,27 @@ async def update_discord_add(self, track: str, request_id: str) -> None:
231230 message = await thread .send (description , suppress_embeds = True )
232231 self .messages [track ][request_id ] = message .id
233232
234- async def update_discord_del (self , track : str , message_ids : tuple [ int , ...] ) -> None :
233+ async def update_discord_del (self , track : str , request_id : str ) -> None :
235234 """Remove a request message from Discord."""
236235 PROM_DISCORD_REQUESTS .labels (True ).inc ()
237- logger .debug ("Start update_discord_del(%s, %s)" , track , message_ids )
236+ logger .debug ("Start update_discord_del(%s, %s)" , track , request_id )
238237 thread = await self .get_thread (track )
239238 await self .unarchive (self .threads [track ])
240239
241- async with asyncio .timeout (15 ):
240+ message_id = next (
241+ (
242+ message_id for req , message_id in self .messages [track ].items ()
243+ if req == request_id
244+ ), None
245+ )
246+ if not message_id :
247+ return
248+ async with asyncio .timeout (5 ):
242249 try :
243- await thread .delete_messages (
244- discord .Object (message_id ) for message_id in message_ids
245- )
250+ await thread .get_partial_message (message_id ).delete ()
251+ del self .messages [track ][request_id ]
246252 except discord .errors .NotFound :
247253 pass
248- request_ids = [
249- request_id
250- for request_id , message_id in self .messages [track ].items ()
251- if message_id in message_ids
252- ]
253- for request_id in request_ids :
254- del self .messages [track ][request_id ]
255254
256255 def populate_task_queue (self ):
257256 """Populate the initial task queue."""
@@ -260,8 +259,8 @@ def populate_task_queue(self):
260259 # Spread the initial requests over 5 minutes
261260 for track , offset in zip (tracks , range (0 , 5 * 60 , int (5 * 60 / len (tracks )))):
262261 task_time = int (time .time ()) + offset
263- self .queue .put_nowait ((task_time , TaskType .TASK_QUERY_DISCORD , track ))
264- self .queue .put_nowait ((task_time + 1 , TaskType .TASK_QUERY_EXERCISM , track ))
262+ self .queue .put_nowait ((task_time , TaskType .TASK_QUERY_DISCORD , track , None ))
263+ self .queue .put_nowait ((task_time + 1 , TaskType .TASK_QUERY_EXERCISM , track , None ))
265264
266265 async def unarchive (self , thread : discord .Thread ) -> None :
267266 """Ensure a thread is not archived."""
0 commit comments