Skip to content

Commit 597ca55

Browse files
authored
Mentor Requests: fix delete logic (#147)
1 parent 2e81833 commit 597ca55

File tree

1 file changed

+23
-24
lines changed

1 file changed

+23
-24
lines changed

cogs/mentor_requests.py

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)