CurseBan
Current Version: 1.3.2.1
Recommended Build: 1.3.2-R1 (Craftbukkit build - 2377)
IMPORTANT: With 2.3.1b, matching has been changed. Please see the release notes for additional information
About
What is this?
Ever had a player flaming constantly? Or maybe you want to have a family-friendly server? Or you want to stop people from asking for diamonds? Now you don't have to worry about that anymore: CurseBan allows you to add "stalk words" - Whenever a player mentions one of them, he gets kicked. At the same time, the plugin keeps track of a "curse value" for every stalked words. This curse value is added to the players point count every time he uses such a word. You can define commands that should be executed once a user reaches a certain threshold, and a cooldown to remove points.
How does it work?
Every curse/banned word is assigned a certain point value. Every time a player uses one of these words, the word's point value is added to that players total count. Then, the command associated with that total value is executed. If none is associated, the next lowest is executed.
Commands, Permissions and Examples
Commands
- /cb - Displays help
- /cb list - Lists the current stalk words
- /cb add [word] <threshold> - Adds the word with that ban threshold to the list. If no threshold is given, 5 is used
- /cb remove [word] - Removes that word from the list
- /cb pardon [player] - Sets that player's kick count to 0 (Note: Will not unban if he has been banned)
- /cb pardon-all - Sets the kick count of all players to 0( Note: Will not unban if they have been banned)
- /cb save - Save all files to the disk. Handle with care, this will overwrite and changes made to the files that have not yet been reloaded.
- /cb set value [curse] [value] - Sets the curse point value of the curse
- /cb set matching [curse] [matchtype] - Sets the matching for this curse (Allowed: default, default-ignorecase, literal, literal-ignorecase, regex, regex-all-lower)
- /cb set kick [message] - Sets the default kick message
- /cb set command [value] [command] - Sets the command to be executed whenever a player reaches or passes value
- /cb listpoints [player] - displays points for a specific player (case sensitive)
Permission nodes
(Note that any node can be represented by its parent node - You can use cb.admin.* instead of typing in every node one by one)
- cb.admin.ignore - You won't get kicked for cursing
- cb.admin.pardon.all - Will set the kick count of all players back to zero. Will not unban them
- cb.admin.pardon.single - Will pardon single player. Also no unban
- cb.admin.add - Add curses to the list
- cb.admin.remove - D'uh
- cb.admin.save - Allows to save files
- cb.admin.set.value - Allows to set the curse points value of a banned word
- cb.admin.set.matching - Allows to set matching for a word
- cb.admin.set.kick - Allows to set the default kick message
- cb.admin.set.command - Allows to set a new or existing command to be executed when a point value is reached
- cb.list - Allows to see a list of all stalked curses
Example Usages
- Stop cursing: /cb add shit
- Stop people from typing in ALL CAPS: /cb add r:[A-Z]{3} will kick for 3 or more consecutive uppercase letters
- Give people diamonds if they say "supercalifragilistic": /cb add i:supercalifragilistic 9000, in the config file, put 9000: give %name% diamond 64;cb pardon %name%
Examples
/cb add shit - The list now contains the word shit, with default value 5
/cb list -> "[shit]"
/cb add fuck 10 - The list now contains the word fuck, with a value of 10
/cb list -> "[shit, fuck]"
/cb set command 0 kick %name% - Kicks a player whenever he swears and has more than 0 points (Basically, always) (Note that %name% is a variable used to represent the player's name)
/cb set command 10 jail %name% - Jails a player whenever he swears and has more than 10 points
Player A joins...
A: "This server is shit!" -> "shit" has a value of 5 -> A now has 5 points -> 0 < 5 < 10, so the "kick" command is executed
A rejoins...
A: "What the fuck, man?" -> "fuck" has a value of 10 -> A now has 15 points -> 10 < 15, so the "jail" command is executed
All this can also be done by editing the yaml files created in /plugin/CurseBan - see this page for more information: http://dev.bukkit.org/server-mods/curseban/pages/how-to-use-the-yml-files/
Misc
ToDo
- Add the ability to tell the player their bad word they said using %word% (You'd be able to add this to the jail sign (IE - Swearing: 'shit' ))
- Stop the server from overwriting files saved to the server by the server owner after a restart.
Changelog
v1.3.2.1:
- Changed version number to reflect current MC version it is configured for. (1.3.2) with additional build number for this (.1)
- Fixed issue 18 and 20 for issues with PlayerChatEvent (essentially replaced this even with AsycPlayerChatEvent) This seems to have resolved this issue, but I'm not entirely sure to be honest. Please report any issues you find to the ticket system. Do not post here.
Note this version will NOT work with tekkit servers. Use version 2.5.0 for Tekkit version 3.1.2.
v 2.5.0: -First release by new project owner GokouZWAR
- Fixed points being added to players instead of taking them away over time.
- Added console tracking for player's points so you can see when the system takes away player points, and how much was removed and when.
- Updated for Craftbukkit 1.2.5 - R4
- Added a few things on this page (commands that were missing, comments, and old missing revision information)
v 2.4.0: - (don't know if all these were added but I found these on the update page, possibly things he wanted added or had fixed in this version, not entirely sure. They were marked 2.4 so I'm going with this as the last updates. -GokouZWAR)
- (Hopefully) Fixed config not being saved on shutdown
- Fixed /cb set matching setting the wrong option
- Added: Logging to save methods
- Added: Reload command (/cb reload <all/config/curse/count>). Permission node: cb.admin.reload (alternatively, permission for one file only can be given by cb.admin.reload.<file>)
- Added: List command (/cb listpoints [player] - Player is optionally, omitting it will display all). Permission node: cb.admin.listpoints
- Added: Config option "save": Determines how files should be saved, in addition to the shutdown save:
- always: Save every file whenever it is modified
- config: Save the config file when modified
- curse: Save the curse file when modified
- count: Save the count file when modified
- Multiple options are possible: "save: config,curse"
v 2.3.3:
- Update to CraftBukkit 1.2.5-R1.0 (Phew, finally)
- Extended logging to include the message in which the word was found.
v 2.3.2:
- Updated to R6/1.2.3-R01
- Removed any deprecated API
- Included new matching, see release notes for more information
v 2.3.0:
- Added variable for the config file: %points% is replaced by the number of points the player has
- Implemented http://dev.bukkit.org/server-mods/curseban/tickets/8-log-chat-entry/ : Added "log-actions" option to the config file (default: true). This logs: The name of the player, the word that triggered the filter, the commands issued in return and the points of the player.
v 2.2.10:
- Moved the always-kick check behind any executed commands - This should fix bug #6 (http://dev.bukkit.org/server-mods/curseban/tickets/6-still-wont-ban-no-obvious-errors-tho/) which caused the plugin to not perma-ban people
v 2.2.9:
- Updated to 1.1-R3
v 2.2.8:
- Security patches
v 2.2.7:
- Command lists are now separated by both ";" and " ;"
- Version number displayed on startup and shutdown
v 2.2.6:
- Fixed Bug #2 (#3, #4): NullPointerException in onClientChat
v 2.2.5:
- Changed indenting of the .yml files
v 2.2.4:
- Fixed null-pointer-exception after using /cb pardon-all
- Added support for multiple commands
- Added /cb save
v 2.2.3:
- Updated to MC 1.0.* / CB 1.0.1-R1
v 1.2.3:
- Added cooldown (See: "How to use the .yml files")
- Added command: /cb set literal [curse] [true/false]
- Added permission node: cb.admin.set.literal
v 1.2.2 (Final and beta release notes merged):
- Updated to RB 1337
- Rework of the curse punishment system
- Switched everything to Yaml
- Added literal matching: A * in front of the word if using ingame commands, or the "literal-match" option in the Curses.yml
- Fixed Curses not being loaded properly (If you already added curses, but they arent showing up ingame, rename "Curse Point Value.yml" to "Curses.yml"
- Custom commands possible
v1.1.2:
- Updated to RB 1317
- Hopefully fixed PEX issue
- Skipped v1.1.1, derp
v1.1.0:
- Updated to RB 1240
v1.0.0:
- First release
Contact
Ticket here or contact me on www.mcnations.net. Email: administrator at mcnations Dot Net. Latest version in use will be on server.mcnations.net:25599 - running Tekkit.
@paulj1x
I'll add that, thanks for the suggestion!
In addition to the word they got kicked for, it would be really good to see the full sentence they typed. Also, since this only goes to the console, the color coding makes it harder to read, e.g. [Curseban] §2User §4Jman6729§2 got kicked for cursing: §4rape
@sbhouse
I'd prefer to keep CurseBan as simple as possible (read: as little commands as needed). If you have a plugin that gives you the ability to smite players, you can integrate it with CurseBan, though. Simply add the command to smite the player to the list of commands to be executed, adding %name% in place of the player's name.
Hi! I'm looking for a replacement for my current swear-filter. The one I'm using appears to be abandoned and it doesn't seem to work with latest build of CB-RB. However, I had some cool options in the old plugin of striking players with lightning if they swore.
http://forums.bukkit.org/threads/fun-chat-taboo-v-0-2-2-ban-words-or-phrases-1060.27655/
Would you be willing to add simply player punishment like lightning strikes or health penalties? It has worked very well and the language stays clean on my server.
- SBHouse
lots of CurseBan errors in console lately
http://pastebin.com/PpctXy1F
CB 1.2.5 - latest curseban
@Nekuroi
Try surrounding the command with quotes. If that does not work, try adding a backslash before the colon. If that doesn't work, either, please file a bug report.
i'm using banhammer and don't know/can't make the temporally ban works because the colon in "t:1d"
@rasnyderiii
Sorry for the late reply. This is currently not possible, sorry.
@CosmicVoyager
Try literal or literal-ignorecase instead of regex
"ToDo Nothing right now, suggest something"
Allowed words list please! So you can allow words like "glass" when regex matches with "ass".
Thanks
How do you change the config without restarting server?
@BlindRiku
/cb set literal <word> <true|false> has been replaced by /cb set matching <word> <default|default-ignorecase|literal|literal-ignorecase|regex|regex-all-lower> You are looking for /cb set matching <word> literal Thanks for mentioning the /cb set value bug, I'll take a look.
most of the commands arent working right on 1.2.3-r0.1, like /cb set vaule word 15 just says value is not on the list and /cb set literal word true just brings up the help page as if you do /cb not sure if its just me but just letting ya know
@paulj1x
A log file is a great idea. Of course, everything cb logs will be stored in the server.log file, but it might be easier to have an extra file, as an option at least. And yes, since the latest version, players with 0 or less should be removed from the list once the cooldown checks them the next time. About Essentials/MCBans: CurseBan interacts with any plugin you want, it does not ban the people themselves, but just issues the "ban" command, which will then be handled by the server or plugins.
@rasnyderiii
Try /cb add \?{4}
Loving CurseBan!
Thanks for adding logging. It appears this sends the info to the console, but not to a file? It would be nice to have it in a file so you don't have to look through the console history. It would also be really nice to see the entire sentence that was used to get the context. I had one friend ask for something to be "bigger", but hit "n" instead of "b"! He was CurseBanned for two weeks. Fortunately I knew him and pardoned him, but if I hadn't known him I wouldn't have known it was a simple typo. Please keep in mind that normally the chat would have gone to the log, but CurseBan prevents this, so CurseBan is preventing the ops from seeing the sentence.
I thought I saw somewhere that you removed player names with value 0 in the Player Curse Count file. Maybe I dreamt this, but it would be a good feature.
Lastly, you might think about how CurseBan interacts with Essentials and MCBans. Since these both have tempban, does CurseBan properly handly this?
tried to add auto kick for !!!! and ???? but not working.
/cb add !{4}
/cb add ?{4}
Like it! Cept for default kick message.
However, error!
http://pastebin.com/CFmxLHqw
Bukkit-1.1-R6-14-gfdfd3ab-b2010jnks (MC: 1.2.2)
@bigscary
Thanks, you have a lot of good points. The way it is right now, you can pretty much customize the plugin in any way you want: Enable and disable cancelling of messages, custom commands (a kick is not necessary), etc.
I personally do not see a problem with experimenting: That is what the point system is for. If people keep experimenting, chances are that they will hit a threshold where the punishment will be more than just a kick, so stopping would be in their interest, too.
Using /cb pardon was, in retrospect, a poor choice. I might phase it out slowly, in favor of /cb reset, but since it may be included in the files already, I feel uncomfortable with removing it immediately.
Replacing the word would be a nice additional feature, which I will keep in mind for future releases, thanks for the idea.
There's several chat-censoring plugins out there already, and this one makes the same mistake as the rest - you're letting players know when they're being filtered. People who WANT to dodge the filter can experiment until they find workable dodges. If you want to make your filter smarter, instead of kicking them, quietly change their word to another, nicer word, and send everyone the new message, except for the sender, who gets the original message.
You'll get a lot more mileage out of that strategy. By kicking players for using "bad words", you're raising their immaturity level by giving them a reason to think they're being slighted, AND educating them about your filters.
Second, are you letting players use the bad words, then kicking them? It's not clear to me from the description. Are you also cancelling the chat event so that the bad language doesn't get into chat?
Finally, since the vanilla /pardon command revokes a ban, it's confusing that you have a /cb-pardon command which doesn't remove bans. Maybe rename to /cb-forgive or /cb-reset?
If you don't already have it, it would be nice to include a default configuration which covers the most common English curses, for example turning "fuck" into "freak".
@Mokeomehit
Hrm, that looks like I removed the deprecated files /after/ releasing the beta. Updated version will be pushed in a minute.
Sorry: heres the errors 2012-03-02 08:44:32 [SEVERE] Error occurred while enabling Curseban v2.3.1b (Is it up to date?) java.lang.NoClassDefFoundError: org/bukkit/event/player/PlayerListener at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(Unknown Source) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$000(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:41) at org.bukkit.plugin.java.JavaPluginLoader.getClassByName(JavaPluginLoader.java:234) at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:37) at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:29) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at de.boreeas.curseban.main.CurseBan.onEnable(CurseBan.java:128) at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:215) at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:336) at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:363) at org.bukkit.craftbukkit.CraftServer.loadPlugin(CraftServer.java:250) at org.bukkit.craftbukkit.CraftServer.enablePlugins(CraftServer.java:232) at net.minecraft.server.MinecraftServer.t(MinecraftServer.java:374) at net.minecraft.server.MinecraftServer.a(MinecraftServer.java:361) at net.minecraft.server.MinecraftServer.init(MinecraftServer.java:187) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:425) at net.minecraft.server.ThreadServerApplication.run(SourceFile:490) Caused by: java.lang.ClassNotFoundException: org.bukkit.event.player.PlayerListener at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:41) at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:29) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 26 more