Cog-Creators / Red-DiscordBot

A multi-function Discord bot
https://docs.discord.red
GNU General Public License v3.0
4.81k stars 2.31k forks source link

[Mute] Mute/unmute moves users through all channels #4993

Closed fixator10 closed 2 years ago

fixator10 commented 3 years ago

What Red version are you using?

3.4.9

Cog name

Mutes

Command name

mute

What did you expect to happen?

Mute moves user from one channel to another, and then back.

Or through all channels, and then back.

What actually happened?

Mute moved user from one channel to another, moving through all channels in progress.

Final channel was not same as initial channel.

How can we reproduce this error?

  1. Create a server with 3 or more voice channels
  2. Make user join one of them
  3. Mute that user

Anything else?

Before mute: before mute - voice channels After mute: after mute - voice channels Audit log: audit log - 5 moves for 5 channels

relma2 commented 3 years ago

To clarify, is this audio muting or text muting? Like did you mute their mic or their ability to type?

Flame442 commented 2 years ago

This is caused by [p]mute when no mute role is set up. The bot is currently calling channel_mute_user for every channel in the server, and that function moves the user to that channel after applying the overrides if it has permissions to do so.[1] This is due to some legacy code from the old mutes cog, as when the bot attempted to mute a user in voice it wouldn't actively mute them until they rejoined the channel, so it moved them in and out of the channel to actually mute the person.[2] It seems like somewhere along the way that got changed to moving the user to every voice channel. I can confirm that this is still an issue, a speak override only update when the user rejoins the voice channel. I would be inclined to believe that simply kicking the user from their current voice channel is the easiest fix to this issue.

[1] https://github.com/Cog-Creators/Red-DiscordBot/blob/008fb0f04219204e79cac981fe278da179f5c5bd/redbot/cogs/mutes/mutes.py#L1816-L1818 [2] https://discord.com/channels/133049272517001216/718148684629540905/1010645412908113992

Jackenmen commented 2 years ago

I would be inclined to believe that simply kicking the user from their current voice channel is the easiest fix to this issue.

While it is an easy way to "fix" this, it's not really a proper fix. We intentionally chose this method over kicking a user when this functionality was implemented, see #4028.

A proper way to fix this would be to verify that the channel we're muting the user in is the channel the user is in and only move them in such a scenario. It shouldn't really be more complicated than the proposed solution and it actually fixes the problem instead of removing functionality.