Skip to content

Commit e23ae46

Browse files
authored
allow Loop.change_interval to be called in before_loop and after_loop (#661)
1 parent 31cd41d commit e23ae46

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

discord/ext/tasks/__init__.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,8 @@ def __init__(
121121

122122
self._before_loop = None
123123
self._after_loop = None
124+
self._before_loop_running = False
125+
self._after_loop_running = False
124126
self._is_being_cancelled = False
125127
self._has_failed = False
126128
self._stop_next_iteration = False
@@ -141,11 +143,17 @@ async def _call_loop_function(self, name: str, *args: Any, **kwargs: Any) -> Non
141143
if coro is None:
142144
return
143145

146+
if name.endswith('_loop'):
147+
setattr(self, f'_{name}_running', True)
148+
144149
if self._injected is not None:
145150
await coro(self._injected, *args, **kwargs)
146151
else:
147152
await coro(*args, **kwargs)
148153

154+
if name.endswith('_loop'):
155+
setattr(self, f'_{name}_running', False)
156+
149157
def _try_sleep_until(self, dt: datetime.datetime):
150158
self._handle = SleepHandle(dt=dt, loop=self.loop)
151159
return self._handle.wait()
@@ -680,7 +688,7 @@ def change_interval(
680688
self._time = self._get_time_parameter(time)
681689
self._sleep = self._seconds = self._minutes = self._hours = MISSING
682690

683-
if self.is_running():
691+
if self.is_running() and not (self._before_loop_running or self._after_loop_running):
684692
if self._time is not MISSING:
685693
# prepare the next time index starting from after the last iteration
686694
self._prepare_time_index(now=self._last_iteration)

0 commit comments

Comments
 (0)