Ruby-Cogs/levelup/tasks/weekly.py
Valerie 477974d53c
Some checks are pending
Run pre-commit / Run pre-commit (push) Waiting to run
Upload 2 Cogs & Update README
2025-05-23 01:30:53 -04:00

54 lines
1.7 KiB
Python

import asyncio
import logging
import typing as t
from datetime import datetime
import discord
from discord.ext import tasks
from redbot.core.i18n import Translator
from ..abc import MixinMeta
log = logging.getLogger("red.vrt.levelup.tasks.weekly")
_ = Translator("LevelUp", __file__)
loop_kwargs = {"minutes": 5}
if discord.version_info >= (2, 4, 0):
loop_kwargs["name"] = "LevelUp.weekly_reset_check"
class WeeklyTask(MixinMeta):
@tasks.loop(**loop_kwargs)
async def weekly_reset_check(self):
now = datetime.now().timestamp()
guild_ids = list(self.db.configs.keys())
jobs: t.List[asyncio.Task] = []
for guild_id in guild_ids:
guild = self.bot.get_guild(guild_id)
if not guild:
continue
conf = self.db.configs[guild_id]
if not conf.weeklysettings.on:
continue
if not conf.users_weekly:
continue
if not conf.weeklysettings.autoreset:
continue
last_reset = conf.weeklysettings.last_reset
next_reset = conf.weeklysettings.next_reset
# Skip if stats were wiped less than an hour ago
if now - last_reset < 3600:
continue
# If we're within 6 minutes of the reset time, reset now
if next_reset - now > 360:
continue
jobs.append(self.reset_weekly(guild))
if jobs:
await asyncio.gather(*jobs)
@weekly_reset_check.before_loop
async def before_weekly_reset_check(self):
await self.bot.wait_until_red_ready()
await asyncio.sleep(10)
log.info("Starting weekly reset check loop")