42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
from datetime import datetime, timedelta
|
|
|
|
import pymongo
|
|
from discord.ext.tasks import loop
|
|
|
|
import jarvis
|
|
from jarvis.db.types import Mute, Setting
|
|
|
|
|
|
@loop(minutes=1)
|
|
async def unmute():
|
|
mutes = Mute.get_active(duration={"$gt": 0})
|
|
mute_roles = Setting.get_many(setting="mute")
|
|
updates = []
|
|
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
|
|
updates.append(
|
|
pymongo.UpdateOne(
|
|
{
|
|
"user": user.id,
|
|
"guild": guild.id,
|
|
"created_at": mute.created_at,
|
|
},
|
|
{"$set": {"active": False}},
|
|
)
|
|
)
|
|
if updates:
|
|
jarvis.jarvis_db.mutes.bulk_write(updates)
|