From fa9c44b45c015ef1adab0ce3ea4c9d5ed26f9328 Mon Sep 17 00:00:00 2001 From: drymer Date: Wed, 25 Jan 2017 20:55:11 +0000 Subject: [PATCH] Add commands and support using name on telegram group name --- jabbergram.py | 139 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 88 insertions(+), 51 deletions(-) diff --git a/jabbergram.py b/jabbergram.py index 3d13fe2..fc63d65 100755 --- a/jabbergram.py +++ b/jabbergram.py @@ -49,6 +49,7 @@ 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 @@ -85,6 +86,7 @@ class Jabbergram(sleekxmpp.ClientXMPP): def read_tg(self): update_id = 0 + name = '' # wait until http_upload has been tested sleep(5) @@ -92,11 +94,11 @@ class Jabbergram(sleekxmpp.ClientXMPP): try: for update in self.bot.getUpdates(offset=update_id, timeout=10): - + 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.voice or update.message.sticker: # proceed only if http upload is available if self.max_size is not None: if update.message.audio: @@ -121,11 +123,11 @@ class Jabbergram(sleekxmpp.ClientXMPP): size = d_file.file_size if self.max_size >= size: t_file = self.bot.getFile(d_file.file_id) - name = '/tmp/' + d_file.file_id + ext - t_file.download(name) + f_name = '/tmp/' + d_file.file_id + ext + t_file.download(f_name) url = self.http_upload.upload( self.component, - '', name, size) + '', f_name, size) if update.message.caption: message = update.message.caption + ' ' @@ -134,11 +136,12 @@ class Jabbergram(sleekxmpp.ClientXMPP): message += url else: - message = 'A file has been uploaded to Telegra' - 'm, but is too big.' + message = 'A file has been uploaded to Telegr'\ + 'am, but is too big.' else: - message = 'A file has been uploaderd to Telegram, ' - 'but the XMPP server doesn\'t support HTTP Upload.' + message = 'A file has been uploaderd to Telegram,'\ + 'but the XMPP server doesn\'t support H'\ + 'TTP Upload.' elif update.message.new_chat_member: message = 'This user has joined the group.' @@ -148,9 +151,19 @@ class Jabbergram(sleekxmpp.ClientXMPP): message = 'The group\'s title has changed: '+ \ update.message.new_chat_title elif update.message.new_chat_photo: - message = 'The group\'s photo haschanged.' + message = 'The group\'s photo has changed.' else: - message = update.message.text + if update.message.reply_to_message: + name = update.message.reply_to_message.from_user\ + .username + if name != self.bot.username: + message = name + ': ' + \ + update.message.reply_to_message.text + else: + message = update.message.reply_to_message.text + message = message + ' <- ' + update.message.text + else: + message = update.message.text user = str(update.message.from_user.username) @@ -163,23 +176,33 @@ class Jabbergram(sleekxmpp.ClientXMPP): if not user: user = str(update.message.from_user.last_name) - msg = user + ": " + message - chat_id = update.message.chat_id + # Don't add name first if it's a reply + if name: + msg = message + else: + msg = user + ": " + message - if message and str(chat_id) in self.groups: - index = self.groups.index(str(chat_id)) + chat = '@' + update.message.chat.username + if chat not in self.groups: + chat = str(update.message.chat_id) + + if message and chat in self.groups: + index = self.groups.index(chat) receiver = self.muc_rooms[index] - if chat_id in self.telegram_users: - if user not in self.telegram_users[chat_id]: - self.telegram_users[chat_id] += ' ' + user + if chat in self.telegram_users: + if user not in self.telegram_users[chat]: + self.telegram_users[chat] += ' ' + user else: - self.telegram_users[chat_id] = ' ' + user + + self.telegram_users[chat] = ' ' + user if message == '.users': - index = self.groups.index(str(chat_id)) - muc = self.muc_rooms[index] - self.say_users('telegram', muc, chat_id) + self.say_users('telegram', muc, chat) + elif message == '.help': + self.say_help('telegram', muc, chat) + elif message == '.where': + self.say_where('telegram', muc, chat) else: self.send_message(mto=receiver, mbody=msg, mtype='groupchat') @@ -211,7 +234,10 @@ class Jabbergram(sleekxmpp.ClientXMPP): if msg['body'] == '.users': self.say_users('xmpp', muc_room, tg_group) - + elif msg['body'] == '.help': + self.say_help('xmpp', muc_room, tg_group) + elif msg['body'] == '.where': + self.say_where('xmpp', muc_room, tg_group) elif msg['mucnick'] != self.nick: message = str(msg['from']).split('/')[1] + ': ' + str(msg['body']) self.bot.sendMessage(tg_group, text=message) @@ -234,32 +260,46 @@ class Jabbergram(sleekxmpp.ClientXMPP): self.xmpp_users[muc].remove(presence['muc']['nick']) def say_users(self, service, muc, group): - xmpp_users = "" - tg_users = "" - group = int(group) - - if muc in self.xmpp_users: - for i in self.xmpp_users[muc]: - xmpp_users = xmpp_users + ' _' + i - else: - xmpp_users = "" - - msg1 = 'XMPP Users:' + xmpp_users - - if group in self.telegram_users: - tg_users = self.telegram_users[group] - else: - tg_users = "" - - msg2 = 'Telegram Users:' + tg_users - - message = msg1 + '\n' + msg2 - if service == 'xmpp': - self.send_message(mto=muc, mbody=message, mtype='groupchat') + if group in self.telegram_users: + tg_users = self.telegram_users[group] + else: + tg_users = "" + + msg = 'Telegram Users:' + tg_users + + self.send_message(mto=muc, mbody=msg, mtype='groupchat') elif service == 'telegram': - self.bot.sendMessage(group, text=message) + xmpp_users = "" + if muc in self.xmpp_users: + for i in self.xmpp_users[muc]: + xmpp_users = xmpp_users + ' ' + i + else: + xmpp_users = "" + + msg = 'XMPP Users:' + xmpp_users + self.bot.sendMessage(group, text=msg) + + def say_help(self, service, muc, group): + msg = 'Hi, I\'m ' + self.bot.username + '. I have two commands : ".us'\ + 'ers" and ".where".' + if service == 'xmpp': + self.send_message(mto=muc, mbody=msg, mtype='groupchat') + elif service == 'telegram': + self.bot.sendMessage(group, text=msg) + + def say_where(self, service, muc, group): + if service == 'xmpp': + if self.group_name: + msg = 'I\'m on http://telegram.me/' + self.group_name + '.' + else: + msg = 'Sorry, I\'m on a private group, you\'ll have to ask fo'\ + 'r an invitation.' + self.send_message(mto=muc, mbody=msg, mtype='groupchat') + elif service == 'telegram': + msg = 'I\'m on ' + muc + '.' + self.bot.sendMessage(group, text=msg) class HttpUpload(): def __init__(self, parent_self): @@ -316,8 +356,7 @@ class Jabbergram(sleekxmpp.ClientXMPP): xml = minidom.parseString(str(send)) put_url = xml.getElementsByTagName('put')[0].firstChild.data - verify_ssl = '' - if verify_ssl == 'False': + if verify_ssl == '' or verif_ssl == 'False': req = requests.put(put_url, data=open(u_file, 'rb'), verify=False) else: @@ -356,5 +395,3 @@ if __name__ == '__main__': print("Done") else: print("Unable to connect.") - - # Vols un gram nen?