Option’s Reference

This class represents the Options for both Guilds and the AntiSpamHandler itself. It is important to become familiar with this dataclass.

Options can be set in two ways:
  • Set when creating a new object Options(no_punish=True)

  • Set using an existing object Options.no_punish = True

For how to include variables, please see the Message Templating docs.

class antispam.dataclasses.options.Options(*, warn_threshold: int = 3, kick_threshold: int = 2, ban_threshold: int = 2, message_interval: int = 30000, message_duplicate_count: int = 5, message_duplicate_accuracy: int = 90, guild_log_warn_message: Union[str, dict] = '$MEMBERNAME was warned for spamming/sending duplicate messages.', guild_log_kick_message: Union[str, dict] = '$MEMBERNAME was kicked for spamming/sending duplicate messages.', guild_log_ban_message: Union[str, dict] = '$MEMBERNAME was banned for spamming/sending duplicate messages.', member_warn_message: Union[str, dict] = 'Hey $MENTIONMEMBER, please stop spamming/sending duplicate messages.', member_kick_message: Union[str, dict] = 'Hey $MENTIONMEMBER, you are being kicked from $GUILDNAME for spamming/sending duplicate messages.', member_ban_message: Union[str, dict] = 'Hey $MENTIONMEMBER, you are being banned from $GUILDNAME for spamming/sending duplicate messages.', member_failed_kick_message: Union[str, dict] = "I failed to punish you because I lack permissions, but still you shouldn't spam.", member_failed_ban_message: Union[str, dict] = "I failed to punish you because I lack permissions, but still you shouldn't spam.", use_timeouts: bool = True, member_timeout_message: Union[str, dict] = 'Hey $MENTIONMEMBER, you are being timed out from $GUILDNAME for spamming/sending duplicate messages.', member_failed_timeout_message: Union[str, dict] = "I failed to punish you because I lack permissions, but still you shouldn't spam.", guild_log_timeout_message: Union[str, dict] = '$MEMBERNAME was timed out for spamming/sending duplicate messages.', guild_log_timeout_message_delete_after: Optional[int] = None, member_timeout_message_delete_after: Optional[int] = None, guild_log_ban_message_delete_after: Optional[int] = None, guild_log_kick_message_delete_after: Optional[int] = None, member_ban_message_delete_after: Optional[int] = None, guild_log_warn_message_delete_after: Optional[int] = None, member_kick_message_delete_after: Optional[int] = None, member_warn_message_delete_after: Optional[int] = None, ignored_members=_Nothing.NOTHING, ignored_channels=_Nothing.NOTHING, ignored_roles=_Nothing.NOTHING, ignored_guilds=_Nothing.NOTHING, delete_spam: bool = False, ignore_bots: bool = True, warn_only: bool = False, no_punish: bool = False, mention_on_embed: bool = True, delete_zero_width_chars: bool = True, per_channel_spam: bool = False, is_per_channel_per_guild: bool = False, addons: Dict[str, Any] = _Nothing.NOTHING)

Options for the AntiSpamHandler, see antispam.AntiSpamHandler for usage.

