コード例 #1
0
    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()