#!/usr/bin/python import time import random import datetime import re import ConfigParser import telepot import json from telepot.loop import MessageLoop def writeconfig(): global configParser with open('telegram-notify.conf', 'wb') as configfile: configParser.write(configfile) def handle(msg): global configParser global chat_ids pair_pin = configParser.get('general', 'pair_pin') chat_id = msg['chat']['id'] username = msg['chat']['username'] firstname = msg['chat']['first_name'] lastname = msg['chat']['last_name'] command = msg['text'] param = '' paired_user = [x for x in chat_ids if x['id'] == chat_id] is_paired = len(paired_user) > 0 if re.match('/',msg['text']): # e' un comando command = re.sub(r"\s.*",'',msg['text']) param = re.sub(r"^([^\s]+)\s","",msg['text']) print '\n\nUser %s sent command: %s (%s)' % (username, command, param) if command == '/pair': if is_paired: bot.sendMessage(chat_id, 'You\'re already paired.') elif param == pair_pin: chat={ 'username': username, 'firstname': firstname, 'lastname': lastname, 'id': chat_id } chat_ids.append(chat) section = 'id-' + str(chat_id) if not configParser.has_section(section): configParser.add_section(section) configParser.set(section, 'username', username) configParser.set(section, 'firstname', firstname) configParser.set(section, 'lastname', lastname) writeconfig() bot.sendMessage(chat_id, 'Pairing ok.') else: bot.sendMessage(chat_id, 'Pairing failed: wrong pin.') elif command == '/newpin': if not is_paired: bot.sendMessage(chat_id, 'You\'re not allowed to do that. You have to pair first.') elif param != '': pair_pin = param configParser.set('general', 'pair_pin', pair_pin) writeconfig() bot.sendMessage(chat_id, 'The new pin is: %s' % pair_pin) else: bot.sendMessage(chat_id, 'Please specify the new pin.') elif command == '/unpair': if not is_paired: bot.sendMessage(chat_id, 'You\'re not allowed to do that. You have to pair first.') else: chat_ids[:] = [x for x in chat_ids if x['id'] != chat_id] section = 'id-' + str(chat_id) configParser.remove_section(section) writeconfig() bot.sendMessage(chat_id, 'Bye.') elif command == '/users': if not is_paired: bot.sendMessage(chat_id, 'You\'re not allowed to do that. You have to pair first.') else: users = [x['username'] + ' (' + x['firstname'] + ' ' + x['lastname'] + ')\n' for x in chat_ids] bot.sendMessage(chat_id, 'Paired users:\n' + "".join([str(i) for i in users]) ) configParser = ConfigParser.RawConfigParser() configParser.read('telegram-notify.conf') chat_ids=[] print "Allowed users: " for p in configParser.sections(): if re.match('^id-.*',p): chat_id={ 'username': configParser.get(p,'username'), 'firstname': configParser.get(p,'firstname'), 'lastname': configParser.get(p,'lastname'), 'id': int(re.sub(r'^id-','',p)) } chat_ids.append(chat_id) print(" - (%s) %s %s" % (chat_id['username'],chat_id['firstname'],chat_id['lastname']) ) token = configParser.get('general', 'token') bot = telepot.Bot(token) MessageLoop(bot, handle).run_as_thread() print 'I am listening ...' while 1: time.sleep(10)