Red-discordbot: [V3] mute not writing in modlog

Created on 6 Mar 2019  路  6Comments  路  Source: Cog-Creators/Red-DiscordBot

Command bugs

Command name

mute

What cog is this command from?

mod

What were you expecting to happen?

mute user and write to modlog

What actually happened?

no modlog entry appeared

How can we reproduce this issue?

  1. Set modlog channel
  2. Mute user by using command in channel, where bot can't send messages
  3. There must be a message in modlog, but command raised error before modlog function was called

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

All 6 comments

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.

Was this page helpful?
0 / 5 - 0 ratings