Minehut / MinehutBOT

GNU General Public License v3.0
16 stars 19 forks source link

Implement automatic chat cooldown to prevent spamming and selfbots #162

Open Stefatorus opened 2 years ago

Stefatorus commented 2 years ago

I propose implementing a system to automatically enable chat cooldown when there is a high risk of rules being broken. For that, a "chat risk scoring system" may be useful, where each action is given a penalty. When the penalty stacks up, the bot will automatically implement timeouts to keep the chat safe and limit what spammers can do.

Example:

The penalty score can be used to detect malicious users and while it isn't conclusive to warrant punishment, it can prevent spamming with the intention to create annoyance, advertising, or in general being toxic (eg: Spamming the chat)

Examples:

This system shouldn't be too hard to implement programmatically and should increase the quality of chatting, prevent spammers and advertisers, and help the moderation team do their job more efficiently and do damage control.

Sniped commented 2 years ago

One concern of mine that I have towards this feature is the possibility of one person spamming and ruining the channel for everyone. I think that we should determine whether or not a user is accumulating the majority of points per minute by some marginal amount (set threshold in config) and punish that user instead of implementing a channel cooldown for that specific individual.

I also have another question: how long should we wait to take down a channel cooldown? Some x minutes after the channel point accumulation rate has decreased down to a point where the cooldown can be removed safely?

Stefatorus commented 2 years ago

One concern of mine that I have towards this feature is the possibility of one person spamming and ruining the channel for everyone. I think that we should determine whether or not a user is accumulating the majority of points per minute by some marginal amount (set threshold in config) and punish that user instead of implementing a channel cooldown for that specific individual.

I also have another question: how long should we wait to take down a channel cooldown? Some x minutes after the channel point accumulation rate has decreased down to a point where the cooldown can be removed safely?

The bot's main benefit would be effectively handling situations like botting, etc. Obviously, a trust system can be further implemented to allow older accounts a larger capacity to handle these situations.

Additionally, it would serve as a tool to help staff, not to replace manual response by staff members, so in the case where only one user is flaming or behaving against the rules, they can revert the bot's slowmode.

A similar solution was used by the official discord winter discord to minimize spam considering their extremely large-sized discord server and has proven good results. What could be implemented (if discord allows it), is changing these to timeouts, so they only affect the users in question. However, the capacity of implementing custom times for timeouts is not something I'm sure bot developers can do.

Sniped commented 2 years ago

The bot's main benefit would be effectively handling situations like botting, etc. Obviously, a trust system can be further implemented to allow older accounts a larger capacity to handle these situations.

I'm a bit confused on what you're saying here, what do you mean by a trust system? The older the account is, the more points they're able to accumulate before further action is dealt?

Additionally, it would serve as a tool to help staff, not to replace manual response by staff members, so in the case where only one user is flaming or behaving against the rules, they can revert the bot's slowmode.

So, the mods will have to manually revert the slowmode on the channel, rather than it being done automatically for them? I understand that this would be a tool to help staff, though it can be a bit inconvenient for chatters if they have to wait for a moderator to lift the slowmode all because one person was being a bad apple.

What could be implemented (if discord allows it), is changing these to timeouts, so they only affect the users in question.

I like this solution more, however, if we were to implement this, we should only do so in cases where one or two people are accumulating points for a channel, as I said previously.

However, the capacity of implementing custom times for timeouts is not something I'm sure bot developers can do.

It can be done, fairly easy actually, take a look at GuildMember#timeout on the discord.js docs.