Parameters
  • use_timeouts (bool) –

    Default: None

    If True, use timeouts as the punishment scheme. If False, then the default punishment scheme of warn, kick, ban is used.

    This will be set to default to True in version 1.3.0

  • warn_threshold (int) –

    Default: 3

    This is the amount of duplicates within message_interval that will result in a warning.

  • kick_threshold (int) –

    Default: 2

    This is the amount of warns required before a kick is the next punishment. I.e. After 2 warns, you will get kicked.

  • ban_threshold (int) –

    Default: 2

    This is the amount of kicks required before a ban is the next punishment. I.e. After 2 kicks, you will get banned.

  • message_interval (int) –

    Default: 30000ms (30 seconds)

    Amount of time a message is kept before being discarded. Essentially the amount of time (In milliseconds) a message can count towards spam.

  • message_duplicate_count (int) –

    Default: 5

    The amount of duplicate messages needed within message_interval to trigger a punishment. I.e. Once you’ve sent 5 ‘spam’ messages you’ll get punished.

  • message_duplicate_accuracy (int) –

    Default: 90

    How ‘close’ messages need to be to be registered as duplicates (Out of 100) You can test this with the code:

    from fuzzywuzzy import fuzz
    fuzz.token_sort_ratio("message one", "message two")
    

  • guild_log_warn_message (Union[str, dict]) –

    Default: $MEMBERNAME was warned for spamming/sending duplicate messages.

    The message to be sent in the guild when someone is warned. Please see the note at the bottom.

  • guild_log_kick_message (Union[str, dict]) –

    Default: $MEMBERNAME was kicked for spamming/sending duplicate messages.

    The message to be sent in the guild when someone is kicked. Please see the note at the bottom.

  • guild_log_ban_message (Union[str, dict]) –

    Default: $MEMBERNAME was banned for spamming/sending duplicate messages.

    The message to be sent in the guild when someone is banned. Please see the note at the bottom.

  • guild_log_timeout_message (Union[str, dict]) –

    Default: $MEMBERNAME was timed out for spamming/sending duplicate messages.

    The message to be sent in the guild when someone is timed out. Please see the note at the bottom.

  • member_warn_message (Union[str, dict]) –

    Default: Hey $MENTIONMEMBER, please stop spamming/sending duplicate messages.

    The message to be sent in the guild when a member is warned.

  • member_kick_message (Union[str, dict]) –

    Default: Hey $MENTIONMEMBER, you are being kicked from $GUILDNAME for spamming/sending duplicate messages.

    The message to be sent to the member who is being kicked.

  • member_ban_message (Union[str, dict]) –

    Default: Hey $MENTIONMEMBER, you are being banned from $GUILDNAME for spamming/sending duplicate messages.

    The message to be sent to the member who is being banned.

  • member_timeout_message (Union[str, dict]) –

    Default: Hey $MENTIONMEMBER, you are being timed out from $GUILDNAME for spamming/sending duplicate messages.

    The message to be sent to the member who is being timed out.

  • member_failed_kick_message (Union[str, dict]) –

    Default: I failed to punish you because I lack permissions, but still you shouldn't spam.

    The message to be sent if kicking the member fails.

  • member_failed_ban_message (Union[str, dict]) –

    Default: I failed to punish you because I lack permissions, but still you shouldn't spam.

    The message to be sent if banning the member fails.

  • member_failed_timeout_message (Union[str, dict]) –

    Default: I failed to punish you because I lack permissions, but still you shouldn't spam.

    The message to be sent if kicking the member fails.

  • guild_log_warn_message_delete_after (int) –

    Default: None

    How many seconds after sending the guild warn message to delete it.

  • guild_log_kick_message_delete_after (int) –

    Default: None

    How many seconds after sending the guild kick message to delete it.

  • guild_log_ban_message_delete_after (int) –

    Default: None

    How many seconds after sending the guild ban message to delete it.

  • guild_log_timeout_message_delete_after (int) –

    Default: None

    How many seconds after sending the guild timeout message to delete it.

  • member_warn_message_delete_after (int) –

    Default: None

    How many seconds after sending the member warn message to delete it.

  • member_kick_message_delete_after (int) –

    Default: None

    How many seconds after sending the member kick message to delete it.

  • member_ban_message_delete_after (int) –

    Default: None

    How many seconds after sending the member ban message to delete it.

  • member_timeout_message_delete_after (int) –

    Default: None

    How many seconds after sending the member timeout message to delete it.

  • ignored_members (Set[int]) –

    Default: Empty Set

    A Set of members to ignore messages from. Set this with antispam.AntiSpamHandler.add_ignored_item() Remove members with antispam.AntiSpamHandler.remove_ignored_item()

    Note

    These can also be set per guild rather then globally.

  • ignored_channels (Set[int]) –

    Default: Empty Set

    A Set of channels to ignore messages in. Set this with antispam.AntiSpamHandler.add_ignored_item() Remove channels with antispam.AntiSpamHandler.remove_ignored_item()

  • ignored_roles (Set[int]) –

    Default: Empty Set

    A Set of roles to ignore messages from. Set this with antispam.AntiSpamHandler.add_ignored_item() Remove roles with antispam.AntiSpamHandler.remove_ignored_item()

  • ignored_guilds (Set[int]) –

    Default: Empty Set

    A Set of guilds to ignore messages in. Set this with antispam.AntiSpamHandler.add_ignored_item() Remove guilds with antispam.AntiSpamHandler.remove_ignored_item()

  • delete_spam (bool) –

    Default: False

    Whether or not to delete messages marked as spam

    Won’t delete messages if no_punish is True

    Note, this method is expensive. It will delete all messages marked as spam, and this means an api call per message.

  • ignore_bots (bool) –

    Default: True

    Should bots bypass anti-spam?

    Note

    This can also be set per guild rather then globally.

  • warn_only (bool) –

    Default: False

    Whether or not to only warn users, this means it will not kick or ban them.

  • no_punish (bool) –

    Default: False

    Don’t punish anyone, simply return whether or not they should be punished within propagate. This essentially lets the end user handle punishments themselves.

    To check if someone should be punished, use the returned value from the propagate method. If should_be_punished_this_message is True then this package believes they should be punished. Otherwise just ignore that message since it shouldn’t be punished.

    Use antispam.plugins.AntiSpamTracker with this mode for best affect.

  • mention_on_embed (bool) –

    Default: True

    If the message your trying to send is an embed, also send some content to mention the person being punished.

  • delete_zero_width_chars (bool) –

    Default: test

    Should zero width characters be removed from messages. Useful as otherwise it helps people bypass antispam measures.

  • per_channel_spam (bool) –

    Default: False

    Track spam as per channel, rather then per guild. I.e. False implies spam is tracked as Per Member Per Guild True implies Per Member Per Channel

  • addons (Dict) –

    Default: Empty Dict

    Use-able storage for plugins to store Options

