46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
"""J.A.R.V.I.S. unban background task handler."""
|
|
from asyncio import to_thread
|
|
from datetime import datetime, timedelta
|
|
|
|
from dis_snek.ext.tasks.task import Task
|
|
from dis_snek.ext.tasks.triggers import IntervalTrigger
|
|
|
|
import jarvis
|
|
from jarvis.config import get_config
|
|
from jarvis.db.models import Ban, Unban
|
|
|
|
jarvis_id = get_config().client_id
|
|
|
|
|
|
async def _unban() -> None:
|
|
"""J.A.R.V.I.S. unban blocking task."""
|
|
bans = Ban.objects(type="temp", active=True)
|
|
unbans = []
|
|
for ban in bans:
|
|
if ban.created_at + timedelta(hours=ban.duration) < datetime.utcnow() + timedelta(
|
|
minutes=10
|
|
):
|
|
guild = await jarvis.jarvis.get_guild(ban.guild)
|
|
user = await jarvis.jarvis.get_user(ban.user)
|
|
if user:
|
|
await guild.unban(user=user, reason="Ban expired")
|
|
ban.active = False
|
|
ban.save()
|
|
unbans.append(
|
|
Unban(
|
|
user=user.id,
|
|
guild=guild.id,
|
|
username=user.name,
|
|
discrim=user.discriminator,
|
|
admin=jarvis_id,
|
|
reason="Ban expired",
|
|
)
|
|
)
|
|
if unbans:
|
|
Unban.objects().insert(unbans)
|
|
|
|
|
|
@Task.create(IntervalTrigger(minutes=10))
|
|
async def unban() -> None:
|
|
"""J.A.R.V.I.S. unban background task."""
|
|
await to_thread(_unban)
|