aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Scragly <[email protected]>2019-04-21 20:03:00 +1000
committerGravatar Scragly <[email protected]>2019-04-21 20:03:00 +1000
commit079d107c35ef11a3d55ff9a88aa8e5dc34f99dbb (patch)
treeed8064ed37dffee4bd215c070ca24e27f0821311
parentMake team assignment deterministic for event distribution. (diff)
Ensure super egg drops.
-rw-r--r--bot/seasons/easter/egg_hunt/cog.py41
-rw-r--r--bot/seasons/easter/egg_hunt/constants.py2
2 files changed, 25 insertions, 18 deletions
diff --git a/bot/seasons/easter/egg_hunt/cog.py b/bot/seasons/easter/egg_hunt/cog.py
index 7d592bba..56d4e71d 100644
--- a/bot/seasons/easter/egg_hunt/cog.py
+++ b/bot/seasons/easter/egg_hunt/cog.py
@@ -295,11 +295,11 @@ class EggHunt(commands.Cog):
self.task = asyncio.create_task(self.super_egg())
self.task.add_done_callback(self.task_cleanup)
- @staticmethod
- def task_cleanup(task):
- """Returns a task result. Used as a done callback to show raised exceptions."""
+ def task_cleanup(self, task):
+ """Returns task result and restarts. Used as a done callback to show raised exceptions."""
task.result()
+ self.task = asyncio.create_task(self.super_egg())
@staticmethod
def current_timestamp() -> int:
@@ -323,26 +323,33 @@ class EggHunt(commands.Cog):
await asyncio.sleep(remaining)
log.debug(f"Hunt started.")
- current_window = EggHuntSettings.start_time
- next_window = 0
- for window in EggHuntSettings.windows:
- window = int(window)
- if window < now:
- current_window = window
+
+ db = sqlite3.connect(DB_PATH)
+ c = db.cursor()
+
+ current_window = None
+ next_window = None
+ windows = EggHuntSettings.windows.copy()
+ windows.insert(0, EggHuntSettings.start_time)
+ for i, window in enumerate(windows):
+ c.execute(f"SELECT COUNT(*) FROM super_eggs WHERE window={window}")
+ alread_dropped = c.fetchone()[0]
+ if alread_dropped:
continue
- if not next_window:
- next_window = window
else:
+ current_window = window
+ next_window = window[i+1]
break
- log.debug(f"Current Window: {current_window}. Next Window {next_window}")
-
- db = sqlite3.connect(DB_PATH)
- c = db.cursor()
- c.execute(f"SELECT COUNT(*) FROM super_eggs WHERE window={current_window}")
count = c.fetchone()[0]
db.close()
+ if not current_window:
+ log.debug(f"Suitable window not found.")
+ break
+
+ log.debug(f"Current Window: {current_window}. Next Window {next_window}")
+
if not count:
next_drop = random.randrange(now, next_window)
log.debug(f"Sleeping until next super egg drop: {next_drop}.")
@@ -370,7 +377,7 @@ class EggHunt(commands.Cog):
await SuperEggMessage(msg, egg, current_window).start()
log.debug("Sleeping until next window.")
- next_loop = max(next_window - self.current_timestamp(), 0)
+ next_loop = max(next_window - self.current_timestamp(), 60*60)
await asyncio.sleep(next_loop)
@commands.Cog.listener()
diff --git a/bot/seasons/easter/egg_hunt/constants.py b/bot/seasons/easter/egg_hunt/constants.py
index 3f3c3bbe..c7d9818b 100644
--- a/bot/seasons/easter/egg_hunt/constants.py
+++ b/bot/seasons/easter/egg_hunt/constants.py
@@ -11,7 +11,7 @@ GUILD = bot.get_guild(Client.guild)
class EggHuntSettings:
start_time = int(os.environ["HUNT_START"])
end_time = start_time + 172800 # 48 hrs later
- windows = os.environ.get("HUNT_WINDOWS").split(',') or []
+ windows = [int(w) for w in os.environ.get("HUNT_WINDOWS").split(',')] or []
allowed_channels = [
Channels.seasonalbot_chat,
Channels.off_topic_0,