45 lines
1.7 KiB
Python
45 lines
1.7 KiB
Python
"""J.A.R.V.I.S. reminder background task handler."""
|
|
from datetime import datetime, timedelta
|
|
|
|
from dis_snek.ext.tasks.task import Task
|
|
from dis_snek.ext.tasks.triggers import IntervalTrigger
|
|
from jarvis_core.db import q
|
|
from jarvis_core.db.models import Reminder
|
|
|
|
import jarvis
|
|
from jarvis.utils import build_embed
|
|
|
|
|
|
@Task.create(trigger=IntervalTrigger(seconds=15))
|
|
async def remind() -> None:
|
|
"""J.A.R.V.I.S. reminder background task."""
|
|
reminders = Reminder.find(q(remind_at__lte=datetime.utcnow() + timedelta(seconds=30)))
|
|
async for reminder in reminders:
|
|
if reminder.remind_at <= datetime.utcnow():
|
|
user = await jarvis.jarvis.fetch_user(reminder.user)
|
|
if not user:
|
|
await reminder.delete()
|
|
continue
|
|
embed = build_embed(
|
|
title="You have a reminder",
|
|
description=reminder.message,
|
|
fields=[],
|
|
)
|
|
embed.set_author(
|
|
name=user.username + "#" + user.discriminator, icon_url=user.avatar.url
|
|
)
|
|
embed.set_thumbnail(url=user.display_avatar.url)
|
|
try:
|
|
await user.send(embed=embed)
|
|
except Exception:
|
|
guild = jarvis.jarvis.fetch_guild(reminder.guild)
|
|
channel = guild.get_channel(reminder.channel) if guild else None
|
|
if channel and not reminder.private:
|
|
await channel.send(f"{user.mention}", embed=embed)
|
|
else:
|
|
await channel.send(
|
|
f"{user.mention}, you had a private reminder set for now, "
|
|
"but I couldn't send it to you."
|
|
)
|
|
finally:
|
|
await reminder.delete()
|