(rooms): Restore permission on guild rejoin.

Restore rented owner and member permissions on rejoin.
Adds a `userid` index to `rented_members_users`.
This commit is contained in:
2021-10-04 18:44:11 +03:00
parent b31a34e725
commit 021182abde
3 changed files with 39 additions and 1 deletions

View File

@@ -282,3 +282,38 @@ async def load_rented_rooms(client):
"Loaded {} private study channels.".format(len(rows)), "Loaded {} private study channels.".format(len(rows)),
context="LOAD_RENTED_ROOMS" context="LOAD_RENTED_ROOMS"
) )
@client.add_after_event('member_join')
async def restore_room_permission(client, member):
"""
If a member has, or is part of, a private room when they rejoin, restore their permissions.
"""
# First check whether they own a room
owned = Room.fetch(member.guild.id, member.id)
if owned and owned.channel:
# Restore their room permissions
try:
await owned.channel.set_permissions(
member,
overwrite=Room.owner_overwrite
)
except discord.HTTPException:
pass
# Then check if they are in any other rooms
in_room_rows = rented_members.select_where(
_extra="LEFT JOIN rented USING (channelid) WHERE userid={} AND guildid={}".format(
member.id, member.guild.id
)
)
for row in in_room_rows:
room = Room.fetch(member.guild.id, row['ownerid'])
if room and row['ownerid'] != member.id and room.channel:
try:
await room.channel.set_permissions(
member,
overwrite=Room.member_overwrite
)
except discord.HTTPException:
pass

View File

@@ -4,4 +4,6 @@ ALTER TABLE guild_config
ADD COLUMN returning_message TEXT, ADD COLUMN returning_message TEXT,
ADD COLUMN starting_funds INTEGER; ADD COLUMN starting_funds INTEGER;
CREATE INDEX rented_members_users ON rented_members (userid);
INSERT INTO VersionHistory (version, author) VALUES (4, 'v3-v4 Migration'); INSERT INTO VersionHistory (version, author) VALUES (4, 'v3-v4 Migration');

View File

@@ -438,6 +438,7 @@ CREATE TABLE rented_members(
userid BIGINT NOT NULL userid BIGINT NOT NULL
); );
CREATE INDEX rented_members_channels ON rented_members (channelid); CREATE INDEX rented_members_channels ON rented_members (channelid);
CREATE INDEX rented_members_users ON rented_members (userid);
-- }}} -- }}}
-- Accountability Rooms {{{ -- Accountability Rooms {{{