Command names instead of numbers
This commit is contained in:
parent
4c693205a7
commit
9b00214dd3
|
@ -6,52 +6,55 @@ import shlex
|
||||||
class MatrixModule(BotModule):
|
class MatrixModule(BotModule):
|
||||||
def __init__(self, name):
|
def __init__(self, name):
|
||||||
super().__init__(name)
|
super().__init__(name)
|
||||||
self.commands = []
|
self.commands = {}
|
||||||
|
|
||||||
async def matrix_message(self, bot, room, event):
|
async def matrix_message(self, bot, room, event):
|
||||||
args = shlex.split(event.body)
|
args = shlex.split(event.body)
|
||||||
args.pop(0)
|
args.pop(0)
|
||||||
if len(args) >= 2:
|
# Message body possibilities:
|
||||||
# Get full command without using quotation marks
|
# ["run", "echo", "Hello", "world"]
|
||||||
command = f"{args[1]}"
|
|
||||||
for part_of_command in args[2:]:
|
|
||||||
command += f" {part_of_command}"
|
|
||||||
|
|
||||||
if len(args) == 2:
|
|
||||||
if args[0] == 'run':
|
if args[0] == 'run':
|
||||||
|
command_body = MatrixModule.stitch(args[1:])
|
||||||
bot.must_be_owner(event)
|
bot.must_be_owner(event)
|
||||||
out = self.run_command(args[1], event.sender, room.display_name)
|
out = self.run_command(command_body, event.sender, room.display_name)
|
||||||
await self.send_output(bot, room, out)
|
await self.send_output(bot, room, out)
|
||||||
if args[0] == 'remove':
|
# Message body possibilities:
|
||||||
|
# ["remove", "command_name"]
|
||||||
|
elif args[0] == 'remove':
|
||||||
|
command_name = args[1]
|
||||||
bot.must_be_owner(event)
|
bot.must_be_owner(event)
|
||||||
command_number = int(args[1])
|
if command_name in self.commands:
|
||||||
if self.commands[command_number] is not None:
|
await bot.send_text(room, f'Removed "{self.commands[command_name]}"')
|
||||||
await bot.send_text(room, f'Removed "{self.commands[command_number]}"')
|
del self.commands[command_name]
|
||||||
self.commands.pop(command_number)
|
|
||||||
bot.save_settings()
|
bot.save_settings()
|
||||||
else:
|
else:
|
||||||
await bot.send_text(room, f'Could not find command #{command_number}')
|
await bot.send_text(room, f'Could not find command "{command_name}"')
|
||||||
elif len(args) == 3:
|
# Message body possibilities:
|
||||||
if args[0] == 'add':
|
# ["add", "command_name", "echo", "Hello", "world"]
|
||||||
|
elif args[0] == 'add':
|
||||||
|
command_name = args[1]
|
||||||
|
command_body = MatrixModule.stitch(args[2:])
|
||||||
bot.must_be_owner(event)
|
bot.must_be_owner(event)
|
||||||
self.commands.append(command)
|
self.commands[command_name] = command_body
|
||||||
bot.save_settings()
|
bot.save_settings()
|
||||||
await bot.send_text(room, 'Command added.')
|
await bot.send_text(room, f'Added "{command_name}" -> "{command_body}".')
|
||||||
elif len(args) == 1:
|
# Message body possibilities:
|
||||||
if args[0] == 'list':
|
# ["list"]
|
||||||
|
elif args[0] == 'list':
|
||||||
if len(self.commands) == 0:
|
if len(self.commands) == 0:
|
||||||
await bot.send_text(room, "No known commands")
|
await bot.send_text(room, "No known commands")
|
||||||
else:
|
else:
|
||||||
list_commands = ""
|
known_commands = "Known commands:\n"
|
||||||
i = 0
|
for command_name in self.commands.keys():
|
||||||
for command_name in self.commands:
|
command_body = self.commands[command_name]
|
||||||
list_commands += f"\n - {i}. \"{command_name}\""
|
known_commands += f' - "{command_name}" -> "{command_body}"\n'
|
||||||
i += 1
|
await bot.send_text(room, known_commands)
|
||||||
await bot.send_text(room, 'Known commands: ' + list_commands)
|
# Message body possibilities:
|
||||||
|
# ["command_name"]
|
||||||
else:
|
else:
|
||||||
command_number = int(args[0])
|
command_name = args[0]
|
||||||
target_command = self.commands[command_number]
|
if command_name in self.commands:
|
||||||
if target_command is not None:
|
target_command = self.commands[command_name]
|
||||||
self.logger.debug(
|
self.logger.debug(
|
||||||
f"room: {room.display_name} sender: {event.sender} wants to run cmd {target_command}"
|
f"room: {room.display_name} sender: {event.sender} wants to run cmd {target_command}"
|
||||||
)
|
)
|
||||||
|
@ -73,6 +76,19 @@ class MatrixModule(BotModule):
|
||||||
if data.get('commands'):
|
if data.get('commands'):
|
||||||
self.commands = data['commands']
|
self.commands = data['commands']
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def stitch(body: list) -> str:
|
||||||
|
"""
|
||||||
|
This is used for stitching arguments again
|
||||||
|
Examples:
|
||||||
|
["echo", "Hello", "world"] -> "echo Hello world"
|
||||||
|
Args:
|
||||||
|
body: str[]
|
||||||
|
|
||||||
|
Returns: str
|
||||||
|
"""
|
||||||
|
return " ".join(body)
|
||||||
|
|
||||||
def run_command(self, command, user, roomname):
|
def run_command(self, command, user, roomname):
|
||||||
self.logger.info(f"Running command {command}..")
|
self.logger.info(f"Running command {command}..")
|
||||||
environment = {'MATRIX_USER': user, 'MATRIX_ROOM': roomname}
|
environment = {'MATRIX_USER': user, 'MATRIX_ROOM': roomname}
|
||||||
|
|
Loading…
Reference in New Issue