(Created page with "Pissfilter is a spam filtering bot that uses rules. == Getting started == The bot can be used in the #pissfilter, #services or #opers channels by mentioning it like so: <cod...") |
mNo edit summary |
||
| Line 59: | Line 59: | ||
== Creating your first rule == | == Creating your first rule == | ||
For this example, we will be using the rule | For this example, we will be using the rule <code>on message: channel eq "#opers" and message match /test/ -> kill # test rule</code>, which: | ||
* when a message is sent, | * when a message is sent, | ||
* if the message is sent to the channel #opers, and | * if the message is sent to the channel #opers, and | ||
Revision as of 18:32, 14 October 2023
Pissfilter is a spam filtering bot that uses rules.
Getting started
The bot can be used in the #pissfilter, #services or #opers channels by mentioning it like so: Pissfilter: help. Logs can be accessed via #services or #pissfilter.
Rules syntax
- Regexes are formatted as
/REGEX/FLAGS. - Strings are formatted as
"string". - Parameters are formatted literally (
hostmask, for example) - Durations are formatted as a number followed by a unit (d/h/m/s), or
forever.
The rules syntax is defined as on EVENT: CONDITION -> ACTION # COMMENT. The comment is optional.
Valid events are:
message: when a message is sentconnect: when a user connectsviolation: when a violation is added
Conditions can be one of the following:
<string param> match <regex>: Checks for a regex match.not <condition>: Inverts a condition.<condition> and <condition>: Takes the AND of both conditions.<condition> or <condition>: Takes the OR of both conditions.<integer param> <gt|lt|gte|lte|eq> <number>: Compares an integer.<string param> eq <string>: Compares a string.
Valid string parameters are:
server: The server the user is on.hostmask: The hostmask of the user.message: The message sent (message event only).channel: The channel the message was sent to (message event only).
Valid integer parameters are are:
connected_for: How many seconds the user is connected for.violation <string: violation name>: The amount of violations for the given type.
Valid actions are:
gzline <str: duration> <str: reason>: GZ-lines the IPgline <str: duration> <str: reason>: G-lines the IPshun <str: duration> <str: reason>: Shuns the IPkill <str: reason>: Kills the usertempshun: Tempshuns the userlog <str: message>: Log a messageviolation <str: name> <int: points> <duration: exp>: Addspointsto the violation countername(name must be a string in quotes) which expire inexp.
Commands
help: Get a list of commandsadd <rule>: Add a ruledel <rule ID>: Delete a ruletest <rule IDs...>: Test a set of rules on the last 60 minutes of events.list: List staging ruleslist exec: List current rulesrollback: Rollback the staging ruleset to the current rulesapply: Apply the current staging rules
Creating your first rule
For this example, we will be using the rule on message: channel eq "#opers" and message match /test/ -> kill # test rule, which:
- when a message is sent,
- if the message is sent to the channel #opers, and
- it contains test,
- kill the user
You can create the rule by doing Pissfilter: add on message: channel eq "#opers" and message match /test/ -> kill # test rule.
To test it, post "test" in opers and run Pissfilter: test <rule ID>, and it should show you that it would have KILLed you.
To remove the rule, do Pissfilter: del <rule ID>.