[ChOp] Add !op and !deop; Add badword filtering
parent
ff3caea579
commit
122400bd17
|
@ -19,11 +19,14 @@ Required arguments are enclosed in { and }, optional arguments are enclosed in \
|
||||||
<tr> <td><b>calc.py</b></td> <td></td> <td></td> </tr>
|
<tr> <td><b>calc.py</b></td> <td></td> <td></td> </tr>
|
||||||
<tr> <td>!c {expression}</td> <td>Calculate expression using Google Calculator</td> <td>Anyone</td> </tr>
|
<tr> <td>!c {expression}</td> <td>Calculate expression using Google Calculator</td> <td>Anyone</td> </tr>
|
||||||
<tr> <td><b>chop.py</b></td> <td></td> <td></td> </tr>
|
<tr> <td><b>chop.py</b></td> <td></td> <td></td> </tr>
|
||||||
|
<tr> <td>!op {nick} [nick] ...</td> <td>Op nick</td> <td><i>Admins</i></td> </tr>
|
||||||
|
<tr> <td>!deop {nick} [nick] ...</td> <td>DeOp nick</td> <td><i>Admins</i></td> </tr>
|
||||||
<tr> <td>!voice {nick} [nick] ...</td> <td>Voice nick</td> <td><i>Admins</i></td> </tr>
|
<tr> <td>!voice {nick} [nick] ...</td> <td>Voice nick</td> <td><i>Admins</i></td> </tr>
|
||||||
<tr> <td>!devoice {nick} [nick] ...</td> <td>DeVoice nick</td> <td><i>Admins</i></td> </tr>
|
<tr> <td>!devoice {nick} [nick] ...</td> <td>DeVoice nick</td> <td><i>Admins</i></td> </tr>
|
||||||
<tr> <td>!ban {nick/mask} [nick/mask] ...</td> <td>Ban nick/mask</td> <td><i>Admins</i></td> </tr>
|
<tr> <td>!ban {nick/mask} [nick/mask] ...</td> <td>Ban nick/mask</td> <td><i>Admins</i></td> </tr>
|
||||||
<tr> <td>!unban {nick/mask} [nick/mask] ...</td> <td>UnBan nick/mask</td> <td><i>Admins</i></td> </tr>
|
<tr> <td>!unban {nick/mask} [nick/mask] ...</td> <td>UnBan nick/mask</td> <td><i>Admins</i></td> </tr>
|
||||||
<tr> <td>!kick {nick} [nick] ...</td> <td>Voice nick</td> <td><i>Admins</i></td> </tr>
|
<tr> <td>!kick {nick} [nick] ...</td> <td>Voice nick</td> <td><i>Admins</i></td> </tr>
|
||||||
|
<tr> <td>!badword {on/off}</td> <td>Enable/Disable badword functionality</td> <td><i>Admins</i></td> </tr>
|
||||||
<tr> <td><b>forumutils.py</b></td> <td></td> <td></td> </tr>
|
<tr> <td><b>forumutils.py</b></td> <td></td> <td></td> </tr>
|
||||||
<tr> <td>!sfu {searchstring}</td> <td>Search Minetest Forum users using searchstring</td> <td>Anyone</td> </tr>
|
<tr> <td>!sfu {searchstring}</td> <td>Search Minetest Forum users using searchstring</td> <td>Anyone</td> </tr>
|
||||||
<tr> <td>!sfulimit {user} {'reset'/number}</td> <td>Set search limit for user</td> <td><i>Admins</i></td> </tr>
|
<tr> <td>!sfulimit {user} {'reset'/number}</td> <td>Set search limit for user</td> <td><i>Admins</i></td> </tr>
|
||||||
|
|
77
chop.py
77
chop.py
|
@ -3,7 +3,33 @@
|
||||||
chop.py - Phenny Channel Administration Module
|
chop.py - Phenny Channel Administration Module
|
||||||
Copyright 2013, Sfan5
|
Copyright 2013, Sfan5
|
||||||
"""
|
"""
|
||||||
import os
|
import os, web, re
|
||||||
|
|
||||||
|
chop = {}
|
||||||
|
chop["badword_limit"] = 4
|
||||||
|
chop["badword_enabled"] = True
|
||||||
|
chop["victims"] = {} # for future use
|
||||||
|
badword_list = web.get("http://sfan5.minetest.net/badwords.txt")
|
||||||
|
|
||||||
|
def num_badwords(sentence):
|
||||||
|
badwords = 0
|
||||||
|
for bwl in badword_list.split("\n"):
|
||||||
|
arg = bwl.split(" ")
|
||||||
|
if len(arg) < 2: continue
|
||||||
|
arg[1] = arg[1].rstrip("\n\r")
|
||||||
|
if arg[0] == "regex": rgx = re.compile(arg[1])
|
||||||
|
for word in sentence.split(" "):
|
||||||
|
word = word.rstrip(",.;")
|
||||||
|
word = word.lstrip(",.;")
|
||||||
|
if arg[0] == "raw":
|
||||||
|
if word.lower() == arg[1].lower():
|
||||||
|
badwords += 1
|
||||||
|
elif arg[0] == "regex":
|
||||||
|
if not rgx.match(word) == None:
|
||||||
|
badwords += 1
|
||||||
|
if arg[0] == "regex": del rgx
|
||||||
|
|
||||||
|
return badwords
|
||||||
|
|
||||||
def voice(phenny, input):
|
def voice(phenny, input):
|
||||||
if not input.admin: return
|
if not input.admin: return
|
||||||
|
@ -82,3 +108,52 @@ def unban(phenny, input):
|
||||||
phenny.write(['MODE', input.sender, '-b', va], "")
|
phenny.write(['MODE', input.sender, '-b', va], "")
|
||||||
|
|
||||||
unban.commands = ['unban']
|
unban.commands = ['unban']
|
||||||
|
|
||||||
|
def op(phenny, input):
|
||||||
|
if not input.admin: return
|
||||||
|
if not input.sender.startswith('#'): return
|
||||||
|
# Can only be done in a channel by an admin
|
||||||
|
arg = input.group(2)
|
||||||
|
if not arg: return
|
||||||
|
arg = arg.split(" ")
|
||||||
|
for va in arg:
|
||||||
|
phenny.write(['MODE', input.sender, '+o', va], "")
|
||||||
|
|
||||||
|
op.commands = ['op']
|
||||||
|
|
||||||
|
def deop(phenny, input):
|
||||||
|
if not input.admin: return
|
||||||
|
if not input.sender.startswith('#'): return
|
||||||
|
# Can only be done in a channel by an admin
|
||||||
|
arg = input.group(2)
|
||||||
|
if not arg: return
|
||||||
|
arg = arg.split(" ")
|
||||||
|
for va in arg:
|
||||||
|
phenny.write(['MODE', input.sender, '-o', va], "")
|
||||||
|
|
||||||
|
deop.commands = ['deop']
|
||||||
|
|
||||||
|
def badword_watcher(phenny, input):
|
||||||
|
if not input.sender.startswith('#'): return
|
||||||
|
if not chop["badword_enabled"]: return
|
||||||
|
bwc = num_badwords(input.group(0))
|
||||||
|
if bwc > chop["badword_limit"]:
|
||||||
|
phenny.write(['KICK', input.sender, input.nick], "CHOP!") #"Stop using badwords!")
|
||||||
|
try:
|
||||||
|
chop["victims"][input.nick] += 1
|
||||||
|
except:
|
||||||
|
chop["victims"][input.nick] = 1
|
||||||
|
|
||||||
|
badword_watcher.priority = 'high'
|
||||||
|
badword_watcher.rule = r'.*'
|
||||||
|
|
||||||
|
def badword_ctrl(phenny, input):
|
||||||
|
if not input.admin: return
|
||||||
|
arg = input.group(2)
|
||||||
|
if not arg: return
|
||||||
|
if arg == "enable" or arg == "on":
|
||||||
|
chop["badword_enabled"] = True
|
||||||
|
elif arg == "disable" or arg == "off":
|
||||||
|
chop["badword_enabled"] = False
|
||||||
|
|
||||||
|
badword_ctrl.commands = ['badword']
|
||||||
|
|
Loading…
Reference in New Issue