This commit is contained in:
2019-02-26 21:23:53 +01:00
parent 6788dd4abe
commit f1e6db8716

View File

@@ -110,6 +110,7 @@ class XMPPTelegram(ComponentXMPP):
self.process_command(iq)
else:
self.gate_reply_message(iq, 'Only commands accepted. Try !help for more info.')
elif iq['type'] == 'chat': # --- outgoing message ---
if jid in self.tg_connections and self.tg_connections[jid].is_user_authorized():
if iq['body'].startswith('!'): # it is command!
@@ -119,15 +120,19 @@ class XMPPTelegram(ComponentXMPP):
self.process_chat_group_command(iq)
else:
self.gate_reply_message(iq, 'Error.')
else: # -- normal message --
try:
tg_id = int(iq['to'].node[1:])
except ValueError:
self.gate_reply_message(iq, 'Invalid JID')
tg_peer = None
msg = iq['body']
reply_mid = None
if msg.startswith('>'): # quoting check
msg_lines = msg.split('\n')
matched = re.match(r'>[ ]*(?P<mid>[\d]+)[ ]*', msg_lines[0])
matched = re.match(r'>[ ]*(?P<mid>[\d]+)[ ]*', msg_lines[0]) #TODO: check regex
matched = matched.groupdict() if matched else {}
if 'mid' in matched: # citation
@@ -267,6 +272,7 @@ class XMPPTelegram(ComponentXMPP):
if parsed[0] == '!help':
self.gate_reply_message(iq, '=== Available gateway commands ===:\n\n'
'!help - Displays this text\n'
'!login +123456789 - Initiates Telegram session\n'
'!code 12345 - Entering one-time code during auth\n'
@@ -276,17 +282,22 @@ class XMPPTelegram(ComponentXMPP):
#'!delete_session 123 - Delete session\n'
'!logout - Deletes current Telegram session at gate\n'
'!reload_dialogs - Reloads dialogs list from Telegram\n\n'
'!add - Find and add Telegram contact. Any formats accepted (nickname or t.me link)\n\n'
'!join - Join Telegram conference via invite link \n\n'
'!import phone firstname lastname - Add Telegram contact with phone number \n\n'
'!group GroupName @InviteContact - Create a normal group\n'
'!supergroup SupergroupName - Create a supergroup\n'
'!channel ChannelName - Create a channel\n\n'
'!name first last - Change your name in Telegram\n'
'!about text - Change about text in Telegram\n'
'!username - Changes your @username in Telegram\n'
'!username - Changes your @username in Telegram\n\n'
'!roster - Lists yout TG roster\n\n'
'!roster - Lists yout TG roster\n'
)
elif parsed[0] == '!configure':
config_exclude = ['jid', 'tg_phone']
@@ -314,6 +325,7 @@ class XMPPTelegram(ComponentXMPP):
self.tg_connections[jid].send_code_request(parsed[1])
self.gate_reply_message(iq, 'Gate is connected. Telegram should send SMS message to you.')
self.gate_reply_message(iq, 'Please enter one-time code via !code 12345.')
elif parsed[0] in ['!code', '!password']: # --------------------------------------------------
if not self.tg_connections[jid].is_user_authorized():
if parsed[0] == '!code':
@@ -340,6 +352,7 @@ class XMPPTelegram(ComponentXMPP):
self.gate_reply_message(iq, 'Authentication failed.')
else:
self.gate_reply_message(iq, 'You are already authenticated. Please use !logout before new login.')
elif parsed[0] == '!list_sessions': # --------------------------------------------------
if not self.tg_connections[jid].is_user_authorized():
self.gate_reply_message(iq, 'Error.')
@@ -352,10 +365,12 @@ class XMPPTelegram(ComponentXMPP):
return
self.tg_process_dialogs(jid)
self.gate_reply_message(iq, 'Dialogs reloaded.')
elif parsed[0] == '!logout': # --------------------------------------------------
self.tg_connections[jid].log_out()
self.db_connection.execute("DELETE FROM accounts WHERE jid = ?", (jid,))
self.gate_reply_message(iq, 'Your Telegram session was deleted')
elif parsed[0] == '!add': # add user
result = self.tg_connections[jid].get_entity(parsed[1])
if type(result) == User:
@@ -387,30 +402,30 @@ class XMPPTelegram(ComponentXMPP):
self.tg_connections[jid].invoke(CreateChatRequest([groupuser], groupname))
self.tg_process_dialogs(jid)
elif parsed[0] == '!channel' and len(parsed) >= 2: # create new channel
elif parsed[0] == '!channel' and len(parsed) >= 2:
groupname = parsed[1]
self.tg_connections[jid].invoke(CreateChannelRequest(groupname, groupname, broadcast = True))
self.tg_process_dialogs(jid)
elif parsed[0] == '!supergroup' and len(parsed) >= 2: # create new channel
elif parsed[0] == '!supergroup' and len(parsed) >= 2:
groupname = parsed[1]
self.tg_connections[jid].invoke(CreateChannelRequest(groupname, groupname, megagroup = True))
self.tg_process_dialogs(jid)
elif parsed[0] == '!username' and len(parsed) >= 2: # create new channel
elif parsed[0] == '!username' and len(parsed) >= 2:
username = parsed[1]
self.tg_connections[jid].invoke(UpdateUsernameRequest(username))
elif parsed[0] == '!name' and len(parsed) >= 2: # create new channel
elif parsed[0] == '!name' and len(parsed) >= 2:
firstname = parsed[1]
lastname = parsed[2] if len(parsed) > 2 else None
self.tg_connections[jid].invoke(UpdateProfileRequest(first_name = firstname, last_name = lastname))
elif parsed[0] == '!about' and len(parsed) >= 2: # create new channel
elif parsed[0] == '!about' and len(parsed) >= 2:
about = iq['body'][7:]
self.tg_connections[jid].invoke(UpdateProfileRequest(about = about))
elif parsed[0] == '!import' and len(parsed) >= 3: # create new channel
elif parsed[0] == '!import' and len(parsed) >= 3:
phone = parsed[1]
firstname = parsed[2]
lastname = parsed[3] if len(parsed) > 3 else None
@@ -420,7 +435,10 @@ class XMPPTelegram(ComponentXMPP):
self.tg_process_dialogs(jid)
elif parsed[0] == '!roster': # create new channel
self.gate_reply_message(iq, str(self.contact_list[jid]))
response = "Telegram chats:\n"
for jid,tid in self.contact_list[jid].items():
response += "{}: {}\n".format(tid, jid)
self.gate_reply_message(iq, response))
else: # --------------------------------------------------
self.gate_reply_message(iq, 'Unknown command. Try !help for list all commands.')
@@ -431,6 +449,7 @@ class XMPPTelegram(ComponentXMPP):
if parsed[0] == '!help':
self.gate_reply_message(iq, '=== Available dialog commands ===:\n\n'
'!help - Displays this text\n'
'!s/find/replace - Edit last message. Use empty `find` to edit whole message and empty `replace` to delete it.\n'
'!block - Blacklists current user\n'