Add reminder task
This commit is contained in:
parent
7dee20db08
commit
b1076b9d90
1 changed files with 54 additions and 0 deletions
54
jarvis_tasks/tasks/reminder.py
Normal file
54
jarvis_tasks/tasks/reminder.py
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
"""JARVIS reminders."""
|
||||||
|
import asyncio
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
|
from jarvis_core.db import q
|
||||||
|
from jarvis_core.db.models import Reminder
|
||||||
|
from jarvis_core.util import build_embed
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from dis_snek import Snake
|
||||||
|
|
||||||
|
|
||||||
|
async def remind(self, bot: "Snake") -> None:
|
||||||
|
"""Run reminders in the background."""
|
||||||
|
while True:
|
||||||
|
await asyncio.sleep(5)
|
||||||
|
reminders = await Reminder.find(
|
||||||
|
q(remind_at__lte=datetime.utcnow() + timedelta(seconds=5), active=True)
|
||||||
|
)
|
||||||
|
for reminder in reminders:
|
||||||
|
user = await self._bot.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.avatar.url)
|
||||||
|
|
||||||
|
try:
|
||||||
|
await user.send(embed=embed)
|
||||||
|
except Exception:
|
||||||
|
guild = await self._bot.fetch_guild(reminder.guild)
|
||||||
|
member = await self._bot.fetch_member(user.id)
|
||||||
|
if not member:
|
||||||
|
continue
|
||||||
|
channel = await guild.fetch_channel(reminder.channel) if guild else None
|
||||||
|
if channel and not reminder.private:
|
||||||
|
await channel.send(f"{member.mention}", embed=embed)
|
||||||
|
await reminder.delete()
|
||||||
|
else:
|
||||||
|
await channel.send(
|
||||||
|
f"{member.mention}, you had a private reminder set for now,"
|
||||||
|
" but I couldn't send it to you.\n"
|
||||||
|
f"Use `/reminder fetch {str(reminder.id)}` to view"
|
||||||
|
)
|
||||||
|
reminder.update(q(active=False))
|
||||||
|
await reminder.commit()
|
Loading…
Add table
Reference in a new issue