- 欢迎来到Minecraft插件百科!
- 对百科编辑一脸懵逼?帮助:快速入门带您快速熟悉百科编辑!
- 因近日遭受攻击,百科现已限制编辑,有意编辑请加入插件百科企鹅群:223812289
ChatControl Pro/WIKI/规则
规则系统是ChatControl最有用的系统: 你可以设置基于正则表达式的过滤器来捕获消息.
规则基于运算符 (想 'match', 'then deny'这样的东西, 这些运算符决定编程内容 - 你可以在 rules.txt 的顶部看到所有的运算符). 它们由两部分组成:规则和处理器. 规则可以使用正则表达式来捕获一条消息, 处理器则为一组行为.
任何添加新规则 / 过滤器?
打开你的 rules/ 文件夹,打开你想要编辑的规则文件 (rules.txt 应用于游戏的所有元素, 而 commands.txt 只对指令有效, chat.txt 只对聊天有效等.)然后用合适的文本编辑器进行编辑即可. 每条规则开头都要有 "match" ,结尾都有 "then" 运算符. 你可以查看已存在的规则,复制粘帖它们并进行修改.
制作有效的规则
以下示例为 "fuck" 的过滤器,它可以防止 f.u.c.k
甚至是 fuuu-ck
. 使其匹配并捕获这类词语很简单.
match \b(j+(\W|\d|_)*e+(\W|\d|_)*r+(\W|\d|_)*k+(\W|\d|_)*) handle as swear
'match' 运算符保护了正则表达式来检测玩家的消息.如果匹配成功则应用规则. 下一个运算符, 'handle as',告诉程序执行“swear”部分中handlers.yml
内所述的所有指令. 你可以手动给规则添加运算符,但是如果你想以同样的方式处理多调脏话的话,将指令存储在一个地方会更方便.
以上示例匹配了单词 'jerk' ,即使该单词被混淆成jeeerk
或 j.e-r_k
也都能检测到, 并且这条消息会被视为 'swear'处理 (你可以在handlers.yml 内配置这个).
禁止如 sh*t
和 shi*t
这样的单词
默认过滤器可以过滤如 shi*t, shi_t 和其他混淆形式的脏话, 但是过滤器无法捕获到中间的字母被替代的脏话.
你可以在 https://regex101.com/ 检测你的正则表达式是否能够成功地屏蔽脏话
白名单/允许的链接或IP
想要忽略你的服务器的IP地址被捕获, 请打开 rules/rules.txt并在 71 和 85行使用 'ignore string' 运算符,示例如下图.
a) 想要给一个IP白名单, 找到IP过滤器并添加到如上图所示位置即可.
b) 想要给一条指令白名单, 找到区域过滤器并用 | 添加指令and the domain itself at the end of the 'ignore string' operator that is there already. If your domain is "craftblock.com", you would add it as "|craftblock.com"
白名单语法
如 "tits" 的规则可能会捕获到如"but its"或相似的无辜的消息. 有两种方法来修复这个问题:
a) 添加 \b 字符到匹配规则内. 这可以使规则只匹配没有空格的消息或是消息前无空格的消息 (需要把 \b 放在前面) 或是后面(把 \b 放到match的最后):
match \btits
这会匹配 "tits" 而不是 "but its".
b) 使用 "ignore string" 运算符.这是最佳的解决方案:
match anal
ignore string analog|an all
这可以阻止两个短语 'analog' 和 'an all' .
空格文字白名单
If you wish to block a message containing spaces inside ("f u c k", or "come to m y s e r v e r . c o m"), use the 'before strip' operator. Insert it under each rule you want to affect and all whitespaces will be removed:
match <your rule>
before strip \s*
[...]
防止想Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ 这样的 unicode字符
Below you will find a rule that denies all special, unicode characters. Those are misused to bypass filters. Please keep in mind that non-english languages might use them as well. You can past it directly to rules/rules.txt.
match [^\u0000-\u007F]+
then warn Unicode is prohibited
then deny