Coder Social home page Coder Social logo

chrysanthemum's Introduction

chrysanthemum

CI

Chrysanthemum is a message filtering Discord bot developed for the unofficial Roblox Discord server.

Configuration

Chrysanthemum requires a bot token passed either via a .env file or the DISCORD_TOKEN environment variable.

The configuration file is loaded from chrysanthemum.cfg.json, and is structured as follows:

{
    "guilds": {
        "<GUILD_ID>": {
            "filters": [
                {
                    "actions": [
                        {
                            "action": "delete"
                        },
                        {
                            "action": "send_message",
                            "channel_id": "<CHANNEL_ID>",
                            "content": "$USER_ID sent a filtered message: $REASON\n```$MESSAGE_CONTENT```"
                        }
                    ],
                    "spam": {
                        "emoji": {
                            "count": 5,
                            "interval": 30
                        }
                        // duplicates, links, attachments are in the same format.
                        // actions taken are defined in `actions` above.
                    },
                    // If both exclude_channels and include_channels are specified,
                    // include_channels takes priority.
                    "exclude_channels": [],
                    "include_channels": [],
                    "exclude_roles": [],
                    "rules": [
                        // RULES
                    ]
                }
            ]
        }
    }
}

Each guild contains a filters property, which is an array of filter configurations. Each filter configuration has the following properties:

  • rules
  • actions
  • spam
  • exclude_channels
  • include_channels
  • exclude_roles

Rules

Each filter configuration allows you to declaratively specify rules to filter messages on. If any rule matches a new message's content, the actions specified will be applied to the message. There are currently seven kinds of filters, with more coming soon.

Words

{
    "type": "words",
    "words": [
        "<WORD>"
    ]
}

The words filter searches for disallowed words within a message. A word is separated from other text with whitespace.

Regex

{
    "type": "regex",
    "regexes": [
        "a[0-9]b"
    ]
}

The regex filter checks that a message doesn't match any of the provided regexes.

Zalgo

{
    "type": "zalgo"
}

The zalgo filter checks for Zalgo text (z̵̼͠a̶̢͎͆͊l̷̬͠g̷̡͇͒o̶̘̓).

MIME type

{
    "type": "mime_type",
    "mode": "allow",
    "types": [
        "image/png",
        "image/jpeg",
        "image/gif"
    ],
    "allow_unknown": false
}

The mime_type filter checks attachment MIME types. The mode field controls the behavior of the filter - allow means it denies content types that aren't in the list, while deny means it denies content types that are in the list. allow_unknown controls the behavior of the filter when the Discord API doesn't return a content type - true means that attachments without a content type are allowed, and false means that they are denied.

Link

{
    "type": "link",
    "mode": "allow",
    "domains": [
        "discord.com"
    ]
}

The link filter checks the domains of links included in a message. The mode field controls the behavior of the filter - allow means it denies domains that aren't in the list, while deny means it denies domains that are in the list.

Invite

{
    "type": "invite",
    "mode": "allow",
    "invites": [
        "roblox"
    ]
}

The invite filter checks for invite codes in a message. The mode field controls the behavior of the filter - allow means it denies invite codes that aren't in the list, while deny means it denies invite codes that are in the list.

Stickers

{
    "type": "sticker",
    "mode": "allow",
    "stickers": []
}

The sticker filter checks for stickers sent with the message. The mode field controls the behavior of the filter - allow means it denies stickers that aren't in the list, while deny means it denies stickers that are in the list.

Actions

Chrysanthemum supports configuring which actions to take when a message is filtered. Actions look like this in the configuration file:

{
    "action": "<ACTION_TYPE>",
    "<ACTION_PARAMETER>": ""
}

delete

{
    "action": "delete"
}

The delete action deletes the filtered message. It takes no parameters.

send_message

{
    "action": "send_message",
    "channel_id": "<CHANNEL_ID>",
    "content": "$USER_ID sent a bad message: $REASON\n```$MESSAGE_CONTENT```"
}

The send_message action sends a message to a channel when a message is filtered. It takes two parameters: channel_id, the channel to send the message to, and content, the message content. There are three template variables that can be used in content:

  • $USER_ID: The ID of the user who sent the message.
  • $REASON: Why the message was filtered.
  • $MESSAGE_CONTENT: The content of the filtered message.

Spam

"spam": {
    "emoji": {
        "count": 5,
        // 30 seconds
        "interval": 30
    },
    "links": {
        "count": 5,
        "interval": 30
    },
    "attachments": {
        "count": 5,
        "interval": 30
    },
    "duplicates": {
        "count": 5,
        "interval": 30
    }
},

Chrysanthemum supports spam filtering. It does not filter by message frequency; to guard against this, consider enabling slowmode in the channels. Chrysanthemum's spam filtering guards against the following kinds of spam:

  • Excessive emojis
  • Excessive links
  • Excessive attachments
  • Duplicate messages

All of these can be configured via the spam filter configuration object. All behave in the same fashion. To disable any component of this functionality, omit the configuration section.

Excluding / including channels

"exclude_channels": [
    "<CHANNEL_ID>"
]
"include_channels": [
    "<CHANNEL_ID>"
]

There are likely some channels that you don't want Chrysanthemum to look at within a guild. For optimal performance of Chrysanthemum, you should use role permissions to exclude Chrysanthemum from these channels entirely. However, in case you need to filter these at the configuration level, Chrysanthemum allows you to specify exclude_channels or include_channels in the configuration file.

If both of these fields have channel IDs in them, include_channels overrides exclude_channels - the contents of exclude_channels will be ignored. Chrysanthemum will print a message to the log when starting up if this is the case.

Excluding roles

"exclude_roles": [
    "<ROLE_ID>"
]

It may be desirable for some roles to be exempt from Chrysanthemum's filtering, like moderators and other bots. To do this, specify the exclude_roles field in the filter configuration:

chrysanthemum's People

Contributors

amaranthinecodices avatar archasion avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.