jarvis-tasks/jarvis_tasks/tasks/ban.py
2022-02-19 14:21:24 -07:00

41 lines
1.2 KiB
Python

"""JARVIS ban tasks."""
import asyncio
from datetime import datetime, timedelta
from typing import TYPE_CHECKING
from jarvis_core.db import q
from jarvis_core.db.models import Ban, Unban
if TYPE_CHECKING:
from dis_snek import Snake
async def unban(bot: "Snake") -> None:
"""
Unban users when ban expires.
Args:
bot: Snake instance
"""
while True:
asyncio.sleep(600)
max_time = datetime.utcnow() + timedelta(minutes=10)
bans = Ban.find(q(type="temp", active=True))
async for ban in bans:
if ban.created_at + timedelta(hours=ban.duration) < max_time:
guild = await bot.fetch_guild(ban.guild)
user = await bot.fetch_user(ban.user)
if guild and user:
await guild.unban(user=user, reason="JARVIS tempban expired")
ban.update(q(active=False))
await ban.commit()
u = Unban(
user=user.id,
guild=guild.id,
username=user.name,
discrim=user.discriminator,
admin=bot.user.id,
reason="Ban expired",
)
await u.commit()