Notes

Guild log messages will only send if antispam.dataclasses.guild.Guild.log_channel_id is set. You can set it with antispam.AntiSpamHandler.add_guild_log_channel()

__init__(*, warn_threshold: int = 3, kick_threshold: int = 2, ban_threshold: int = 2, message_interval: int = 30000, message_duplicate_count: int = 5, message_duplicate_accuracy: int = 90, guild_log_warn_message: Union[str, dict] = '$MEMBERNAME was warned for spamming/sending duplicate messages.', guild_log_kick_message: Union[str, dict] = '$MEMBERNAME was kicked for spamming/sending duplicate messages.', guild_log_ban_message: Union[str, dict] = '$MEMBERNAME was banned for spamming/sending duplicate messages.', member_warn_message: Union[str, dict] = 'Hey $MENTIONMEMBER, please stop spamming/sending duplicate messages.', member_kick_message: Union[str, dict] = 'Hey $MENTIONMEMBER, you are being kicked from $GUILDNAME for spamming/sending duplicate messages.', member_ban_message: Union[str, dict] = 'Hey $MENTIONMEMBER, you are being banned from $GUILDNAME for spamming/sending duplicate messages.', member_failed_kick_message: Union[str, dict] = "I failed to punish you because I lack permissions, but still you shouldn't spam.", member_failed_ban_message: Union[str, dict] = "I failed to punish you because I lack permissions, but still you shouldn't spam.", use_timeouts: bool = True, member_timeout_message: Union[str, dict] = 'Hey $MENTIONMEMBER, you are being timed out from $GUILDNAME for spamming/sending duplicate messages.', member_failed_timeout_message: Union[str, dict] = "I failed to punish you because I lack permissions, but still you shouldn't spam.", guild_log_timeout_message: Union[str, dict] = '$MEMBERNAME was timed out for spamming/sending duplicate messages.', guild_log_timeout_message_delete_after: Optional[int] = None, member_timeout_message_delete_after: Optional[int] = None, guild_log_ban_message_delete_after: Optional[int] = None, guild_log_kick_message_delete_after: Optional[int] = None, member_ban_message_delete_after: Optional[int] = None, guild_log_warn_message_delete_after: Optional[int] = None, member_kick_message_delete_after: Optional[int] = None, member_warn_message_delete_after: Optional[int] = None, ignored_members=_Nothing.NOTHING, ignored_channels=_Nothing.NOTHING, ignored_roles=_Nothing.NOTHING, ignored_guilds=_Nothing.NOTHING, delete_spam: bool = False, ignore_bots: bool = True, warn_only: bool = False, no_punish: bool = False, mention_on_embed: bool = True, delete_zero_width_chars: bool = True, per_channel_spam: bool = False, is_per_channel_per_guild: bool = False, addons: Dict[str, Any] = _Nothing.NOTHING) None

Method generated by attrs for class Options.

addons
ban_threshold
delete_spam
delete_zero_width_chars
guild_log_ban_message
guild_log_ban_message_delete_after
guild_log_kick_message
guild_log_kick_message_delete_after
guild_log_timeout_message
guild_log_timeout_message_delete_after
guild_log_warn_message
guild_log_warn_message_delete_after
ignore_bots
ignored_channels
ignored_guilds
ignored_members
ignored_roles
is_per_channel_per_guild
kick_threshold
member_ban_message
member_ban_message_delete_after
member_failed_ban_message
member_failed_kick_message
member_failed_timeout_message
member_kick_message
member_kick_message_delete_after
member_timeout_message
member_timeout_message_delete_after
member_warn_message
member_warn_message_delete_after
mention_on_embed
message_duplicate_accuracy
message_duplicate_count
message_interval
no_punish
per_channel_spam
use_timeouts
warn_only
warn_threshold