def _show_requests(self, event, custom_data=None):
     if custom_data:
         user = custom_data.get('user', None)
         page = custom_data.get('page', 0)
         stp_filter = custom_data.get('stp', None)
     else:
         stp_filter = None
         user = event.kwargs.get('user')
         page = 0
     stp = Stp.get(Stp.user == user)
     stp_sections = StpSection.select(StpSection.section).where(StpSection.stp == stp).where(
         Request.is_finished == False)
     requests = Request.select().where(Request.section << stp_sections)
     if stp_filter:
         requests = requests.where(Request.stp == stp_filter)
     else:
         requests = requests.where(Request.stp == None)
     requests = requests.offset(page * REQUEST_PAGE_SIZE).limit(
         REQUEST_PAGE_SIZE + 1)
     if not custom_data:
         self.tb.send_message(self.chat, "Заявки:", reply_markup=generate_custom_keyboard(types.ReplyKeyboardMarkup,
                                                                                          [[get_button(
                                                                                              "В главное меню")]]))
     req_len = len(requests)
     if req_len:
         for i in range(req_len):
             buttons = self.get_request_control_buttons(stp, requests[i].id)
             if req_len == REQUEST_PAGE_SIZE + 1 and req_len == i + 1:
                 buttons.append([get_button_inline(text="Показать еще", data="stp_request_show %s" % (page + 1))])
             self.print_request(requests[i], stp=stp,
                                keyboard=generate_custom_keyboard(types.InlineKeyboardMarkup, buttons))
     else:
         self.tb.send_message(self.chat, "Нету доступных заявок.")
def show_active_requests(message, user, tb, sm):
    sm._show_requests(None,
                      custom_data={
                          'user': user,
                          'page': 0,
                          'stp': Stp.get(user=user).id
                      })
 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 PromoteUser(user_id, sections):
    user = User.get(id=user_id)
    user.state = 'stp_initial'
    user.save()
    stp = Stp.get_or_create(user=user, staff_id=1, is_active=True)[0]
    stp.save()
    [
        StpSection.get_or_create(stp=stp, section=section, importance=1)
        for section in sections
    ]
 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 arguments_wrapper(*args, **kwargs):
     user = args[1]
     tb = args[2]
     if user and user.is_active and Stp.get(user=user).is_active:
         sm = StpStateMachine(
             data={
                 'chat_id': user.telegram_chat_id,
                 'tb': tb,
                 'state': user.state,
                 'user_id': user.id
             })
         obj = tele_func(*args, **kwargs, sm=sm)
     else:
         if user and not user.is_active:
             tb.send_message(args[0].chat.id,
                             "Кажется, ваш аккаунт деактивирован.")
         elif user.is_active and not Stp.get(user=user).is_active:
             tb.send_message(
                 args[0].chat.id,
                 "Кажется вы больше не являетесь членом СТП.")
         obj = None
     return obj
    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)
Example #10
0
def remove_from_stp(stp):
    tb = telebot.TeleBot(config.token)

    stp = Stp.get(id=stp)
    user = stp.user
    user.state = 'main_menu'
    user.save()
    stp.delete_instance()
    try:
        keyboard = generate_custom_keyboard(
            types.ReplyKeyboardMarkup,
            buttons=[
                ["Создать заявку"],
                ["Мои заявки"],
                # ["Мои завершенные запросы"]
            ])
        tb.send_message(user.telegram_chat_id,
                        "Вы были переведены в раздел для обычных клиентов",
                        reply_markup=keyboard)
    except Exception as e:
        print("Cant promote to stp, reason: %s" % e)
    return redirect(url_for('stp.index_view'))
Example #11
0
def promote_to_stp(user):
    tb = telebot.TeleBot(config.token)

    user = User.get(id=user)
    user.state = 'stp_main_menu'
    user.save()
    stp = Stp.get_or_create(user=user)[0]
    stp.is_active = True
    stp.save()
    try:
        keyboard = generate_custom_keyboard(
            types.ReplyKeyboardMarkup,
            buttons=[
                ["Список запросов"],
                ["Мои активные запросы"],
                # ["Мои завершенные запросы"]
            ])
        tb.send_message(
            user.telegram_chat_id,
            "Вы были переведены в раздел СТП, команды находятся под полем ввода",
            reply_markup=keyboard)
    except Exception as e:
        print("Cant promote to stp, reason: %s" % e)
    return redirect(url_for('stp.edit_view', id=stp.id))
 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)
     stp_user = Stp.get(id=r.stp).user
     if req_len:
         for i in range(req_len):
             text = "<code>%s</code>\n%s" % (
                 "Клиент" if r.user == messages[i].from_user else (
                     "Вы" if messages[i].from_user == stp_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, "Отображены все сообщения")
 def is_not_stp(id):
     return Stp.select().where(Stp.user == id).where(
         Stp.is_active == True).count() == 0