Add verbose option and logging system, as well as making preferences prettier
This commit is contained in:
parent
6925bd419c
commit
25eb076c50
27
bot.py
27
bot.py
|
@ -1,24 +1,43 @@
|
||||||
import teambot,network,prefer,time
|
import teambot,network,prefer,time,sys
|
||||||
|
from colorama import init, Fore, Style
|
||||||
|
ENDF = Style.RESET_ALL
|
||||||
|
|
||||||
ROOT = "/home/khuxkm/code/auditbot/"
|
ROOT = "/home/khuxkm/code/auditbot/"
|
||||||
|
|
||||||
opts = prefer.Preferences(ROOT+"prefs.json")
|
opts = prefer.Preferences(ROOT+"prefs.json")
|
||||||
|
|
||||||
|
VERBOSE = opts.get("verbose")
|
||||||
|
COLORS = {"*":"cyan","!":"yellow","X":"red"}
|
||||||
|
def say_log(s,p="*",c=None):
|
||||||
|
if c is None:
|
||||||
|
c = COLORS.get(p,None)
|
||||||
|
c = getattr(Fore,c.upper())
|
||||||
|
print(c+"[{}] {}".format(p,s)+ENDF)
|
||||||
|
|
||||||
bbj = network.BBJ(port=opts.get("port",7099))
|
bbj = network.BBJ(port=opts.get("port",7099))
|
||||||
|
say_log("Logging in with username {} and password {}...".format(opts.get("username"),opts.get("password")))
|
||||||
if not bbj.set_credentials(opts.get("username"),opts.get("password")):
|
if not bbj.set_credentials(opts.get("username"),opts.get("password")):
|
||||||
raise Exception("Incorrect details provided")
|
say_log("Incorrect details provided","X")
|
||||||
|
sys.exit(1)
|
||||||
if not opts.get("thread_id"):
|
if not opts.get("thread_id"):
|
||||||
|
say_log("Creating thread...")
|
||||||
thread = bbj.thread_create(opts.get("title"),opts.get("text"))
|
thread = bbj.thread_create(opts.get("title"),opts.get("text"))
|
||||||
opts.set("thread_id",thread["thread_id"])
|
opts.set("thread_id",thread["thread_id"])
|
||||||
|
say_log("...and BBJ is all set up!")
|
||||||
|
|
||||||
trigger = lambda x: "{}: ".format(x)
|
trigger = lambda x: "{}: ".format(x)
|
||||||
log = lambda x,e: e[len(trigger(x)):]
|
log = lambda x,e: e[len(trigger(x)):]
|
||||||
|
|
||||||
class AuditBot(teambot.Handler,teambot.CommandHandlerMixin):
|
class AuditBot(teambot.Handler,teambot.CommandHandlerMixin):
|
||||||
def handle_command(self,target,nick,text):
|
def handle_command(self,target,nick,text):
|
||||||
if nick.split("|")[0] in opts.get("sudoers") and text.startswith(trigger(self.bot.bot_nick)):
|
nick = nick.split("|")[0]
|
||||||
bbj.thread_reply(opts.get("thread_id"),opts.get("format").format(time.strftime("%Y-%m-%d %H:%M:%S"),nick,log(self.bot.bot_nick,text)))
|
if nick in opts.get("sudoers") and text.startswith(trigger(self.bot.bot_nick)):
|
||||||
|
say_log("{} is auditing \"{}\"".format(nick,log(self.bot.bot_nick,text)))
|
||||||
|
r = bbj.thread_reply(opts.get("thread_id"),opts.get("format").format(time.strftime("%Y-%m-%d %H:%M:%S"),nick,log(self.bot.bot_nick,text)))
|
||||||
|
say_log(repr(r))
|
||||||
|
|
||||||
if __name__=="__main__":
|
if __name__=="__main__":
|
||||||
channels = "#sudoers".split()
|
channels = "#sudoers".split()
|
||||||
bot = teambot.TeamBot(channels,"auditor","localhost",chandler=AuditBot)
|
bot = teambot.TeamBot(channels,"auditor","localhost",chandler=AuditBot)
|
||||||
|
say_log("Starting IRC bot...")
|
||||||
bot.start()
|
bot.start()
|
||||||
|
|
|
@ -2,7 +2,7 @@ import json
|
||||||
|
|
||||||
def toJSONFile(obj,filename):
|
def toJSONFile(obj,filename):
|
||||||
with open(filename,"w") as f:
|
with open(filename,"w") as f:
|
||||||
json.dump(obj,f)
|
json.dump(obj,f,indent="\t")
|
||||||
|
|
||||||
def fromJSONFile(filename):
|
def fromJSONFile(filename):
|
||||||
with open(filename) as f:
|
with open(filename) as f:
|
||||||
|
|
|
@ -1 +1,10 @@
|
||||||
{"username": "", "sudoers": [], "password": "","trigger":"{}: ","title":"audit log","text":"Accountability and whatever are our main principles. We'll try to post here if we do something important.","format":"log date {}:\n{} - \"{}\""}
|
{
|
||||||
|
"username": "",
|
||||||
|
"sudoers": [],
|
||||||
|
"password": "",
|
||||||
|
"trigger": "{}: ",
|
||||||
|
"title": "audit log",
|
||||||
|
"text": "Accountability and whatever are our main principles. We'll try to post here if we do something important.",
|
||||||
|
"format": "log date {}:\n{} - \"{}\"",
|
||||||
|
"verbose": false
|
||||||
|
}
|
Reference in New Issue