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