"""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