Skip to content

Commit 3b7acbe

Browse files
Refactor update-voice-perms command to improve permission handling; add checks for changes before updating and optimize notification logic
1 parent cf1a0ab commit 3b7acbe

File tree

1 file changed

+34
-17
lines changed

1 file changed

+34
-17
lines changed

cogs/teams_cog.py

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,7 @@ async def update_voice_permissions(self, interaction: discord.Interaction):
500500
team_members = [member for member in team['members'] if member.get('discord_user_id')]
501501

502502
# Create new overwrites
503-
overwrites = {
503+
new_overwrites = {
504504
guild.default_role: discord.PermissionOverwrite(view_channel=False),
505505
guild.me: discord.PermissionOverwrite(view_channel=True, manage_channels=True)
506506
}
@@ -512,27 +512,44 @@ async def update_voice_permissions(self, interaction: discord.Interaction):
512512
discord_member = guild.get_member(discord_id)
513513
if discord_member:
514514
discord_members.append(discord_member)
515-
overwrites[discord_member] = discord.PermissionOverwrite(view_channel=True, connect=True, speak=True)
515+
new_overwrites[discord_member] = discord.PermissionOverwrite(view_channel=True, connect=True, speak=True)
516516

517517
try:
518-
# Add delay between operations to avoid rate limits
519-
await asyncio.sleep(2)
520-
521-
# Update channel overwrites
522-
await team_channel.edit(overwrites=overwrites)
518+
# Compare old and new permissions
519+
permissions_changed = False
520+
old_overwrites = team_channel.overwrites
523521

524-
# Send notification about updated permissions
525-
if discord_members:
526-
mentions = " ".join(member.mention for member in discord_members)
527-
await team_channel.send(
528-
f"🔄 Channel permissions have been updated! The following members now have access: {mentions}"
529-
)
522+
# Check if any permissions were added or modified
523+
for user, overwrite in new_overwrites.items():
524+
if user not in old_overwrites or old_overwrites[user].pair() != overwrite.pair():
525+
permissions_changed = True
526+
break
527+
528+
# Check if any permissions were removed
529+
for user in old_overwrites:
530+
if user != guild.default_role and user != guild.me and user not in new_overwrites:
531+
permissions_changed = True
532+
break
530533

531-
channels_updated += 1
534+
if permissions_changed:
535+
# Add delay between operations to avoid rate limits
536+
await asyncio.sleep(2)
537+
538+
# Update channel overwrites
539+
await team_channel.edit(overwrites=new_overwrites)
540+
541+
# Send notification about updated permissions only if they changed
542+
if discord_members:
543+
mentions = " ".join(member.mention for member in discord_members)
544+
await team_channel.send(
545+
f"🔄 Channel permissions have been updated! The following members now have access: {mentions}"
546+
)
547+
548+
channels_updated += 1
532549

533-
# Take a break every 25 channels to avoid rate limits
534-
if channels_updated % 25 == 0:
535-
await asyncio.sleep(5)
550+
# Take a break every 25 channels to avoid rate limits
551+
if channels_updated % 25 == 0:
552+
await asyncio.sleep(5)
536553

537554
except Exception as e:
538555
logger.error(f"Error updating permissions for team {team_name}: {e}")

0 commit comments

Comments
 (0)