bot6/commands.py

108 lines
4.2 KiB
Python

class Command:
def __init__(self,config):
self.config=config
self.commands=[]
def mesg(self,msg): self.util.mesg(msg)
def err_perm(self,level="admin"): self.mesg(f"Error: insufficient privileges, you lack {level} access")
def adm(func,*args, **kwargs):
global adm_cmds
try:
if func.__name__ not in adm_cmds and func.__name__!="_": adm_cmds.append(func.__name__)
except NameError:
adm_cmds=[]
if func.__name__ not in adm_cmds and func.__name__!="_": adm_cmds.append(func.__name__)
def _(self,*args, **kwargs):
if(func.__name__=="help"):
self.admin_commands=adm_cmds
#func.admin_commands=adm_cmds
if not self.admin:
self.err_perm()
else:
# return func(self)
return func(self,self.prefix,self.line,self.pm,self._line,self.admin,self.mesg)
return _
def cmd(func,*args, **kwargs):
global cmds
try:
if func.__name__ not in cmds and func.__name__!="_": cmds.append(func.__name__)
except NameError:
cmds=[]
if func.__name__ not in cmds and func.__name__!="_": cmds.append(func.__name__)
def _(self,*args, **kwargs):
if(func.__name__=="help"):
self.commands=cmds
#func.commands=cmds
if(func.__name__ not in self.config.cmd.disabled):
return func(self,self.prefix,self.line,self.pm,self._line,self.admin,self.mesg)
return _
def preq_cmd(self): #command prequisites / triggers
cmd=self.line
if cmd=="help" or cmd.startswith("help "):
command="help"
elif cmd.startswith("echo "):
command="echo"
elif cmd=="dbg" or cmd.startswith("dbg "):
command="dbg"
elif cmd=="dbg2" or cmd.startswith("dbg2 "):
command="dbg2"
else:return
if command not in self.config.cmd.disabled:
eval(f"self.{command}()")
@adm
def quit(self,prefix,cmd,pm,line,admin,mesg):
if admin and (cmd=="q" or cmd=="quit"):
self.util.quit()
elif is_adm and (cmd.startswith("q ") or cmd.startswith("quit ")):
self.util.quit(cmd.split(" ",1)[1])
@adm
def dbg2(self,prefix,cmd,pm,line,admin,mesg):
mesg(dir(self))
@adm
def dbg(self,prefix,cmd,pm,line,admin,mesg):
"""temporary debug command, subject to change A LOT""";
mesg(dir())
@cmd
def echo(self,prefix,cmd,pm,line,admin,mesg):
"""simple echo command"""
mesg(cmd.split(" ",1)[1])
@cmd
def help(self,prefix,cmd,pm,line,admin,mesg):
global adm_cmds
global cmds
disabled_commands=self.config.cmd.disabled
admin_commands,commands=[],[]
for i in ["exec","eval","reload"]:
if i not in adm_cmds:
adm_cmds.append(i)
for i in adm_cmds:
if i not in disabled_commands:
admin_commands.append(i)
for i in cmds:
if i not in admin_commands and i not in disabled_commands:
commands.append(i)
prefixes="\""+"\", \"".join(self.config.cmd.prefixes)+"\""
admin_commands=", ".join(admin_commands)
try: topic=cmd.split(" ",1)[1]
except IndexError: topic=None
try: self_nick=self.self_nick
except IndexError: self_nick=None
abs_topics={
"prefixes":f"available prefixes are {prefixes} or \"{self_nick}\""
}
if topic==None:
mesg(f"available topics: "+", ".join(list(abs_topics.keys())))
mesg(f"available commands: "+", ".join(commands))
if admin:
mesg(f"admin commands: {admin_commands}")
else:
try: mesg(f"{topic}: "+eval(f"self.{topic}.__doc__"))
except (TypeError,AttributeError) as e:
# mesg(str( e.__class__.__name__ ))
if topic in abs_topics:
mesg(f"{topic}: "+abs_topics[topic])
else:
mesg(f"no help available for \"{topic}\"...")
except Exception as e: mesg(str(e.__class__)+" "+str(e))