87 lines
3.3 KiB
Python
87 lines
3.3 KiB
Python
import teambot, sys, traceback, requests, random, notes, words
|
|
|
|
BOTOP = "~minerobber@127.0.0.1"
|
|
PREFIX = "!"
|
|
HELP = dict(admin="GO AWAY YOU DINKLEBERG",rollcall="hmmst",mbtilde="<ask/add/sub/mult/div/alphabetize/pow/unscramble> [args]",note="<target> <message>")
|
|
NOTEBOOK = notes.DatedNotebook()
|
|
NOTEBOOK.load("messages.json")
|
|
|
|
class MinerbotPhoenix(teambot.Handler):
|
|
def on_pubmsg(self,channel,nick,message):
|
|
if NOTEBOOK.checkNotes(nick):
|
|
for note in NOTEBOOK.readNotes(nick):
|
|
self.say(nick,note)
|
|
if not message.startswith(PREFIX): return
|
|
self.is_admin = self.event.source.userhost == BOTOP
|
|
args = message[len(PREFIX):].split(" ")
|
|
cmd = args.pop(0).lower()
|
|
if hasattr(self,"on_{}".format(cmd)):
|
|
try:
|
|
getattr(self,"on_{}".format(cmd))(channel,nick,*args)
|
|
except ValueError:
|
|
self.say(channel,"Usage: {}{} {}".format(PREFIX,cmd,HELP.get(cmd,"")))
|
|
except Exception as e:
|
|
errcls,err,tb = sys.exc_info()
|
|
self.say(channel,"ACCESS VIOLATION: "+traceback.format_exception_only(errcls,err)[0].strip())
|
|
print("On command `{}{} {}` by {}:".format(PREFIX,cmd," ".join(args),self.event.source))
|
|
traceback.print_exc()
|
|
def on_admin(self,channel,nick,subcmd,*args):
|
|
if not self.is_admin: return
|
|
if subcmd=="down":
|
|
self._bot.die("Stopping...")
|
|
def on_rollcall(self,channel,nick):
|
|
self.say(channel,nick+": Hey! I'm minerbot! Commands: !mbtilde, !note")
|
|
def on_mbtilde(self,channel,nick,subcmd,*args):
|
|
# if channel != "#bots":
|
|
# self.say(channel,"{}: tildes are only awarded in #bots.")
|
|
# return
|
|
if subcmd=="ask":
|
|
self.say(channel,"!tilde")
|
|
elif subcmd=="parrot":
|
|
self.say(channel," ".join(args))
|
|
elif subcmd=="add" and len(args)==2:
|
|
self.say(channel,str(int(args[0])+int(args[1])))
|
|
elif subcmd=="sub" and len(args)==2:
|
|
self.say(channel,str(int(args[0])-int(args[1])))
|
|
elif subcmd=="mult" and len(args)==2:
|
|
self.say(channel,str(int(args[0])*int(args[1])))
|
|
elif subcmd=="div" and len(args)==2:
|
|
self.say(channel,str(int(args[0])/int(args[1])))
|
|
elif subcmd=="mod" and len(args)==2:
|
|
self.say(channel,str(int(args[0])%int(args[1])))
|
|
elif subcmd=="pow" and len(args)==2:
|
|
self.say(channel,str(int(args[0])**int(args[1])))
|
|
elif subcmd=="alphabetize" and len(args)==4:
|
|
num = int(args[0])-1
|
|
texts = [args[x] for x in range(1,4)]
|
|
texts.sort()
|
|
self.say(channel,texts[num])
|
|
elif subcmd=="unscramble" and len(args)==1:
|
|
r = requests.get("http://anagramica.com/best/{}".format(args[0]))
|
|
r.raise_for_status()
|
|
r = r.json()
|
|
if len(r["best"])==0:
|
|
self.say(channel,args[0])
|
|
elif len(r["best"])==1:
|
|
self.say(channel,r["best"][0])
|
|
else:
|
|
# self.say(channel,random.choice(r["best"]))
|
|
self.say(channel,r["best"][0])
|
|
def on_note(self,channel,nick,target,*msg):
|
|
msg = " ".join(msg)
|
|
NOTEBOOK.addNote(target,nick,msg)
|
|
NOTEBOOK.save("messages.json")
|
|
def on_backronym(self,channel,nick,word):
|
|
result = []
|
|
for char in word:
|
|
result.append(random.choice(words.getWords("^{}.*".format(char))))
|
|
self.say(channel,nick+": "+(" ".join(result).title()))
|
|
def on_kwam(self,channel,nick,*a):
|
|
self.on_backronym(channel,nick,"kwam")
|
|
|
|
if __name__=="__main__":
|
|
words.loadDict("american-english-small")
|
|
channels = "#bots".split()
|
|
bot = teambot.TeamBot(channels,"minerbot","localhost",chandler=MinerbotPhoenix)
|
|
bot.start()
|