From 4a34814a3bda5f69d9b9cdfad29ea45ff365cf26 Mon Sep 17 00:00:00 2001 From: Conatum Date: Mon, 4 Oct 2021 19:15:31 +0300 Subject: [PATCH] (rooms): Restore room permission on rejoin. Restore current and upcoming accountability room permissions on rejoin. --- bot/modules/accountability/tracker.py | 29 +++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/bot/modules/accountability/tracker.py b/bot/modules/accountability/tracker.py index e10d2772..dde5e72e 100644 --- a/bot/modules/accountability/tracker.py +++ b/bot/modules/accountability/tracker.py @@ -8,6 +8,7 @@ from typing import Dict from discord.utils import sleep_until from meta import client +from utils.interactive import discord_shield from data import NULL, NOTNULL, tables from data.conditions import LEQ from settings import GuildSettings @@ -460,3 +461,31 @@ async def unload_accountability(client): Save the current sessions and cancel the runloop in preparation for client shutdown. """ ... + + +@client.add_after_event('member_join') +async def restore_accountability(client, member): + """ + Restore accountability channel permissions when a member rejoins the server, if applicable. + """ + aguild = AccountabilityGuild.cache.get(member.guild.id, None) + if aguild: + if aguild.current_slot and member.id in aguild.current_slot.members: + # Restore member permission for current slot + slot = aguild.current_slot + if slot.channel: + asyncio.create_task(discord_shield( + slot.channel.set_permissions( + member, + overwrite=slot._member_overwrite + ) + )) + if aguild.upcoming_slot and member.id in aguild.upcoming_slot.members: + slot = aguild.upcoming_slot + if slot.channel: + asyncio.create_task(discord_shield( + slot.channel.set_permissions( + member, + overwrite=slot._member_overwrite + ) + ))