add command groups
This commit is contained in:
parent
20af75d6c2
commit
9dd3680825
28
plugin.py
28
plugin.py
|
@ -2,6 +2,26 @@ cmds = {}
|
|||
help = {}
|
||||
listeners = {}
|
||||
|
||||
class CommandGroup:
|
||||
def __init__(self,f,default="help"):
|
||||
self.base = f
|
||||
self.subcmds = {}
|
||||
self.default = default
|
||||
def command(self,name):
|
||||
def _register_subcmd(f):
|
||||
self.subcmds[name]=f
|
||||
return f
|
||||
return _register_subcmd
|
||||
def __call__(self,bot,channel,nick,subcmd,*args):
|
||||
print("Calling base")
|
||||
if self.base(bot,channel,nick,subcmd,*args):
|
||||
return
|
||||
print("Calling subcommand {}".format(subcmd if subcmd in self.subcmds else self.default))
|
||||
if subcmd in self.subcmds:
|
||||
return self.subcmds[subcmd](bot,channel,nick,subcmd,*args)
|
||||
else:
|
||||
return self.subcmds[self.default](bot,channel,nick,subcmd,*args)
|
||||
|
||||
def clear():
|
||||
cmds.clear()
|
||||
help.clear()
|
||||
|
@ -14,6 +34,14 @@ def command(name,helptext="No help available for this command."):
|
|||
return func
|
||||
return _register_cmd
|
||||
|
||||
def group(name,helptext=""):
|
||||
def _register_group(f):
|
||||
gr = CommandGroup(f)
|
||||
cmds[name]=gr
|
||||
help[name]=helptext
|
||||
return gr
|
||||
return _register_group
|
||||
|
||||
def listener(name):
|
||||
def _register_cmd(func):
|
||||
listeners[name]=func
|
||||
|
|
|
@ -1,42 +1,73 @@
|
|||
import requests,plugin,subprocess
|
||||
from math import floor
|
||||
|
||||
@plugin.command("mbtilde","<operation> [args]")
|
||||
def on_mbtilde(bot,channel,nick,subcmd,*args):
|
||||
@plugin.group("mbtilde","<operation> [args]")
|
||||
def mbtilde(bot,channel,nick,subcmd,*args):
|
||||
for arg in args:
|
||||
if (arg.isdigit() and int(arg)>100 and subcmd!="factor"):
|
||||
bot.say(channel,"no u")
|
||||
return
|
||||
if subcmd=="ask":
|
||||
bot.say(channel,"!tilde")
|
||||
elif subcmd=="parrot":
|
||||
bot.say(channel," ".join(args))
|
||||
elif subcmd=="add" and len(args)==2:
|
||||
bot.say(channel,str(int(args[0])+int(args[1])))
|
||||
elif subcmd=="sub" and len(args)==2:
|
||||
bot.say(channel,str(int(args[0])-int(args[1])))
|
||||
elif subcmd=="mult" and len(args)==2:
|
||||
bot.say(channel,str(int(args[0])*int(args[1])))
|
||||
elif subcmd=="div" and len(args)==2:
|
||||
bot.say(channel,str(floor(int(args[0])/int(args[1]))))
|
||||
elif subcmd=="mod" and len(args)==2:
|
||||
bot.say(channel,str(int(args[0])%int(args[1])))
|
||||
elif subcmd=="pow" and len(args)==2:
|
||||
bot.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()
|
||||
bot.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:
|
||||
bot.say(channel,args[0])
|
||||
elif len(r["best"])==1:
|
||||
bot.say(channel,r["best"][0])
|
||||
else:
|
||||
bot.say(channel,r["best"][0])
|
||||
elif subcmd=="factor" and len(args)==1:
|
||||
bot.say(channel,subprocess.check_output(["/usr/bin/factor",str(args[0])]).decode("ascii").split(": ")[1].replace(" ",",").strip())
|
||||
return True
|
||||
if subcmd in "add sub mult div mod pow".split() and len(args)!=2:
|
||||
return True
|
||||
elif subcmd in "unscramble factor".split() and len(args)!=1:
|
||||
return True
|
||||
return False
|
||||
|
||||
@mbtilde.command("help")
|
||||
def help(bot,channel,nick,subcmd,*args):
|
||||
bot.say(channel,"{}: Usage: !{} <{}>".format(nick,bot.cmd,"|".join(sorted(list(mbtilde.subcmds.keys())))))
|
||||
|
||||
@mbtilde.command("ask")
|
||||
def ask(bot,channel,nick,subcmd,*args):
|
||||
bot.say(channel,"!tilde")
|
||||
|
||||
@mbtilde.command("parrot")
|
||||
def parrot(bot,channel,nick,subcmd,*args):
|
||||
bot.say(channel," ".join(args))
|
||||
|
||||
@mbtilde.command("add")
|
||||
def add(bot,channel,nick,subcmd,*args):
|
||||
bot.say(channel,str(int(args[0])+int(args[1])))
|
||||
|
||||
@mbtilde.command("sub")
|
||||
def sub(bot,channel,nick,subcmd,*args):
|
||||
bot.say(channel,str(int(args[0])-int(args[1])))
|
||||
|
||||
@mbtilde.command("mult")
|
||||
def mult(bot,channel,nick,subcmd,*args):
|
||||
bot.say(channel,str(int(args[0])*int(args[1])))
|
||||
|
||||
@mbtilde.command("div")
|
||||
def div(bot,channel,nick,subcmd,*args):
|
||||
bot.say(channel,str(floor(int(args[0])/int(args[1]))))
|
||||
|
||||
@mbtilde.command("mod")
|
||||
def mod(bot,channel,nick,subcmd,*args):
|
||||
bot.say(channel,str(int(args[0])%int(args[1])))
|
||||
|
||||
@mbtilde.command("pow")
|
||||
def pow(bot,channel,nick,subcmd,*args):
|
||||
bot.say(channel,str(int(args[0])**int(args[1])))
|
||||
|
||||
@mbtilde.command("alphabetize")
|
||||
def alphabetize(bot,channel,nick,subcmd,*args):
|
||||
num = int(args[0])-1
|
||||
texts = [args[x] for x in range(1,4)]
|
||||
texts.sort()
|
||||
bot.say(channel,texts[num])
|
||||
|
||||
@mbtilde.command("unscramble")
|
||||
def unscramble(bot,channel,nick,subcmd,*args):
|
||||
r = requests.get("http://anagramica.com/best/{}".format(args[0]))
|
||||
r.raise_for_status()
|
||||
r = r.json()
|
||||
if len(r["best"])==0:
|
||||
bot.say(channel,args[0])
|
||||
# elif len(r["best"])==1:
|
||||
# bot.say(channel,r["best"][0])
|
||||
else:
|
||||
bot.say(channel,r["best"][0])
|
||||
|
||||
@mbtilde.command("factor")
|
||||
def factor(bot,channel,nick,subcmd,*args):
|
||||
bot.say(channel,subprocess.check_output(["/usr/bin/factor",str(args[0])]).decode("ascii").split(": ")[1].replace(" ",",").strip())
|
||||
|
|
|
@ -1,32 +1,15 @@
|
|||
import markovuniverse,plugin,sys
|
||||
|
||||
SUBCMDS = dict()
|
||||
USAGE = dict()
|
||||
|
||||
def reg_subcmd(name,format=""):
|
||||
def _register(func):
|
||||
SUBCMDS[name]=func
|
||||
USAGE[name]=" ".join(filter(None,[name,format]))
|
||||
return _register
|
||||
|
||||
@plugin.command("stevenuniverse","<subcmd> [args]")
|
||||
@plugin.group("stevenuniverse","<subcmd> [args]")
|
||||
def stevenuniverse(bot,channel,nick,subcmd=None,*args):
|
||||
if not subcmd: subcmd = "help"
|
||||
if subcmd not in SUBCMDS: subcmd = "help"
|
||||
try:
|
||||
SUBCMDS[subcmd](bot,channel,nick,*args)
|
||||
except TypeError:
|
||||
bot.say("Usage: !{} {}".format(bot.cmd,USAGE[subcmd]))
|
||||
except:
|
||||
print("!{} {} {}".format(bot.cmd,subcmd," ".join(args)))
|
||||
raise
|
||||
return False
|
||||
|
||||
plugin.alias("su","stevenuniverse")
|
||||
|
||||
@reg_subcmd("help")
|
||||
@stevenuniverse.command("help")
|
||||
def help(bot,channel,nick,*a):
|
||||
bot.say(channel,"{}: Current !{} subcommands are {}".format(nick,bot.cmd,", ".join(SUBCMDS.keys())))
|
||||
bot.say(channel,"{}: Current !{} subcommands are {}".format(nick,bot.cmd,", ".join(stevenuniverse.subcmds.keys())))
|
||||
|
||||
@reg_subcmd("fake-leak")
|
||||
@stevenuniverse.command("fake-leak")
|
||||
def fakeleak(bot,channel,nick,*a):
|
||||
bot.say(channel,nick+": {} - {}".format(*markovuniverse.new_episode()))
|
||||
|
|
Loading…
Reference in New Issue