Skip to content

Commit 29495ac

Browse files
committed
Use a seperate auto close task
1 parent 77fb37b commit 29495ac

File tree

1 file changed

+25
-27
lines changed

1 file changed

+25
-27
lines changed

core/thread.py

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ def __init__(
4040
self._channel = channel
4141
self.genesis_message = None
4242
self._ready_event = asyncio.Event()
43-
self._close_task = None
44-
self._auto_close_task = None
43+
self.close_task = None
44+
self.auto_close_task = None
4545

4646
def __repr__(self):
4747
return (
@@ -57,14 +57,6 @@ async def wait_until_ready(self) -> None:
5757
def id(self) -> int:
5858
return self._id
5959

60-
@property
61-
def close_task(self) -> asyncio.TimerHandle:
62-
return self._close_task
63-
64-
@close_task.setter
65-
def close_task(self, val: asyncio.TimerHandle):
66-
self._close_task = val
67-
6860
@property
6961
def channel(self) -> typing.Union[discord.TextChannel, discord.DMChannel]:
7062
return self._channel
@@ -199,11 +191,12 @@ async def close(
199191
silent: bool = False,
200192
delete_channel: bool = True,
201193
message: str = None,
194+
auto_close: bool = False
202195
) -> None:
203196
"""Close a thread now or after a set time in seconds"""
204197

205198
# restarts the after timer
206-
await self.cancel_closure()
199+
await self.cancel_closure(auto_close)
207200

208201
if after > 0:
209202
# TODO: Add somewhere to clean up broken closures
@@ -221,9 +214,14 @@ async def close(
221214
self.bot.config.closures[str(self.id)] = items
222215
await self.bot.config.update()
223216

224-
self.close_task = self.bot.loop.call_later(
217+
task = self.bot.loop.call_later(
225218
after, self._close_after, closer, silent, delete_channel, message
226219
)
220+
221+
if auto_close:
222+
self.auto_close_task = task
223+
else:
224+
self.close_task = task
227225
else:
228226
await self._close(closer, silent, delete_channel, message)
229227

@@ -235,8 +233,6 @@ async def _close(
235233
await self.cancel_closure()
236234

237235
# Cancel auto closing the thread if closed by any means.
238-
if self._auto_close_task:
239-
self._auto_close_task.cancel()
240236

241237
if str(self.id) in self.bot.config.subscriptions:
242238
del self.bot.config.subscriptions[str(self.id)]
@@ -337,10 +333,14 @@ async def _close(
337333

338334
await asyncio.gather(*tasks)
339335

340-
async def cancel_closure(self) -> None:
341-
if self.close_task is not None:
336+
async def cancel_closure(self, auto_close: bool = False) -> None:
337+
338+
if self.close_task is not None and not auto_close:
342339
self.close_task.cancel()
343340
self.close_task = None
341+
elif self.auto_close_task is not None:
342+
self.auto_close_task.cancel()
343+
self.auto_close_task = None
344344

345345
to_update = self.bot.config.closures.pop(str(self.id), None)
346346
if to_update is not None:
@@ -415,7 +415,7 @@ async def _restart_close_timer(self):
415415
f" '{time_marker_regex}' to specify time."
416416
)
417417

418-
await self.close(closer=self.bot.user, after=seconds, message=close_message)
418+
await self.close(closer=self.bot.user, after=seconds, message=close_message, auto_close=True)
419419

420420
async def edit_message(self, message_id: int, message: str) -> None:
421421
recipient_msg, channel_msg = await asyncio.gather(
@@ -505,15 +505,16 @@ async def reply(self, message: discord.Message, anonymous: bool = False) -> None
505505

506506

507507
# Cancel closing if a thread message is sent.
508-
await self.cancel_closure()
509-
tasks.append(
510-
self.channel.send(
511-
embed=discord.Embed(
512-
color=discord.Color.red(),
513-
description="Scheduled close has been cancelled.",
508+
if self.close_task is not None:
509+
await self.cancel_closure()
510+
tasks.append(
511+
self.channel.send(
512+
embed=discord.Embed(
513+
color=discord.Color.red(),
514+
description="Scheduled close has been cancelled.",
515+
)
514516
)
515517
)
516-
)
517518

518519
await self._restart_close_timer()
519520

@@ -547,9 +548,6 @@ async def send(
547548
if not from_mod and not note:
548549
self.bot.loop.create_task(self.bot.api.append_log(message, self.channel.id))
549550

550-
# Cancel auto closing if we get a new message from user
551-
if self._auto_close_task:
552-
self._auto_close_task.cancel()
553551

554552
destination = destination or self.channel
555553

0 commit comments

Comments
 (0)