from datetime import datetime import time import asyncio import telepot import telepot.async import clean class CleanBot(telepot.async.Bot): def log(self, msg, date=datetime.now()): date = date.strftime('%a %b %d %Y %H:%M:%S') print('[%s] %s' % (date, msg)) def log_to(self, msg, user): self.log('%s <-- %s' % (user, msg)) def log_from(self, msg, user, date): self.log('%s --> %s' % (user, msg), date=date) def send(self, user, msg): yield from self.sendMessage(user, msg) self.log_to(msg, user) def handle_text(self, msg): date = datetime.fromtimestamp(int(msg['date'])) self.log_from(msg['text'], msg['from']['id'], date) try: result = clean.single_command(msg['text']) if result == None: raise ValueError() yield from self.send(msg['from']['id'], result) except UnicodeEncodeError: yield from self.send(msg['from']['id'], 'Illegal character') except clean.CompileException: yield from self.send(msg['from']['id'], 'Compile error') except clean.TimeoutException: yield from self.send(msg['from']['id'], 'Timeout exceeded') def handle_other(self, msg): date = datetime.fromtimestamp(int(msg['date'])) self.log_from('unknown content type', msg['from']['username'], date) @asyncio.coroutine def handle(self, msg): content_type, chat_type, chat_id = telepot.glance2(msg) if content_type == 'text': yield from self.handle_text(msg) else: yield from self.handle_other(msg) def run(self): while True: time.sleep(10) def main(): bot = CleanBot('177072260:AAESRI146zYqh3iZN0WPboB6Z-LpmKyX3J0') loop = asyncio.get_event_loop() loop.create_task(bot.messageLoop()) print('Listening...') loop.run_forever() if __name__ == '__main__': main()