By continuing to use this site, you agree to the Terms of Service of this website, including usage of cookies.
OK, Don't show this again
cucumber is a featureful moderation plugin. Its main components are (1) logging and (2) punishment (ban/mute) management. The latter uses a MySQL database to store data, so a MySQL server is a requirement when using cucumber.
Individual, IP, and "ultimate" bans are supported. Individual bans are much like a regular /ban
, but with extra features such as the ability to be temporary. IP bans ban an IP and have many of the same features as individual bans. Ultimate bans (uban
) ban any player who joins using a certain IP. This is different from an IP ban, as players who join with a banned IP and are as a result banned will remain so even if they change their IP. Ultimate bans are however irreversible and therefore cannot be pardoned or expire. cucumber also supports the muting of players, as well as several other miscellaneous features.
cucumber logs various events¹ to a path specified in config.yml
. Several loggers (including custom ones) can also be defined in config.yml
. (By default, a BaseLogger exists that logs to log_out.txt
.) Messages are logger every 10 seconds asynchronously. (Timestamps are preserved, they are calculated upon scheduling the logging of the message, not when the message is written to the file.)
¹ cucumber logs the following: join, join attempt (if a player attempts to join while banned), quit, chat, chat attempt (if a player attempts to chat while muted), command
cucumber enables advanced banning of players and IPs, as well as muting.
Command | Description | Usage | Tags |
---|---|---|---|
/ban |
Ban a player by name | /ban <player> [reason] [-duration|-d <duration>] |
-duration specifies the amount of time until the ban expires |
/banlist |
See the list of bans | /banlist |
|
/pardon |
Pardon a player | /pardon <player> |
|
/ipban |
Ban an IP | /ipban <target> [reason] [-duration|-d <duration>] [-player|-p] [-ip] |
-duration specifies the amount of time until the ban expires-player specifies that a player is to be banned-ip specifies that an IP is to be bannedIf neither or both of the -player and -ip are be set, the command will infer whether a player or an IP is to be banned
|
/ipbanlist |
See the list of IP bans | /ipbanlist |
|
/ippardon |
Pardon an IP | /ippardon <ip> |
|
/uban |
Ban any player that joins using an IP. Irreversible | /uban <target> [reason] [-player|-p] [-ip] |
-player specifies that a player is to be banned-ip specifies that an IP is to be bannedIf neither or both of the -player and -ip are be set, the command will infer whether a player or an IP is to be banned
|
/mute |
Mute a player | /mute <player> [reason] [-duration|-d <duration>] |
-duration specifies the amount of time until the ban expires |
/mutelist |
See the list of mutes | /mutelist |
|
/unmute |
Unmute a player | /unmute <player> |
In a duration tag:
y
: yearM
: monthw
: weekd
: dayh
: hourm
: minuteFor instance, 1y3M
means one year and three months (a year and a quarter). 1w2d12h
means one week, two days, and twelve hours (nine days and a half).
cucumber also has miscellaneous moderation commands that are not related to punishment management.
Command | Description | Usage | Tags |
---|---|---|---|
/rawtell |
Send a raw message to a player | /rawtell <player> <message> [-nomessage|-nom] [-popup|-p] [-title|-t] |
-nomessage does not send a chat message-popup sends a popup-title sends a title |
/log |
Log a message | /log <message> [-severity|-s <severity>] |
-severity specifies the severity at which to log the message |
/alert |
Broadcast a message to the server | /alert <message> [-nomessage|-nom] [-popup|-p] [-title|-t] |
-nomessage does not send a chat message-popup sends a popup-title sends a title |
/ip |
Get a player's IP | /ip <player> |
|
/vanish |
Vanish from other player's sight | /vanish |
In a severity tag:
log
: Normal, ordinary eventsnotice
: Normal but noticeable eventsimportant
: Significant eventsalert
: Exceptional events that likely require monitoringThis patch sends a message to muted players who attempt to chat. It does not require a language file update, as the default mute message (moderation.mute.mute.message
) will be used if the chat attempt message (moderation.mute.chat-attempt
) is not present. The message file version is now 2.1, but only 2.0 is required.
This patch adds support for the French language (fr.yml
).
This release adds support for languages. It is a breaking change for message files, so their version has been bumped to 2.0. They are now located at cucumber/lang
. A language can be specified in config.yml
.
This patch switches over to parsecmd
v4.0. Despite the major version bump, this is mostly an internal change and will not change the way the plugin behaves, except for a few bug fixes. This upgrade fixes a minor bug with the duration parser crashing when a duration was not in ascending order (e.g. 15d1M
instead of 1M15d
). A critical bug where the server would freeze shortly after a punishment save has also been patched. It was caused by a bug with pthreads
's garbage collector when scheduling too many libasynql
queries at once, which created too many threads. This was fixed by a libasynql
update which changed pthreads
inheritance settings. The threads were started when the punishment save executed INSERT
s and DELETE
s for every new/old punishment instead of bulk insertions and deletions. Punishments are now saved when they are set/pardoned, which also fixes a bug where pardoning a player and re-punishing them before the punishment save kicked in would leave the player pardoned after a restart.
With this release, /ipban
and /uban
will no longer require the player
or ip
tags. Instead, they will infer whether the provided target is a player or an IP. If it resembles an IP but a player exists whose username is that IP, the sender will be prompted to retype the command and append either the player
or ip
flag, depending on which they want to ban. If both the player
and ip
flags are set, the command will ignore both, as this does not remove any ambiguity. The new usage for /ipban
is /ipban <target> [reason] [-duration|-d <duration>] [-player|-p] [-ip]
. That of /uban
is similar, but without the duration flag.
This patch fixes a bug with Player::addSubTitle()
not working correctly in /rawtell
with the title
flag set. Player::addTitle()
is now used, with an empty string passed as the first argument.
This patch fixes several bugs by requiring version 3.1.2 of parsecmd
.
This release introduces command UIs when a command sender executes a command that does not contain at least the minimum required amount of arguments by using parsecmd
v3.1.
This patch upgrades parsecmd
to v2.0 internally. It is rendered obsolete by v1.4.0.
This patch gets rid of the CucumberPlayer
class (except for CucumberPlayer::getOnlinePlayer()
) and instead passes Player
instances around.
This patch introduces asynchronous logging for the BaseLogger class. Instead of being logged on the main thread as they come in, messages are now queued and logged asynchronously every 10 seconds. Everything is still the same as before this patch, including correct timestamps (they are calculated when submitting the message, not when writing to the file).
This release implements /vanish, which renders a player invisible from others. Running /vanish while already vanished will toggle the vanish status to off. Quitting while vanished will conserve the vanish status when re-joining.
This release introduces the ability to IP ban and uban players who are offline, using the IP stored in the database. The syntax is the same as for an online player.
Bug fixes have also been made.
config.yml
: 2.0
messages.yml
: 1.3
This patch changes how commands are parsed. https://github.com/adeynes/parsecmd is now used for command parsing rather than a custom implementation.
This release adds /uban, which bans any player who joins with the specified IP. This keeps the player banned even after an IP change. However, this is irreversible and cannot be pardoned.
Minor improvements have also be made.
This release adds /ip
, which displays a player's IP. It also implements improvements to the logging system, including logging severities and the ability to stop traversing the logger stack when a Logger::log() call returns false. (This is especially useful with custom loggers that log very specific events.)
API versions have also been added for both config.yml
and messages.yml
as major.minor
. If the plugin requires version n.m
, only major version n
will be accepted, but any minor version greater than or equal to m
will be accepted.
config.yml
: 2.0
messages.yml
: 1.1 (1.2 is included with this release)
Reply to review by :
You can leave one review per plugin release, and delete or update your review at any time