2021-09-16 17:35:06 +00:00
|
|
|
class Command:
|
2021-10-04 12:48:10 +00:00
|
|
|
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):
|
2021-10-03 21:36:22 +00:00
|
|
|
global adm_cmds
|
|
|
|
try:
|
2021-10-04 12:48:10 +00:00
|
|
|
if func.__name__ not in adm_cmds and func.__name__ != "_":
|
|
|
|
adm_cmds.append(func.__name__)
|
2021-10-03 21:36:22 +00:00
|
|
|
except NameError:
|
2021-10-04 12:48:10 +00:00
|
|
|
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
|
2021-10-03 21:36:22 +00:00
|
|
|
if not self.admin:
|
|
|
|
self.err_perm()
|
|
|
|
else:
|
2021-10-04 12:48:10 +00:00
|
|
|
# return func(self)
|
|
|
|
return func(
|
|
|
|
self,
|
|
|
|
self.prefix,
|
|
|
|
self.line,
|
|
|
|
self.pm,
|
|
|
|
self._line,
|
|
|
|
self.admin,
|
|
|
|
self.mesg,
|
|
|
|
)
|
|
|
|
|
2021-10-03 21:36:22 +00:00
|
|
|
return _
|
2021-10-04 12:48:10 +00:00
|
|
|
|
|
|
|
def cmd(func, *args, **kwargs):
|
2021-10-03 21:36:22 +00:00
|
|
|
global cmds
|
|
|
|
try:
|
2021-10-04 12:48:10 +00:00
|
|
|
if func.__name__ not in cmds and func.__name__ != "_":
|
|
|
|
cmds.append(func.__name__)
|
2021-10-03 21:36:22 +00:00
|
|
|
except NameError:
|
2021-10-04 12:48:10 +00:00
|
|
|
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,
|
|
|
|
)
|
|
|
|
|
2021-10-03 21:36:22 +00:00
|
|
|
return _
|
2021-10-04 12:48:10 +00:00
|
|
|
|
|
|
|
def preq_cmd(self): # command prequisites / triggers
|
|
|
|
cmd = self.line
|
|
|
|
if cmd == "help" or cmd.startswith("help "):
|
|
|
|
command = "help"
|
2021-10-03 21:36:22 +00:00
|
|
|
elif cmd.startswith("echo "):
|
2021-10-04 12:48:10 +00:00
|
|
|
command = "echo"
|
|
|
|
elif cmd == "dbg" or cmd.startswith("dbg "):
|
|
|
|
command = "dbg"
|
|
|
|
elif cmd == "dbg2" or cmd.startswith("dbg2 "):
|
|
|
|
command = "dbg2"
|
|
|
|
else:
|
|
|
|
return
|
2021-10-03 21:36:22 +00:00
|
|
|
if command not in self.config.cmd.disabled:
|
|
|
|
eval(f"self.{command}()")
|
2021-10-04 12:48:10 +00:00
|
|
|
|
2021-10-03 21:36:22 +00:00
|
|
|
@adm
|
2021-10-04 12:48:10 +00:00
|
|
|
def quit(self, prefix, cmd, pm, line, admin, mesg):
|
|
|
|
if admin and (cmd == "q" or cmd == "quit"):
|
2021-10-03 21:36:22 +00:00
|
|
|
self.util.quit()
|
|
|
|
elif is_adm and (cmd.startswith("q ") or cmd.startswith("quit ")):
|
2021-10-04 12:48:10 +00:00
|
|
|
self.util.quit(cmd.split(" ", 1)[1])
|
2021-10-03 21:36:22 +00:00
|
|
|
|
|
|
|
@adm
|
2021-10-04 12:48:10 +00:00
|
|
|
def dbg2(self, prefix, cmd, pm, line, admin, mesg):
|
2021-10-03 21:36:22 +00:00
|
|
|
mesg(dir(self))
|
2021-10-04 12:48:10 +00:00
|
|
|
|
2021-10-03 21:36:22 +00:00
|
|
|
@adm
|
2021-10-04 12:48:10 +00:00
|
|
|
def dbg(self, prefix, cmd, pm, line, admin, mesg):
|
|
|
|
"""temporary debug command, subject to change A LOT"""
|
2021-10-03 21:36:22 +00:00
|
|
|
mesg(dir())
|
2021-10-04 12:48:10 +00:00
|
|
|
|
2021-10-03 21:36:22 +00:00
|
|
|
@cmd
|
2021-10-04 12:48:10 +00:00
|
|
|
def echo(self, prefix, cmd, pm, line, admin, mesg):
|
2021-09-16 17:35:06 +00:00
|
|
|
"""simple echo command"""
|
2021-10-04 12:48:10 +00:00
|
|
|
mesg(cmd.split(" ", 1)[1])
|
|
|
|
|
2021-10-03 21:36:22 +00:00
|
|
|
@cmd
|
2021-10-04 12:48:10 +00:00
|
|
|
def help(self, prefix, cmd, pm, line, admin, mesg):
|
2021-10-03 21:36:22 +00:00
|
|
|
global adm_cmds
|
|
|
|
global cmds
|
2021-10-04 12:48:10 +00:00
|
|
|
disabled_commands = self.config.cmd.disabled
|
|
|
|
admin_commands, commands = [], []
|
|
|
|
for i in ["exec", "eval", "reload"]:
|
2021-10-03 21:36:22 +00:00
|
|
|
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)
|
2021-10-04 12:48:10 +00:00
|
|
|
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
|
2021-10-03 21:36:22 +00:00
|
|
|
|
2021-10-04 12:48:10 +00:00
|
|
|
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))
|
2021-09-16 17:35:06 +00:00
|
|
|
if admin:
|
|
|
|
mesg(f"admin commands: {admin_commands}")
|
|
|
|
else:
|
2021-10-04 12:48:10 +00:00
|
|
|
try:
|
|
|
|
mesg(f"{topic}: " + eval(f"self.{topic}.__doc__"))
|
|
|
|
except (TypeError, AttributeError) as e:
|
|
|
|
# mesg(str( e.__class__.__name__ ))
|
2021-09-16 17:35:06 +00:00
|
|
|
if topic in abs_topics:
|
2021-10-04 12:48:10 +00:00
|
|
|
mesg(f"{topic}: " + abs_topics[topic])
|
2021-09-16 17:35:06 +00:00
|
|
|
else:
|
2021-10-04 12:48:10 +00:00
|
|
|
mesg(f'no help available for "{topic}"...')
|
|
|
|
except Exception as e:
|
|
|
|
mesg(str(e.__class__) + " " + str(e))
|