Improve bot command handling and add /id command (ref #52)
This commit is contained in:
+38
-5
@@ -90,7 +90,7 @@ class Bot(AbstractUser):
|
|||||||
|
|
||||||
async def handle_command_portal(self, portal, reply):
|
async def handle_command_portal(self, portal, reply):
|
||||||
if not config["bridge.authless_relaybot_portals"]:
|
if not config["bridge.authless_relaybot_portals"]:
|
||||||
return await reply("This bridge doesn't allow portal creation/invites from Telegram.")
|
return await reply("This bridge doesn't allow portal creation from Telegram.")
|
||||||
|
|
||||||
await portal.create_matrix_room(self)
|
await portal.create_matrix_room(self)
|
||||||
if portal.mxid:
|
if portal.mxid:
|
||||||
@@ -120,16 +120,49 @@ class Bot(AbstractUser):
|
|||||||
await portal.main_intent.invite(portal.mxid, user.mxid)
|
await portal.main_intent.invite(portal.mxid, user.mxid)
|
||||||
return await reply(f"Invited `{user.mxid}` to the portal.")
|
return await reply(f"Invited `{user.mxid}` to the portal.")
|
||||||
|
|
||||||
|
def handle_command_id(self, message, reply):
|
||||||
|
id = message.to_id
|
||||||
|
if isinstance(id, PeerChannel):
|
||||||
|
id = id.channel_id
|
||||||
|
else:
|
||||||
|
id = id.chat_id
|
||||||
|
return reply(str(id))
|
||||||
|
|
||||||
|
def match_command(self, text, command):
|
||||||
|
text = text.lower()
|
||||||
|
command = f"/{command.lower()}"
|
||||||
|
command_targeted = f"{command}@{self.username.lower()}"
|
||||||
|
|
||||||
|
is_plain_command = text == command or text == command_targeted
|
||||||
|
if is_plain_command:
|
||||||
|
return True
|
||||||
|
|
||||||
|
is_arg_command = text.startswith(command + " ") or text.startswith(command_targeted + " ")
|
||||||
|
if is_arg_command:
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
async def handle_command(self, message):
|
async def handle_command(self, message):
|
||||||
def reply(reply_text):
|
def reply(reply_text):
|
||||||
return self.client.send_message(message.to_id, reply_text, markdown=True)
|
return self.client.send_message(message.to_id, reply_text, markdown=True,
|
||||||
|
reply_to=message.id)
|
||||||
|
|
||||||
text = message.message
|
text = message.message
|
||||||
|
|
||||||
|
if self.match_command(text, "id"):
|
||||||
|
return await self.handle_command_id(message, reply)
|
||||||
|
|
||||||
portal = po.Portal.get_by_entity(message.to_id)
|
portal = po.Portal.get_by_entity(message.to_id)
|
||||||
if text == "/portal" or text == f"/portal@{self.username}":
|
|
||||||
|
if self.match_command(text, "portal"):
|
||||||
await self.handle_command_portal(portal, reply)
|
await self.handle_command_portal(portal, reply)
|
||||||
elif text.startswith("/invite ") or text.startswith(f"/invite@{self.username} "):
|
elif self.match_command(text, "invite"):
|
||||||
await self.handle_command_invite(portal, reply, mxid=text[text.index(" ") + 1:])
|
try:
|
||||||
|
mxid = text[text.index(" ") + 1:]
|
||||||
|
except ValueError:
|
||||||
|
mxid = ""
|
||||||
|
await self.handle_command_invite(portal, reply, mxid=mxid)
|
||||||
|
|
||||||
def handle_service_message(self, message):
|
def handle_service_message(self, message):
|
||||||
to_id = message.to_id
|
to_id = message.to_id
|
||||||
|
|||||||
Reference in New Issue
Block a user