def _end_request(self, event, custom_data=None):
     user = User.get(id=self.user)
     if custom_data is None:
         from_stp = event.kwargs.get('from_stp', False)
         message = event.kwargs.get('message')
         request = Request.get(id=user.additional_data.get('chat'))
     else:
         from_stp = custom_data.get('from_stp', False)
         message = custom_data.get('message')
         request = Request.get(id=custom_data.get('request'))
     request.is_finished = True
     request.save()
     if from_stp:
         self.tb.edit_message_text("Вы согласились закрыть заявку.", chat_id=self.chat,
                                   message_id=message)
     else:
         self.tb.edit_message_text("Вы закрыли данную заявку.", chat_id=self.chat,
                                   message_id=message)
     user_stp = request.stp.user
     if from_stp:
         self.tb.send_message(user_stp.telegram_chat_id, "Пользователь согласился закрыть заявку /r%s %s" % (request.id, request.unicode_icons))
     else:
         self.tb.send_message(user_stp.telegram_chat_id, "Пользователь закрыл заявку /r%s %s" % (request.id, request.unicode_icons))
     if user_stp.state == 'stp_chatting' and user_stp.additional_data.get('chat') == request.id:
         user_stp.state = 'stp_main_menu'
         user_stp.additional_data = {}
         user_stp.save()
         self.tb.send_message(user_stp.telegram_chat_id, "Сейчас вы будете переведены в главное меню",
                              reply_markup=generate_custom_keyboard(types.ReplyKeyboardMarkup,
                                                                    [[get_button("Список запросов")],
                                                                     [get_button("Мои активные запросы")]]))
 def is_user_online(self, user):
     chat = user.additional_data.get('chat')
     r = Request.get(id=chat)
     if r.user.additional_data.get('chat') == chat:
         self.tb.send_message(self.chat, "<code>Пользователь сейчас в этом чате</code>", parse_mode='HTML')
     else:
         self.tb.send_message(self.chat, "<code>Пользователь не в данном чате</code>", parse_mode='HTML')
 def _is_taken(self, event):
     request = Request.get(id=event.kwargs.get('request'))
     stp = Stp.get(user=event.kwargs.get("user"))
     if request.stp is None or request.stp == stp:
         return True
     else:
         self.tb.send_message(self.chat, "Данная заявка уже взята.")
         return False
 def send_to_chat_text(self, stp_user, message):
     r = Request.get(id=stp_user.additional_data['chat'])
     user = User.get(id=r.user)
     if 'chat' in user.additional_data and r.id == user.additional_data['chat']:
         Message(is_read=True, from_user=stp_user, to_user=user, text=message.text, request=r).save()
         self.tb.send_message(user.telegram_chat_id, "%s" % message.text)
     else:
         Message(is_read=False, from_user=stp_user, to_user=user, text=message.text, request=r).save()
 def show_request(self, request_id, curr_user):
     try:
         r = Request.get(id=request_id)
         if r.user == curr_user:
             self.print_request(r)
         else:
             self.tb.send_message(self.chat, "Это не ваша заявка!")
     except:
         self.tb.send_message(self.chat, "Данная заявка не найдена")
 def _drop_request(self, event):
     r = Request.get(id=event.kwargs.get('request'))
     self.tb.send_message(self.chat,
                          "Вы хотите отключиться от заявки /r%s\nВы уверены? Так же вы можете добавить комментарий." % r.id,
                          reply_markup=generate_custom_keyboard(types.InlineKeyboardMarkup, buttons=[
                              [get_button_inline("Да", 'stp_request_drop_yes %s' % r.id),
                               get_button_inline("Нет", 'stp_request_drop_no %s' % r.id)],
                              [get_button_inline("Добавить комментарий к заявке\nи отключиться",
                                                 "stp_request_drop_comment %s" % r.id)]]))
 def drop_request_finally(self, message_id, request_id, user, decision, comment=None):
     if comment:
         self.tb.send_message(self.chat, "Вы добавили комментарий к заявке.(Пока не сохраняется в бд)")
         request_id = user.additional_data.get('request')
         r = Request.get(id=request_id)
         r.stp = None
         r.save()
         self.tb.send_message(self.chat, "Вы отключились от заявки /r%s." % request_id)
     else:
         if decision == 0:
             self.tb.edit_message_text("Вы остались подписаны на заявку /r%s." % request_id, chat_id=self.chat,
                                       message_id=message_id)
         else:
             r = Request.get(id=request_id)
             r.stp = None
             r.save()
             self.tb.edit_message_text("Вы отключились от заявки /r%s." % request_id, chat_id=self.chat,
                                       message_id=message_id)
 def _request_active(self, event):
     r = Request.get(id=event.kwargs.get('chat'))
     message = message = event.kwargs.get('message')
     if r.is_finished:
         self.tb.edit_message_text(chat_id=self.chat, text="<code>Данная заявка уже решена.</code>",
                                   message_id=message, parse_mode='HTML')
         return False
     else:
         return True
 def _keep_request(self, message, request=None, from_stp=False):
     if request and from_stp:
         r = Request.get(id=request)
         if r.stp is not None:
             user_stp = r.stp.user
             if user_stp.additional_data.get('chat', -1) == r.id:
                 self.tb.send_message(user_stp.telegram_chat_id, "Пользователь оставил активной заявку")
             else:
                 self.tb.send_message(user_stp.telegram_chat_id, "Пользователь оставил активной заявку /r%s %s" % (r.id, r.unicode_icons))
     self.tb.edit_message_text("Ваша заявка актуальна.", chat_id=self.chat,
                               message_id=message)
 def take_request(self, request, user, call):
     stp = Stp.get(user=user)
     request = Request.get(id=request)
     if request.stp is None:
         request.stp = stp
         request.save()
         self.tb.edit_message_reply_markup(self.chat, message_id=call.message.message_id,
                                           reply_markup=generate_custom_keyboard(types.InlineKeyboardMarkup,
                                                                                 self.get_request_control_buttons(
                                                                                     stp, request.id)))
     else:
         self.tb.send_message(self.chat, "Вы уже взяли заявку, либо ее взял кто-то другой /r%s." % request.id)
 def show_request(self, request_id, curr_user, reply=None):
     try:
         r = Request.get(id=request_id)
         buttons = []
         stp = Stp.get(Stp.user == curr_user)
         stp_sections = StpSection.select(StpSection.section).where(StpSection.stp == stp)
         is_suitable = Request.select().where(Request.section == r.section).where(
             Request.section << stp_sections).where(Request.is_finished == False).exists()
         if is_suitable:
             buttons = self.get_request_control_buttons(stp, request_id)
         self.print_request(r, keyboard=generate_custom_keyboard(types.InlineKeyboardMarkup, buttons), stp=stp)
     except:
         self.tb.send_message(self.chat, "Данная заявка не найдена")
 def _confirm_end(self, user, request=None, message=None):
     if request is None:
         request = user.additional_data.get('chat')
     r = Request.get(id=request)
     if r.is_finished:
         if message:
             self.tb.edit_message_text(chat_id=self.chat, text="<code>Данная заявка уже решена.</code>",
                                       message_id=message, parse_mode='HTML')
     else:
         self.tb.send_message(self.chat, "вы уверены, что данная заявка решена?",
                              reply_markup=generate_custom_keyboard(types.InlineKeyboardMarkup, [
                                  [get_button_inline("Да", "request_solved_yes %s" % r.id),
                                   get_button_inline("Нет", "request_solved_no %s" % r.id)]]))
 def _select_chat(self, event):
     user = event.kwargs.get('user')
     message = event.kwargs.get('message')
     self.tb.edit_message_text(chat_id=self.chat, message_id=message, text="Вы выбрали данную заявку.")
     r = Request.get(id=event.kwargs.get('chat'))
     user.additional_data['chat'] = r.id
     user.save()
     self.tb.send_message(self.chat,
                          "Вы были переключены в чат заявки /r%s %s" % (r.id, r.unicode_icons),
                          reply_markup=generate_custom_keyboard(types.ReplyKeyboardMarkup,
                                                                [[get_button("Показать историю сообщений")],
                                                                 [get_button("Заявка решена")],
                                                                 [get_button("Отключиться от чата")]]))
     self._show_unread_messages(r)
 def _send_close_request(self, user):
     r = Request.get(id=user.additional_data.get('chat'))
     user_to_reiceve = r.user
     keyboard = generate_custom_keyboard(types.InlineKeyboardMarkup, [
         [get_button_inline("Да", "request_close_accept %s" % r.id),
          get_button_inline("Нет", "request_close_decline %s" % r.id)]])
     self.tb.send_message(user_to_reiceve.telegram_chat_id,
                          "Тех. поддержка посчитала, что заявка /r%s:\nНомер: %s\nКатегория: %s\nТип: %s\nКомментарий: %s\nЗавершена, Вы согласны?" % (
                              str(r.id) + ' ' + r.unicode_icons,
                              r.id,
                              get_breadcrumb(r.type.section.id, Section, 'parent_section'),
                              get_breadcrumb(r.type.id, Type, 'parent_type'),
                              r.text,
                          ), reply_markup=keyboard, parse_mode='HTML')
 def get_request_control_buttons(self, stp, request_id):
     buttons = []
     r = Request.get(id=request_id)
     if not r.stp == stp:
         buttons.append([get_button_inline(text="Взять", data="stp_request_take %s" % request_id),
                         get_button_inline(text="Взять и начать чат",
                                           data="stp_request_take_and_chat %s" % request_id)])
     else:
         buttons.append([get_button_inline(text="Начать чат",
                                           data="stp_request_chat %s" % request_id),
                         get_button_inline(text="Отключиться от заявки",
                                           data="stp_request_dismiss_request %s" % request_id)
                         ])
     return buttons
    def send_to_chat(self, text, user):
        try:
            r = Request.get(id=user.additional_data['chat'])
            if r.stp is not None:
                stp = User.get(id=Stp.get(id=r.stp).user)
                m = Message(from_user=user, to_user=stp.id, text=text, request=r)
                if 'chat' in stp.additional_data and stp.additional_data['chat'] == r.id:
                    m.is_read = True

                    self.tb.send_message(stp.telegram_chat_id, m.text)
            else:
                m = Message(from_user=user, to_user=None, text=text, request=r)
            m.save()
        except Exception as e:
            pass
 def _set_chat(self, event):
     request = Request.get(id=event.kwargs.get('request'))
     user = event.kwargs.get("user")
     message = event.kwargs.get("message")
     stp = Stp.get(user=user)
     request.stp = stp
     request.save()
     user.additional_data['chat'] = request.id
     user.save()
     keyboard = generate_custom_keyboard(types.ReplyKeyboardMarkup, [[get_button("Показать историю чата")],
                                                                     [get_button("Закрыть заявку")],
                                                                     [get_button("Клиент в чате?")],
                                                                     [get_button("Отключиться от заявки")],
                                                                     [get_button("Отключиться от чата")]])
     self.tb.edit_message_text(chat_id=self.chat,
                               text="Вы переключились в чат заявки /r%s %s" % (request.id, request.unicode_icons),
                               message_id=message)
     self.tb.send_message(self.chat,
                          "имя клиента: %s\nФамилия клиента: %s\n" % (request.user.first_name, request.user.surname),
                          reply_markup=keyboard)
     self._show_unread_messages(request)
 def _show_request_history(self, request_id, page=0):
     r = Request.get(id=request_id)
     messages = Message.select().where(Message.request == request_id).offset(page * CHAT_PAGE_SIZE).limit(
         CHAT_PAGE_SIZE)
     req_len = len(messages)
     if req_len:
         for i in range(req_len):
             text = "<code>%s</code>\n%s" % (
                 "Вы" if r.user == messages[i].from_user else "Тех. поддежрка", messages[i].text)
             messages[i].is_read = True
             messages[i].save()
             if req_len == CHAT_PAGE_SIZE and req_len == i + 1:
                 self.tb.send_message(self.chat, text,
                                      reply_markup=generate_custom_keyboard(types.InlineKeyboardMarkup,
                                                                            [[get_button_inline(
                                                                                "Следующие %s сообщений" % CHAT_PAGE_SIZE,
                                                                                "next_chat_page %s" % (page + 1))]]),
                                      parse_mode='HTML')
             else:
                 self.tb.send_message(self.chat, text, parse_mode='HTML')
     else:
         self.tb.send_message(self.chat, "Отображены все сообщения")
예제 #19
0
def _notify_user(data):
    text = "Для ваших заявок есть новые сообщения:\n"
    keyboard = generate_custom_keyboard(
        types.InlineKeyboardMarkup,
        [[get_button_inline("Мои заявки", "show_requests")]])
    for user_id in data:
        user = User.get(id=user_id)
        if user.has_messages_after_notification:
            for chat in data[user_id]:
                request = Request.get()
                text += "Заявка /r%s:\nНомер: %s\n<b>Новых сообщений:" \
                        "%s</b>\nКатегория: %s\nТип: %s\nКомментарий: %s\n" % (
                            str(request.id) + ' ' + request.unicode_icons,
                            request.id,
                            chat['message_count'],
                            get_breadcrumb(request.type.section.id, Section, 'parent_section'),
                            get_breadcrumb(request.type.id, Type, 'parent_type'),
                            request.text)
            tb.send_message(user.telegram_chat_id,
                            text,
                            reply_markup=keyboard,
                            parse_mode='HTML')
            user.has_messages_after_notification = False
            user.save()