88 lines
3.3 KiB
Python
88 lines
3.3 KiB
Python
import teambot, sys, traceback, requests, random, words, imp, plugin, os
|
|
from titlecase import titlecase
|
|
|
|
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>",backronym="<word to backronym>",stevenuniverse="<help/fake-leak> [args]")
|
|
HELP["su"]=HELP["stevenuniverse"]
|
|
|
|
class MinerbotPhoenix(teambot.Handler):
|
|
def load_module(self,modname):
|
|
try:
|
|
fp, pathname, desc = imp.find_module(modname,["plugins"])
|
|
imp.load_module(modname,fp,pathname,desc)
|
|
except:
|
|
print("Unable to load plugin {}".format(modname))
|
|
traceback.print_exc()
|
|
def on_pubmsg(self,channel,nick,message):
|
|
for listener in plugin.listeners:
|
|
plugin.listeners[listener](self,channel,nick,message)
|
|
if not message.startswith(PREFIX): return
|
|
self.is_admin = self.event.source.userhost == BOTOP
|
|
args = message[len(PREFIX):].split(" ")
|
|
cmd = args.pop(0).lower()
|
|
self.cmd = cmd
|
|
if cmd in plugin.cmds:
|
|
try:
|
|
plugin.cmds[cmd](self,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_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_backronym(self,channel,nick,word):
|
|
result = []
|
|
for char in word:
|
|
result.append(random.choice(words.getWords("^{}.*".format(char))))
|
|
self.say(channel,nick+": "+titlecase(" ".join(result)))
|
|
def on_kwam(self,channel,nick,*a):
|
|
self.on_backronym(channel,nick,"kwam")
|
|
|
|
if __name__=="__main__":
|
|
words.loadDict("words")
|
|
# print(list(filter(lambda x: x.startswith("on_"),dir(MinerbotPhoenix))))
|
|
channels = "#khuxkm-bots".split()
|
|
bot = teambot.TeamBot(channels,"minerbot","localhost",chandler=MinerbotPhoenix)
|
|
for name in os.listdir("plugins"):
|
|
if name.endswith(".py"):
|
|
bot.handler.load_module(name[:-3])
|
|
bot.start()
|