def on_chat_message(self, msg): self.session.commit() content_type, chat_type, chat_id = glance(msg) # print('Chat:', content_type, chat_type, chat_id) # pprint(msg) user_chat = self.get_user_chat(msg) message = self.register_msg(msg, user_chat) if content_type != 'text': reply = self.data['drafts']['invalid_input'] self.bot.sendMessage(chat_id, reply) reply = self.data['drafts']['usage'] self.bot.sendMessage(chat_id, reply) message.replied = 1 self.session.add(message) self.session.commit() return msg['text'] = msg['text'].lower() if msg['text'] == '/start': message.is_valid = 1 reply = self.data['drafts']['welcome'] self.bot.sendMessage(chat_id, reply) reply = self.data['drafts']['usage'] self.bot.sendMessage(chat_id, reply) message.replied = 1 self.session.add(message) self.session.commit() elif msg['text'] == '/help': message.is_valid = 1 reply = self.data['drafts']['usage'] self.bot.sendMessage(chat_id, reply) message.replied = 1 self.session.add(message) self.session.commit() elif msg['text'] == '/list1': message.is_valid = 1 try: cinema_list = self.get_cinema_list(u'تهران') except Exception as error: reply = self.data['drafts']['error'] self.bot.sendMessage(chat_id, reply) message.replied = 1 tb = traceback.format_exc() e = Error(type=str(error), traceback=tb) e.message = message self.session.add(e) else: cinema_list_msg = self.compose_cinema_list_msg(cinema_list) reply = cinema_list_msg self.send_long_msg(chat_id, reply) message.replied = 1 finally: self.session.add(message) self.session.commit() elif msg['text'] == '/list2': message.is_valid = 1 try: cinema_list = self.get_cinema_list(r'^(?!تهران).*?$') except Exception as error: reply = self.data['drafts']['error'] self.bot.sendMessage(chat_id, reply) message.replied = 1 tb = traceback.format_exc() e = Error(type=str(error), traceback=tb) e.message = message self.session.add(e) else: cinema_list_msg = self.compose_cinema_list_msg(cinema_list) reply = cinema_list_msg self.send_long_msg(chat_id, reply) message.replied = 1 finally: self.session.add(message) self.session.commit() elif msg['text'].isdigit() or (msg['text'][0] == '/' and msg['text'][1:].isdigit()): message.is_valid = 1 if msg['text'][0] == '/': msg['text'] = msg['text'][1:] cid = int(msg['text']) try: cinema, cinema_info = self.get_cinema_info(cid) except Exception as error: if str(error) == 'networking error': reply = self.data['drafts']['error'] self.bot.sendMessage(chat_id, reply) elif str(error) == 'cinema does not exist': message.is_valid = 0 reply = self.data['drafts']['invalid_input'] self.bot.sendMessage(chat_id, reply) reply = self.data['drafts']['usage'] self.bot.sendMessage(chat_id, reply) else: reply = self.data['drafts']['error'] self.bot.sendMessage(chat_id, reply) message.replied = 1 tb = traceback.format_exc() e = Error(type=str(error), traceback=tb) e.message = message self.session.add(e) else: cinema_msg = self.compose_cinema_msg(cinema_info) self.send_long_msg(chat_id, cinema_msg) message.cinema = cinema message.replied = 1 finally: self.session.add(message) self.session.commit() else: reply = self.data['drafts']['invalid_input'] self.bot.sendMessage(chat_id, reply) reply = self.data['drafts']['usage'] self.bot.sendMessage(chat_id, reply) message.replied = 1 self.session.add(message) self.session.commit()