mute
mod
mute user and write to modlog
no modlog entry appeared
We can't possibly account for every command being run in a channel where the bot can't send messages. The bot will error out on almost all commands when it can't send messages, because we're not going to wrap every ctx.send with a try/except.
Solution: don't use the bot in channels where it can't send messages
It really makes it hard to use bot for mod purpose because of that. On our server we have restricted bot usage from the main text channel to not overfill it with bot messages, but we want to still use it for moderation - mutes and bans. It mutes correctly, but eliminates the point of using the bot for it because it doesn't write to modlog.
You don't need to wrap it in try/catch, just move case creation above the channel response. SImple enough but helps a lot. Modlog is more important than response in a channel.
```if success:
try:
await modlog.create_case(
self.bot,
guild,
ctx.message.created_at,
"vmute",
user,
author,
reason,
until=None,
channel=channel,
)
except RuntimeError as e:
await ctx.send(e)
await ctx.send(
_("Muted {user} in channel {channel.name}").format(user=user, channel=channel)
)
I agree that modlog creation should still happen.
I don't think this is worth fixing prior to the main PR which is part of #2500 to avoid double fixing something, as the entire mod cog is being addressed there, but I will make sure it is on the list.
Reopening, IMO moderation commands should always be logged if successful
@romashko - While #2501 will add this fix, it's worth noting that there's an [p]ignore channel command that will ignore commands in the channel except for mods and up. I use it all the time for when only moderation commands should be used in a channel.
@zephyrkul thanks, will use it as workaround.
Most helpful comment
It really makes it hard to use bot for mod purpose because of that. On our server we have restricted bot usage from the main text channel to not overfill it with bot messages, but we want to still use it for moderation - mutes and bans. It mutes correctly, but eliminates the point of using the bot for it because it doesn't write to modlog.
You don't need to wrap it in try/catch, just move case creation above the channel response. SImple enough but helps a lot. Modlog is more important than response in a channel.
```if success:
try:
await modlog.create_case(
self.bot,
guild,
ctx.message.created_at,
"vmute",
user,
author,
reason,
until=None,
channel=channel,
)
except RuntimeError as e:
await ctx.send(e)
await ctx.send(
_("Muted {user} in channel {channel.name}").format(user=user, channel=channel)
)