128 lines
3.7 KiB
Python
128 lines
3.7 KiB
Python
from util import hook
|
|
|
|
|
|
# Default value.
|
|
# If True, all channels without a setting will have regex enabled
|
|
# If False, all channels without a setting will have regex disabled
|
|
default_enabled = True
|
|
|
|
db_ready = False
|
|
|
|
|
|
def db_init(db):
|
|
global db_ready
|
|
if not db_ready:
|
|
db.execute("CREATE TABLE IF NOT EXISTS regexchans(channel PRIMARY KEY, status)")
|
|
db.commit()
|
|
db_ready = True
|
|
|
|
|
|
def get_status(db, channel):
|
|
row = db.execute("SELECT status FROM regexchans WHERE channel = ?", [channel]).fetchone()
|
|
if row:
|
|
return row[0]
|
|
else:
|
|
return None
|
|
|
|
|
|
def set_status(db, channel, status):
|
|
row = db.execute("REPLACE INTO regexchans (channel, status) VALUES(?, ?)", [channel, status])
|
|
db.commit()
|
|
|
|
|
|
def delete_status(db, channel):
|
|
row = db.execute("DELETE FROM regexchans WHERE channel = ?", [channel])
|
|
db.commit()
|
|
|
|
|
|
def list_status(db):
|
|
row = db.execute("SELECT * FROM regexchans").fetchall()
|
|
result = None
|
|
for values in row:
|
|
if result:
|
|
result += u", {}: {}".format(values[0], values[1])
|
|
else:
|
|
result = u"{}: {}".format(values[0], values[1])
|
|
return result
|
|
|
|
|
|
@hook.sieve
|
|
def sieve_regex(bot, inp, func, kind, args):
|
|
db = bot.get_db_connection(inp.conn)
|
|
db_init(db)
|
|
if kind == 'regex' and inp.chan.startswith("#") and func.__name__ != 'factoid':
|
|
chanstatus = get_status(db, inp.chan)
|
|
if chanstatus != "ENABLED" and (chanstatus == "DISABLED" or not default_enabled):
|
|
print u"Denying input.raw={}, kind={}, args={} from {}".format(inp.raw, kind, args, inp.chan)
|
|
return None
|
|
print u"Allowing input.raw={}, kind={}, args={} from {}".format(inp.raw, kind, args, inp.chan)
|
|
|
|
return inp
|
|
|
|
|
|
@hook.command(permissions=["botcontrol"])
|
|
def enableregex(inp, db=None, message=None, notice=None, chan=None, nick=None):
|
|
db_init(db)
|
|
inp = inp.strip().lower()
|
|
if not inp:
|
|
channel = chan
|
|
elif inp.startswith("#"):
|
|
channel = inp
|
|
else:
|
|
channel = u"#{}".format(inp)
|
|
|
|
message(u"Enabling regex matching (youtube, etc) (issued by {})".format(nick), target=channel)
|
|
notice(u"Enabling regex matching (youtube, etc) in channel {}".format(channel))
|
|
set_status(db, channel, "ENABLED")
|
|
|
|
|
|
@hook.command(permissions=["botcontrol"])
|
|
def disableregex(inp, db=None, message=None, notice=None, chan=None, nick=None):
|
|
db_init(db)
|
|
inp = inp.strip().lower()
|
|
if not inp:
|
|
channel = chan
|
|
elif inp.startswith("#"):
|
|
channel = inp
|
|
else:
|
|
channel = u"#{}".format(inp)
|
|
|
|
message(u"Disabling regex matching (youtube, etc) (issued by {})".format(nick), target=channel)
|
|
notice(u"Disabling regex matching (youtube, etc) in channel {}".format(channel))
|
|
set_status(db, channel, "DISABLED")
|
|
|
|
|
|
@hook.command(permissions=["botcontrol"])
|
|
def resetregex(inp, db=None, message=None, notice=None, chan=None, nick=None):
|
|
db_init(db)
|
|
inp = inp.strip().lower()
|
|
if not inp:
|
|
channel = chan
|
|
elif inp.startswith("#"):
|
|
channel = inp
|
|
else:
|
|
channel = u"#{}".format(inp)
|
|
|
|
message(u"Resetting regex matching setting (youtube, etc) (issued by {})".format(nick), target=channel)
|
|
notice(u"Resetting regex matching setting (youtube, etc) in channel {}".format(channel))
|
|
delete_status(db, channel)
|
|
|
|
|
|
@hook.command(permissions=["botcontrol"])
|
|
def regexstatus(inp, db=None, chan=None):
|
|
db_init(db)
|
|
inp = inp.strip().lower()
|
|
if not inp:
|
|
channel = chan
|
|
elif inp.startswith("#"):
|
|
channel = inp
|
|
else:
|
|
channel = u"#{}".format(inp)
|
|
|
|
return u"Regex status for {}: {}".format(channel, get_status(db, channel))
|
|
|
|
|
|
@hook.command(permissions=["botcontrol"])
|
|
def listregex(inp, db=None):
|
|
db_init(db)
|
|
return list_status(db)
|