27 lines
999 B
Python
27 lines
999 B
Python
"""J.A.R.V.I.S. unmute background task handler."""
|
|
from datetime import datetime, timedelta
|
|
|
|
from discord.ext.tasks import loop
|
|
|
|
import jarvis
|
|
from jarvis.db.models import Mute, Setting
|
|
|
|
|
|
@loop(minutes=1)
|
|
async def unmute() -> None:
|
|
"""J.A.R.V.I.S. unmute background task."""
|
|
mutes = Mute.objects(duration__gt=0, active=True)
|
|
mute_roles = Setting.objects(setting="mute")
|
|
for mute in mutes:
|
|
if mute.created_at + timedelta(minutes=mute.duration) < datetime.utcnow():
|
|
mute_role = [x.value for x in mute_roles if x.guild == mute.guild][0]
|
|
guild = await jarvis.jarvis.fetch_guild(mute.guild)
|
|
role = guild.get_role(mute_role)
|
|
user = await guild.fetch_member(mute.user)
|
|
if user:
|
|
if role in user.roles:
|
|
await user.remove_roles(role, reason="Mute expired")
|
|
|
|
# Objects can't handle bulk_write, so handle it via raw methods
|
|
mute.active = False
|
|
mute.save
|