From d926f974b75d4a12316c9f1aef4a7d40875873e7 Mon Sep 17 00:00:00 2001 From: drymer Date: Sun, 29 Jan 2017 02:47:46 +0000 Subject: [PATCH 01/11] Add name when replying --- jabbergram.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/jabbergram.py b/jabbergram.py index fc63d65..1a4186d 100755 --- a/jabbergram.py +++ b/jabbergram.py @@ -86,14 +86,14 @@ class Jabbergram(sleekxmpp.ClientXMPP): def read_tg(self): update_id = 0 - name = '' - # wait until http_upload has been tested sleep(5) while True: try: for update in self.bot.getUpdates(offset=update_id, timeout=10): + name = '' + if not self.group_name: self.group_name = update.message.chat.username if update.message.audio or update.message.document or \ @@ -161,7 +161,8 @@ class Jabbergram(sleekxmpp.ClientXMPP): update.message.reply_to_message.text else: message = update.message.reply_to_message.text - message = message + ' <- ' + update.message.text + message = message + ' <- ' + name + ':' + update.\ + message.text else: message = update.message.text From 9e4e5d38529f0e407a1ce719adb6d2865debba6f Mon Sep 17 00:00:00 2001 From: drymer Date: Wed, 22 Feb 2017 17:12:11 +0000 Subject: [PATCH 02/11] Fix the "answer" option and some minor things --- README.md | 2 +- README.org | 2 +- jabbergram.py | 48 ++++++++++++++++++++++-------------------------- 3 files changed, 24 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 1bd87d8..2de86a8 100644 --- a/README.md +++ b/README.md @@ -145,7 +145,7 @@ Este programa es simple, no tiene ni un menú de `ayuda`. Lo primero que hay que NombreDelBot # Ahora hay que pulsar desactivar -La opción `/setprivacy` es para hacer que el robot pueda leer todo lo que se dice en el grupo, no sólo cuando se utilizan los comandos. Es necesario para hacer que `jabbergram` funcione. Más información sobre la creación los bots de `Telegrama` en su [página web](https://core.telegram.org/bots). +La opción `/setprivacy` es para hacer que el robot pueda leer todo lo que se dice en el grupo, no sólo cuando se utilizan los comandos. Es necesario para hacer que `jabbergram` funcione. Más información sobre la creación los bots de `Telegram` en su [página web](https://core.telegram.org/bots). A continuación, hay que crear un archivo de configuración, que llamaremos `config.ini`. En ese archivo, introduce los siguientes parámetros: diff --git a/README.org b/README.org index cd9eb94..a39df00 100644 --- a/README.org +++ b/README.org @@ -111,7 +111,7 @@ # Ahora hay que pulsar desactivar #+END_SRC - La opción =/setprivacy= es para hacer que el robot pueda leer todo lo que se dice en el grupo, no sólo cuando se utilizan los comandos. Es necesario para hacer que =jabbergram= funcione. Más información sobre la creación los bots de =Telegrama= en su [[https://core.telegram.org/bots][página web]]. + La opción =/setprivacy= es para hacer que el robot pueda leer todo lo que se dice en el grupo, no sólo cuando se utilizan los comandos. Es necesario para hacer que =jabbergram= funcione. Más información sobre la creación los bots de =Telegram= en su [[https://core.telegram.org/bots][página web]]. A continuación, hay que crear un archivo de configuración, que llamaremos =config.ini=. En ese archivo, introduce los siguientes parámetros: diff --git a/jabbergram.py b/jabbergram.py index 1a4186d..d454cd7 100755 --- a/jabbergram.py +++ b/jabbergram.py @@ -49,7 +49,6 @@ class Jabbergram(sleekxmpp.ClientXMPP): self.groups = groups.split() self.bot = telegram.Bot(self.token) self.telegram_users = {} - self.group_name = {} # initialize http upload on a thread since its needed to be connected # to xmpp @@ -93,9 +92,20 @@ class Jabbergram(sleekxmpp.ClientXMPP): for update in self.bot.getUpdates(offset=update_id, timeout=10): name = '' + size = 0 + + if update.message.from_user: + user = str(update.message.from_user.username) + + # sometimes there's no user. weird, but it happens + if not user: + user = str(update.message.from_user.first_name) + + # even weirder is that username or first_name exists + # let's take last_name + if not user: + user = str(update.message.from_user.last_name) - if not self.group_name: - self.group_name = update.message.chat.username if update.message.audio or update.message.document or \ update.message.photo or update.message.video \ or update.message.voice or update.message.sticker: @@ -121,7 +131,7 @@ class Jabbergram(sleekxmpp.ClientXMPP): d_file = update.message.voice ext = '.ogg' size = d_file.file_size - if self.max_size >= size: + if self.max_size >= int(size): t_file = self.bot.getFile(d_file.file_id) f_name = '/tmp/' + d_file.file_id + ext t_file.download(f_name) @@ -139,7 +149,7 @@ class Jabbergram(sleekxmpp.ClientXMPP): message = 'A file has been uploaded to Telegr'\ 'am, but is too big.' else: - message = 'A file has been uploaderd to Telegram,'\ + message = 'A file has been uploaded to Telegram,'\ 'but the XMPP server doesn\'t support H'\ 'TTP Upload.' @@ -161,29 +171,16 @@ class Jabbergram(sleekxmpp.ClientXMPP): update.message.reply_to_message.text else: message = update.message.reply_to_message.text - message = message + ' <- ' + name + ':' + update.\ - message.text else: message = update.message.text - user = str(update.message.from_user.username) - - # sometimes there's no user. weird, but it happens - if not user: - user = str(update.message.from_user.first_name) - - # even weirder is that username or first_name exists - # let's take last_name - if not user: - user = str(update.message.from_user.last_name) - - # Don't add name first if it's a reply if name: - msg = message + msg = message + ' <- ' + user + ": " + update.message.text else: msg = user + ": " + message chat = '@' + update.message.chat.username + if chat not in self.groups: chat = str(update.message.chat_id) @@ -195,15 +192,14 @@ class Jabbergram(sleekxmpp.ClientXMPP): if user not in self.telegram_users[chat]: self.telegram_users[chat] += ' ' + user else: - self.telegram_users[chat] = ' ' + user if message == '.users': - self.say_users('telegram', muc, chat) + self.say_users('telegram', receiver, chat) elif message == '.help': - self.say_help('telegram', muc, chat) + self.say_help('telegram', receiver, chat) elif message == '.where': - self.say_where('telegram', muc, chat) + self.say_where('telegram', receiver, chat) else: self.send_message(mto=receiver, mbody=msg, mtype='groupchat') @@ -292,8 +288,8 @@ class Jabbergram(sleekxmpp.ClientXMPP): def say_where(self, service, muc, group): if service == 'xmpp': - if self.group_name: - msg = 'I\'m on http://telegram.me/' + self.group_name + '.' + if '@' in group: + msg = 'I\'m on http://telegram.me/' + group.split('@')[1] + '.' else: msg = 'Sorry, I\'m on a private group, you\'ll have to ask fo'\ 'r an invitation.' From cdb54ef612afebd0a95c058ce1ffde889e452aa1 Mon Sep 17 00:00:00 2001 From: drymer Date: Sun, 30 Apr 2017 21:40:31 +0200 Subject: [PATCH 03/11] Fix typo --- README.md | 2 +- README.org | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2de86a8..e116775 100644 --- a/README.md +++ b/README.md @@ -130,7 +130,7 @@ Clonar el repositorio: $ git clone git://daemons.cf/jabbergram $ cd jabbergram - $ su -c "pip3 instalar -r requirements.txt" + $ su -c "pip3 install -r requirements.txt" $ su -c "python3 setup.py install" ### Configuración diff --git a/README.org b/README.org index a39df00..9c7e5ef 100644 --- a/README.org +++ b/README.org @@ -95,7 +95,7 @@ #+BEGIN_SRC sh $ git clone git://daemons.cf/jabbergram $ cd jabbergram - $ su -c "pip3 instalar -r requirements.txt" + $ su -c "pip3 install -r requirements.txt" $ su -c "python3 setup.py install" #+END_SRC *** Configuración From ed6d8a142ef5f17195dc4de2e4627a41abaa208c Mon Sep 17 00:00:00 2001 From: drymer Date: Sun, 30 Apr 2017 21:42:17 +0200 Subject: [PATCH 04/11] Make it clearer --- README.md | 2 +- README.org | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e116775..dfebf57 100644 --- a/README.md +++ b/README.md @@ -173,7 +173,7 @@ Sólo puede haber un archivo de configuración. Esto es debido a que sólo puede token = jabbergramBotTokken group = -10293943920 120301203 -De este modo, el muc "exampleMuc@muc.nope.org" se sincronizará con el grupo "-10293943920", y "segunda@muc.sip.org" con "120301203". +De este modo, el muc "exampleMuc@muc.nope.org" se sincronizará con el grupo "-10293943920", y "segunda@muc.sip.org" con "120301203". Hecho esto, solo queda ejecutarlo en la terminal: `python3 jabbergram.py config.ini`. Hay que tenerla activa siempre que se quiera que funcione, obviamente. ### Licencia diff --git a/README.org b/README.org index 9c7e5ef..038c5b1 100644 --- a/README.org +++ b/README.org @@ -141,7 +141,7 @@ group = -10293943920 120301203 #+END_SRC -De este modo, el muc "exampleMuc@muc.nope.org" se sincronizará con el grupo "-10293943920", y "segunda@muc.sip.org" con "120301203". +De este modo, el muc "exampleMuc@muc.nope.org" se sincronizará con el grupo "-10293943920", y "segunda@muc.sip.org" con "120301203". Hecho esto, solo queda ejecutarlo en la terminal: =python3 jabbergram.py config.ini=. Hay que tenerla activa siempre que se quiera que funcione, obviamente. *** Licencia #+BEGIN_SRC text This program is free software: you can redistribute it and / or modify From c5505f8eef53caee82e95eac08b86039a5c56ef4 Mon Sep 17 00:00:00 2001 From: drymer Date: Sun, 30 Apr 2017 22:11:11 +0200 Subject: [PATCH 05/11] Upload stickers with http upload And fix minor things --- jabbergram.py | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/jabbergram.py b/jabbergram.py index d454cd7..4161c1b 100755 --- a/jabbergram.py +++ b/jabbergram.py @@ -5,6 +5,7 @@ try: import requests except: print("HTTP Upload support disabled.") + import sleekxmpp import telegram import configparser @@ -26,8 +27,9 @@ class Request(ElementBase): interfaces = set(('filename', 'size')) sub_interfaces = interfaces + class Jabbergram(sleekxmpp.ClientXMPP): - def __init__(self, jid, password, rooms, nick, token, groups): + def __init__(self, jid, password, rooms, nick, token, groups, verify_ssl): # XMPP super(Jabbergram, self).__init__(jid, password) self.add_event_handler('session_start', self.start) @@ -38,6 +40,7 @@ class Jabbergram(sleekxmpp.ClientXMPP): self.token = token self.xmpp_users = {} self.jid = jid + self.verify_ssl = verify_ssl for muc in self.muc_rooms: self.add_event_handler("muc::%s::got_online" % muc, @@ -85,6 +88,7 @@ class Jabbergram(sleekxmpp.ClientXMPP): def read_tg(self): update_id = 0 + # wait until http_upload has been tested sleep(5) while True: @@ -110,6 +114,7 @@ class Jabbergram(sleekxmpp.ClientXMPP): update.message.photo or update.message.video \ or update.message.voice or update.message.sticker: # proceed only if http upload is available + if self.max_size is not None: if update.message.audio: d_file = update.message.audio @@ -131,13 +136,18 @@ class Jabbergram(sleekxmpp.ClientXMPP): d_file = update.message.voice ext = '.ogg' size = d_file.file_size + elif update.message.sticker: + d_file = update.message.sticker + ext = '.png' + size = d_file.file_size if self.max_size >= int(size): t_file = self.bot.getFile(d_file.file_id) f_name = '/tmp/' + d_file.file_id + ext t_file.download(f_name) url = self.http_upload.upload( - self.component, - '', f_name, size) + self.component, + self.verify_ssl, + f_name, size) if update.message.caption: message = update.message.caption + ' ' @@ -158,7 +168,7 @@ class Jabbergram(sleekxmpp.ClientXMPP): elif update.message.left_chat_member: message = 'This user has left the group.' elif update.message.new_chat_title: - message = 'The group\'s title has changed: '+ \ + message = 'The group\'s title has changed: ' + \ update.message.new_chat_title elif update.message.new_chat_photo: message = 'The group\'s photo has changed.' @@ -175,7 +185,8 @@ class Jabbergram(sleekxmpp.ClientXMPP): message = update.message.text if name: - msg = message + ' <- ' + user + ": " + update.message.text + msg = message + ' <- ' + user + ": " + \ + update.message.text else: msg = user + ": " + message @@ -353,10 +364,10 @@ class Jabbergram(sleekxmpp.ClientXMPP): xml = minidom.parseString(str(send)) put_url = xml.getElementsByTagName('put')[0].firstChild.data - if verify_ssl == '' or verif_ssl == 'False': + if verify_ssl == 'False': req = requests.put(put_url, data=open(u_file, 'rb'), verify=False) - else: + elif verify_ssl == '': req = requests.put(put_url, data=open(u_file, 'rb')) return put_url @@ -383,8 +394,10 @@ if __name__ == '__main__': nick = config[3] token = config[4] groups = config[5] + verify_ssl = config[6] - xmpp = Jabbergram(jid, password, muc_rooms, nick, token, groups) + xmpp = Jabbergram(jid, password, muc_rooms, nick, token, groups, + verify_ssl) xmpp.register_plugin('xep_0045') if xmpp.connect(): From 1453f3955f21531ea433dcb799ce4cdd0848b14a Mon Sep 17 00:00:00 2001 From: drymer Date: Sat, 8 Jul 2017 19:51:07 +0200 Subject: [PATCH 06/11] Change repository's url --- README.md | 4 ++-- README.org | 4 ++-- README.rst | 4 ++-- setup.py | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index dfebf57..3bf7360 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ Install via pip: Clone the repository: - $ git clone git://daemons.cf/jabbergram + $ git clone https://git.daemons.it/drymer/jabbergram $ cd jabbergram $ su -c "pip3 install -r requirements.txt" $ su -c "python3 setup.py install" @@ -128,7 +128,7 @@ Instalar a través de `pip`: Clonar el repositorio: - $ git clone git://daemons.cf/jabbergram + $ git clone https://git.daemons.it/drymer/jabbergram $ cd jabbergram $ su -c "pip3 install -r requirements.txt" $ su -c "python3 setup.py install" diff --git a/README.org b/README.org index 038c5b1..9a33ca7 100644 --- a/README.org +++ b/README.org @@ -14,7 +14,7 @@ Clone the repository: #+BEGIN_SRC sh - $ git clone git://daemons.cf/jabbergram + $ git clone https://git.daemons.it/drymer/jabbergram $ cd jabbergram $ su -c "pip3 install -r requirements.txt" $ su -c "python3 setup.py install" @@ -93,7 +93,7 @@ Clonar el repositorio: #+BEGIN_SRC sh - $ git clone git://daemons.cf/jabbergram + $ git clone https://git.daemons.it/drymer/jabbergram $ cd jabbergram $ su -c "pip3 install -r requirements.txt" $ su -c "python3 setup.py install" diff --git a/README.rst b/README.rst index d54ef65..146091d 100644 --- a/README.rst +++ b/README.rst @@ -31,7 +31,7 @@ Clone the repository: .. code-block:: sh :number-lines: 0 - $ git clone git://daemons.cf/jabbergram + $ git clone https://git.daemons.it/drymer/jabbergram $ cd jabbergram $ su -c "pip3 install -r requirements.txt" $ su -c "python3 setup.py install" @@ -135,7 +135,7 @@ Clonar el repositorio: .. code-block:: sh :number-lines: 0 - $ git clone git://daemons.cf/jabbergram + $ git clone https://git.daemons.it/drymer/jabbergram $ cd jabbergram $ su -c "pip3 instalar -r requirements.txt" $ su -c "python3 setup.py install" diff --git a/setup.py b/setup.py index c4ea6b1..728d839 100644 --- a/setup.py +++ b/setup.py @@ -10,8 +10,8 @@ setup(name='jabbergram', long_description=open('README.rst', encoding='utf-8').read(), author='drymer', author_email='drymer@autistici.org', - url='http://daemons.cf/cgit/jabbergram/about/', - download_url='http://daemons.cf/cgit/jabbergram/snapshot/jabbergram-' + VERSION + '.tar.gz', + url='http://git.daemons.it/drymer/jabbergram/about/', + download_url='https://git.daemons.it/drymer/jabbergram/archive/' + VERSION + '.tar.gz', scripts=['jabbergram.py'], license="GPLv3", install_requires=[ From 7f2c2513cf7b8d2caa201fcb4425c2e34f8af48c Mon Sep 17 00:00:00 2001 From: drymer Date: Sat, 8 Jul 2017 21:45:07 +0200 Subject: [PATCH 07/11] Rearrange imports to adapt it to pep8 --- jabbergram.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/jabbergram.py b/jabbergram.py index 4161c1b..ca59950 100755 --- a/jabbergram.py +++ b/jabbergram.py @@ -1,23 +1,23 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- +import configparser +import logging +from sys import argv +from threading import Thread +from time import sleep +from xml.dom import minidom + +import sleekxmpp +import telegram +from sleekxmpp.xmlstream.stanzabase import ElementBase +from telegram.error import NetworkError, Unauthorized + + try: import requests except: - print("HTTP Upload support disabled.") - -import sleekxmpp -import telegram -import configparser -from threading import Thread -from queue import Queue -from telegram.error import NetworkError, Unauthorized -from time import sleep -from sys import argv -from sys import exit -from sleekxmpp.xmlstream.stanzabase import ElementBase -from sleekxmpp.stanza.iq import Iq -from xml.dom import minidom + logging.error("HTTP Upload support disabled.") class Request(ElementBase): From fca55ee84b4a6a36f29b3baa7195a75c327596b2 Mon Sep 17 00:00:00 2001 From: drymer Date: Sat, 8 Jul 2017 21:46:10 +0200 Subject: [PATCH 08/11] Add docstrings --- jabbergram.py | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/jabbergram.py b/jabbergram.py index ca59950..035352b 100755 --- a/jabbergram.py +++ b/jabbergram.py @@ -21,6 +21,7 @@ except: class Request(ElementBase): + """Special class to create http_upload requests.""" namespace = 'urn:xmpp:http:upload' name = 'request' plugin_attrib = 'request' @@ -29,7 +30,13 @@ class Request(ElementBase): class Jabbergram(sleekxmpp.ClientXMPP): + """Main object.""" def __init__(self, jid, password, rooms, nick, token, groups, verify_ssl): + """ + Executed when the class is initialized. It adds session handlers, muc + handlers and send the telegram reading function and the HTTP upload + initializing functions to their respective threads. + """ # XMPP super(Jabbergram, self).__init__(jid, password) self.add_event_handler('session_start', self.start) @@ -68,6 +75,11 @@ class Jabbergram(sleekxmpp.ClientXMPP): 'connected') def init_http(self): + """ + Initializes HTTP upload support. Sends a discovery stanza to the server + to find the HTTP upload component and asks for the max size a file can + be. + """ self.http_upload = self.HttpUpload(self) self.component = self.http_upload.discovery() @@ -87,6 +99,7 @@ class Jabbergram(sleekxmpp.ClientXMPP): self.max_size = None def read_tg(self): + """Main telegram function.""" update_id = 0 # wait until http_upload has been tested @@ -229,6 +242,7 @@ class Jabbergram(sleekxmpp.ClientXMPP): print(e) def start(self, event): + """Does some initial setup for XMPP and joins all mucs.""" self.get_roster() self.send_presence() @@ -236,6 +250,7 @@ class Jabbergram(sleekxmpp.ClientXMPP): self.plugin['xep_0045'].joinMUC(muc, self.nick, wait=True) def muc_message(self, msg): + """Muc message's handler.""" muc_room = str(msg['from']).split('/')[0] index = self.muc_rooms.index(muc_room) tg_group = self.groups[index] @@ -251,6 +266,7 @@ class Jabbergram(sleekxmpp.ClientXMPP): self.bot.sendMessage(tg_group, text=message) def muc_online(self, presence): + """Muc presence's handler.""" user = presence['muc']['nick'] muc = presence['from'].bare @@ -261,6 +277,7 @@ class Jabbergram(sleekxmpp.ClientXMPP): self.xmpp_users[muc] = [presence['muc']['nick']] def muc_offline(self, presence): + """Muc presence's handler.""" user = presence['muc']['nick'] muc = presence['from'].bare @@ -268,6 +285,7 @@ class Jabbergram(sleekxmpp.ClientXMPP): self.xmpp_users[muc].remove(presence['muc']['nick']) def say_users(self, service, muc, group): + """It returns the users on XMPP or Telegram.""" if service == 'xmpp': if group in self.telegram_users: tg_users = self.telegram_users[group] @@ -290,6 +308,7 @@ class Jabbergram(sleekxmpp.ClientXMPP): self.bot.sendMessage(group, text=msg) def say_help(self, service, muc, group): + """Help command.""" msg = 'Hi, I\'m ' + self.bot.username + '. I have two commands : ".us'\ 'ers" and ".where".' if service == 'xmpp': @@ -298,6 +317,7 @@ class Jabbergram(sleekxmpp.ClientXMPP): self.bot.sendMessage(group, text=msg) def say_where(self, service, muc, group): + """Returns Telegram's group location if it's public.""" if service == 'xmpp': if '@' in group: msg = 'I\'m on http://telegram.me/' + group.split('@')[1] + '.' @@ -310,11 +330,13 @@ class Jabbergram(sleekxmpp.ClientXMPP): self.bot.sendMessage(group, text=msg) class HttpUpload(): + """HTTP upload main class.""" def __init__(self, parent_self): + """Init... Yep.""" self.parent_self = parent_self def discovery(self): - + """Discovers all server's components.""" disco = sleekxmpp.basexmpp.BaseXMPP.Iq(self.parent_self) disco['query'] = "http://jabber.org/protocol/disco#items" disco['type'] = 'get' @@ -338,17 +360,18 @@ class Jabbergram(sleekxmpp.ClientXMPP): return http_upload_component def disco_info(self, component): - + """Discovers HTTP upload components attributes.""" info = sleekxmpp.basexmpp.BaseXMPP.Iq(self.parent_self) info['query'] = "http://jabber.org/protocol/disco#info" info['type'] = 'get' info['from'] = self.parent_self.jid info['to'] = component + response = str(info.send(timeout=30)) - return str(info.send(timeout=30)) + return response def upload(self, component, verify_ssl, u_file, size): - + """Uploads to HTTP upload.""" peticion = Request() peticion['filename'] = u_file.split('/')[-1] peticion['size'] = str(size) @@ -367,7 +390,7 @@ class Jabbergram(sleekxmpp.ClientXMPP): if verify_ssl == 'False': req = requests.put(put_url, data=open(u_file, 'rb'), verify=False) - elif verify_ssl == '': + else: req = requests.put(put_url, data=open(u_file, 'rb')) return put_url From fe1cc0eed9d58229df57b55323934a205f847e91 Mon Sep 17 00:00:00 2001 From: drymer Date: Sun, 9 Jul 2017 03:04:15 +0200 Subject: [PATCH 09/11] Fix typo --- jabbergram.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jabbergram.py b/jabbergram.py index 035352b..9af09cd 100755 --- a/jabbergram.py +++ b/jabbergram.py @@ -233,7 +233,7 @@ class Jabbergram(sleekxmpp.ClientXMPP): print(e) sleep(1) - except Unauthorized: + except Unauthorized as e: print(e) sleep(1) From 002df9336e61847766875f93d9c89683216c344a Mon Sep 17 00:00:00 2001 From: drymer Date: Sun, 9 Jul 2017 03:04:25 +0200 Subject: [PATCH 10/11] Adapt to changes in telegram's api --- jabbergram.py | 11 +++++++++-- requirements.txt | 4 ++-- seeIdGroups.py | 3 +++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/jabbergram.py b/jabbergram.py index 9af09cd..dfde2bc 100755 --- a/jabbergram.py +++ b/jabbergram.py @@ -111,6 +111,10 @@ class Jabbergram(sleekxmpp.ClientXMPP): name = '' size = 0 + if update.edited_message: + update_id = update.update_id + 1 + continue + if update.message.from_user: user = str(update.message.from_user.username) @@ -176,7 +180,7 @@ class Jabbergram(sleekxmpp.ClientXMPP): 'but the XMPP server doesn\'t support H'\ 'TTP Upload.' - elif update.message.new_chat_member: + elif update.message.new_chat_members: message = 'This user has joined the group.' elif update.message.left_chat_member: message = 'This user has left the group.' @@ -203,7 +207,10 @@ class Jabbergram(sleekxmpp.ClientXMPP): else: msg = user + ": " + message - chat = '@' + update.message.chat.username + if update.message.chat.type == 'supergroup': + chat = '@' + update.message.chat.username + else: + chat = str(update.message.chat.id) if chat not in self.groups: chat = str(update.message.chat_id) diff --git a/requirements.txt b/requirements.txt index 8a7ccd6..310fa18 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -sleekxmpp >= 1.3.1 -python-telegram-bot >= 4.0.3 +sleekxmpp >= 1.3.2 +python-telegram-bot >= 6.1.0 requests >= 2.11.1 diff --git a/seeIdGroups.py b/seeIdGroups.py index 4cb7612..3f145c4 100644 --- a/seeIdGroups.py +++ b/seeIdGroups.py @@ -30,6 +30,9 @@ printed = [] while True: try: for update in bot.getUpdates(offset=update_id, timeout=10): + if update.edited_message: + update_id = update.update_id + 1 + continue chat_id = update.message.chat_id chat_title = update.message if chat_id not in printed: From 2679ad6f2ef2a259fc4c7f4018f2f6b483d638ac Mon Sep 17 00:00:00 2001 From: drymer Date: Tue, 18 Jul 2017 22:38:36 +0200 Subject: [PATCH 11/11] Adapt to telegram-bot api's change --- jabbergram.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/jabbergram.py b/jabbergram.py index dfde2bc..828ca3b 100755 --- a/jabbergram.py +++ b/jabbergram.py @@ -116,16 +116,15 @@ class Jabbergram(sleekxmpp.ClientXMPP): continue if update.message.from_user: - user = str(update.message.from_user.username) + user = update.message.from_user.username # sometimes there's no user. weird, but it happens if not user: - user = str(update.message.from_user.first_name) + user = update.message.from_user.first_name - # even weirder is that username or first_name exists - # let's take last_name - if not user: - user = str(update.message.from_user.last_name) + # sometimes there's no user. weird, but it happens + elif update.message['from']: + user = str(update.message['from'].first_name) if update.message.audio or update.message.document or \ update.message.photo or update.message.video \ @@ -207,7 +206,8 @@ class Jabbergram(sleekxmpp.ClientXMPP): else: msg = user + ": " + message - if update.message.chat.type == 'supergroup': + if update.message.chat.type == 'supergroup' and \ + update.message.chat.username: chat = '@' + update.message.chat.username else: chat = str(update.message.chat.id)