Exemple #1
0
def group_leave(uid):
    db.set_bot_follower_status(uid, cnst.USER_LEAVE_STATUS)
    utils.del_uid_from_dict(uid, IN_ADMIN_PANEL)
    utils.del_uid_from_dict(uid, READY_TO_ENROLL)
    READY_TO_LEAVE[uid] = None
    reasons = db.get_leave_reasons()
    k = utils.get_keyboard_from_list(reasons)
    mt.send_message(uid, cnst.MSG_LEAVING, k)
    return 'ok'
Exemple #2
0
def group_join(uid):
    uname = vk.get_user_name(uid)
    if uname == '':
        uname = 'No Name'
    msg_allowed = 0
    if vk.is_messages_allowed(uid):
        msg_allowed = 1
    if db.is_known_user(uid):
        db.set_bot_follower_status(uid, cnst.USER_SUB_STATUS)
    else:
        db.add_bot_follower(uid, uname,  msg_allowed=msg_allowed)
    msg = db.get_first_msg()
    mt.send_message(uid, msg.format(uname), utils.get_user_keyboard())
    utils.del_uid_from_dict(uid, IN_ADMIN_PANEL)
    utils.del_uid_from_dict(uid, READY_TO_ENROLL)
    utils.del_uid_from_dict(uid, READY_TO_LEAVE)
    return 'ok'
Exemple #3
0
def start_conwersation(number, welcome_only=False):
    new = db.is_new_user(number)
    user = m.EnrollInfo(number=number, uid=number, msgr=cnst.WHATSAPP)
    msg = db.get_first_msg()
    msg += "\n\n(Если Вы желаете отписаться от рассылки, отправьте символ - #)\n"
    answs = db.get_first_msg_answs()
    quests = copy.deepcopy(db.get_all_quests())
    READY_TO_ENROLL[number] = m.EnrollObj(m.EnrollInfo(user.number, user.uid,
                                                       user.id, '', user.msgr),
                                          quests,
                                          need_birthday=False,
                                          first_time=False)
    if answs != '':
        answrs = answs.split('; ')
        READY_TO_ENROLL[number].last_variants = answrs
        mt.send_message_keyboard(number,
                                 msg=msg,
                                 keyboard=answrs,
                                 msgr=cnst.WHATSAPP)
        welcome_only = True
        db.add_any(user)
        if not new and \
                ('рождения' in quests[0].quest.lower() or 'рождение' in quests[0].quest.lower()):
            # Если есть вопросы о дне рождении, то пропускаем их если пользователь не нов
            READY_TO_ENROLL[number].qsts = quests[2:]
        return
    else:
        mt.send_message(number, msg, cnst.WHATSAPP)
        time.sleep(1)
        if welcome_only:
            READY_TO_ENROLL[number].need_birthday = new and \
        ('рождения' in quests[0].quest.lower() or 'рождение' in quests[0].quest.lower())
            READY_TO_ENROLL[number].skip_next_answ = True
            db.add_any(user)
            if not new and \
                    ('рождения' in quests[0].quest.lower() or 'рождение' in quests[0].quest.lower()):
                # Если есть вопросы о дне рождении, то пропускаем их если пользователь не нов
                READY_TO_ENROLL[number].qsts = quests[2:]
            return
    if not new and \
        ('рождения' in quests[0].quest.lower() or 'рождение' in quests[0].quest.lower()):
        #Если есть вопросы о дне рождении, то пропускаем их если пользователь не нов
        READY_TO_ENROLL[number].qsts = quests[2:]
    elif new and \
        ('рождения' in quests[0].quest.lower() or 'рождение' in quests[0].quest.lower()):
        READY_TO_ENROLL[number].need_birthday = True
        db.add_any(user)
    elif new:
        db.add_any(user)
    quests = READY_TO_ENROLL[number].qsts
    if len(quests) > 0 and not welcome_only:
        q = quests.pop(0)
        msg = q.quest
        if q.answs is not None and len(q.answs) > 0:
            answrs = q.answs.split('; ')
            READY_TO_ENROLL[number].last_variants = answrs
            mt.send_message_keyboard(number,
                                     msg,
                                     answrs,
                                     msgr=READY_TO_ENROLL[number].ei.msgr)
        else:
            READY_TO_ENROLL[number].last_variants = None
            mt.send_message(number, msg, msgr=READY_TO_ENROLL[number].ei.msgr)
Exemple #4
0
def admin_message_processing(uid, text, link=None):
    if text == cnst.BTN_BROADCAST:
        IN_ADMIN_PANEL[uid] = cnst.BTN_BROADCAST
        # mt.send_message(uid, cnst.MSG_USER_SHORT_INFO.format(all_count, msg_allowed_count))
        mt.send_keyboard_vk_message(uid, cnst.MSG_ACCEPT_BROADCAST,
                                    cnst.KEYBOARD_CANCEL)

    elif text == cnst.BTN_SUBS:
        pg = mt.ThreadSubs(uid)
        pg.start()
        mt.send_message(uid, cnst.MSG_PLEASE_STAND_BY)

    elif text == cnst.BTN_SUBS_DEL:
        IN_ADMIN_PANEL[uid] = cnst.BTN_SUBS_DEL
        mt.send_keyboard_vk_message(uid, cnst.MSG_ACCEPT_FILE_FOR_SUBS_DEL,
                                    cnst.KEYBOARD_CANCEL)

    elif text == cnst.BTN_ADMINS:
        IN_ADMIN_PANEL[uid] = cnst.BTN_ADMINS
        admins = db.get_all_admins()
        msg = cnst.MSG_ADMINS
        for a in admins:
            msg += '🔑 {}, id - {}\n\n'.format(a.name, a.uid)
        msg += cnst.MSG_ADMIN_REMOVING
        mt.send_keyboard_vk_message(uid, msg, cnst.KEYBOARD_CANCEL)

    elif text == cnst.BTN_BROADCAST_BY_FILE:
        IN_ADMIN_PANEL[uid] = cnst.BTN_BROADCAST_BY_FILE
        mt.send_keyboard_vk_message(uid, cnst.MSG_ACCEPT_BROADCAST_BY_FILE,
                                    cnst.KEYBOARD_CANCEL)

    elif text == cnst.BTN_ADD_ADMIN:
        IN_ADMIN_PANEL[uid] = cnst.BTN_ADD_ADMIN
        mt.send_keyboard_vk_message(uid, cnst.MSG_ADMIN_ADDING,
                                    cnst.KEYBOARD_CANCEL)

    elif text == cnst.BTN_BROADCASTS:
        mt.send_keyboard_vk_message(uid, 'Меню рассылок:',
                                    cnst.KEYBOARD_BROADCASTS)

    elif text == cnst.BTN_ADD_BROADCAST_BY_TIME:
        IN_ADMIN_PANEL[uid] = m.BcstByTime()
        mt.send_keyboard_vk_message(uid, cnst.MSG_ADD_BRDCST_BY_TIME,
                                    cnst.KEYBOARD_CANCEL)

    elif text == cnst.BTN_STOP_BRDCST:
        msg = wapp.stop_broadcasting()
        mt.send_message(uid, msg)

    elif text == cnst.BTN_BROADCAST_BY_TIME:
        IN_ADMIN_PANEL[uid] = cnst.BTN_BROADCAST_BY_TIME
        brtcsts = db.get_all_bcsts()
        msg = '🔥 Запланированные рассылки 🔥\n\n'
        for a in brtcsts:
            msg += cnst.MSG_PLANNED_BCST.format(a.start_date, a.time,
                                                a.repet_days, a.id, a.msg)
        msg += 'Для удаления рассылки введите её id.'
        mt.send_keyboard_vk_message(uid, msg, cnst.KEYBOARD_CANCEL)

    elif text == cnst.BTN_QUESTIONS:
        IN_ADMIN_PANEL[uid] = m.QuestMsg()
        msg = utils.get_quest_msgs_as_str()
        mt.send_message(uid, msg)
        mt.send_keyboard_vk_message(uid, cnst.MSG_ACCEPT_QUEST_MSG,
                                    cnst.KEYBOARD_CANCEL_AND_MSG_EDIT)

    elif text == cnst.BTN_FIRST_MSG_EDIT:
        IN_ADMIN_PANEL[uid] = cnst.BTN_FIRST_MSG_EDIT
        msg = db.get_first_msg()
        msg += "\n\n Отправьте новое приветственное сообщение для замены."
        mt.send_keyboard_vk_message(uid, msg, keyboard=cnst.KEYBOARD_CANCEL)

    elif text == cnst.BTN_FIRST_MSG_ANSWS_EDIT:
        IN_ADMIN_PANEL[uid] = cnst.BTN_FIRST_MSG_ANSWS_EDIT
        msg = db.get_first_msg_answs()
        if msg == '':
            msg = '<Вариантов нет>\n'
        msg += "\n\n Отправьте новые варианты ответов для замены через точку с запятой или отправте 0 для удаления."
        mt.send_keyboard_vk_message(uid, msg, keyboard=cnst.KEYBOARD_CANCEL)

    elif text == cnst.BTN_EDIT_LAST_MSG:
        IN_ADMIN_PANEL[uid] = cnst.BTN_EDIT_LAST_MSG
        msg = db.get_last_msg()
        msg += "\n\n Отправьте новое завершающее сообщение для замены."
        mt.send_keyboard_vk_message(uid, msg, keyboard=cnst.KEYBOARD_CANCEL)

    elif text == cnst.BTN_CONGRATULATION_EDIT:
        IN_ADMIN_PANEL[uid] = cnst.BTN_CONGRATULATION_EDIT
        msg = db.get_congrat_msg()
        msg += "\n\n Отправьте новое поздравительное сообщение для замены."
        mt.send_keyboard_vk_message(uid, msg, keyboard=cnst.KEYBOARD_CANCEL)

    elif text == cnst.BTN_ADD_BIRTHDAY_QUESTS:
        db.add_birthday_quests()
        utils.ID_WRAPPER.update()
        msg = "Вопросы о дне рождении добавлены после приветственного и " \
              "могут быть изменены в меню вопросов, на равне с другими вопросами."
        mt.send_message(uid, msg)

    elif text == cnst.BTN_CANCEL:
        IN_ADMIN_PANEL[uid] = ''
        mt.send_keyboard_vk_message(uid, cnst.MSG_CANCELED_MESSAGE,
                                    cnst.KEYBOARD_ADMIN)

    elif text.lower() in cnst.ADMIN_KEY_WORDS:
        IN_ADMIN_PANEL[uid] = ''
        mt.send_keyboard_vk_message(uid, cnst.MSG_ADMIN_PANEL,
                                    cnst.KEYBOARD_ADMIN)

    elif 'whatsapp' in text:
        num = text.split(' ')[1]
        if num[0] == '7' and len(num) == 11:
            start_conwersation(num)
            mt.send_message(uid, 'Сообщение отправлено через whatsapp')
        else:
            mt.send_message(
                uid, 'Не верный формат. Необходимо:whatsapp 79999999999')

    elif 'del' in text:
        num = text.split(' ')[1]
        if num[0] == '7' and len(num) == 11:
            db.delete_user_by_num(num)
            mt.send_message(uid, 'Пользователь удален')
        else:
            mt.send_message(uid,
                            'Не верный формат. Необходимо:del 79999999999')

    elif isinstance(IN_ADMIN_PANEL[uid], m.BcstByTime):
        if IN_ADMIN_PANEL[uid].date_time_is_not_sign():
            bcst = utils.parse_bcst(text)
            IN_ADMIN_PANEL[uid] = bcst
            if bcst is None:
                mt.send_message(uid,
                                "Некорректный формат. (22.08.2018 15:22 3)")
            else:
                mt.send_message(uid, cnst.MSG_ACCEPT_BROADCAST)
        else:
            IN_ADMIN_PANEL[uid].msg = text
            mt.send_keyboard_vk_message(uid, 'Рассылка создана!',
                                        cnst.KEYBOARD_ADMIN)
            thread_manager.add_brcst_thread(IN_ADMIN_PANEL[uid])
            IN_ADMIN_PANEL[uid] = None

    elif isinstance(IN_ADMIN_PANEL[uid], m.QuestMsg):
        try:
            if IN_ADMIN_PANEL[uid].quest != '':
                int('not int')
            qid = int(text)
            utils.del_question(qid)
            mt.send_keyboard_vk_message(uid, "Удалено", cnst.KEYBOARD_ADMIN)
            IN_ADMIN_PANEL[uid] = ''
        except ValueError:
            qid_str = text.split(' ')[0]
            if utils.isint(qid_str) and \
                            IN_ADMIN_PANEL[uid].quest == '' and IN_ADMIN_PANEL[uid].id is None:
                IN_ADMIN_PANEL[uid].id = int(qid_str)
                print('id set' + qid_str)
                text = ' '.join(text.split(' ')[1:])
            if IN_ADMIN_PANEL[uid].quest == '':
                IN_ADMIN_PANEL[uid].quest = text
                mt.send_keyboard_vk_message(uid, cnst.MSG_ADDING_ANSWS_VAR,
                                            cnst.KEYBOARD_END_AND_CANCELE)
            elif text == cnst.BTN_END:
                utils.add_quest_msg(IN_ADMIN_PANEL[uid].quest, '',
                                    IN_ADMIN_PANEL[uid].id)
                mt.send_keyboard_vk_message(uid, "Сохранено",
                                            cnst.KEYBOARD_ADMIN)
                IN_ADMIN_PANEL[uid] = ''
            else:
                utils.add_quest_msg(IN_ADMIN_PANEL[uid].quest, text,
                                    IN_ADMIN_PANEL[uid].id)
                mt.send_keyboard_vk_message(uid, "Сохранено",
                                            cnst.KEYBOARD_ADMIN)
                IN_ADMIN_PANEL[uid] = ''

    elif IN_ADMIN_PANEL[uid] == cnst.BTN_BROADCAST:
        mt.send_msg_all_whatsapp_subs(text)
        IN_ADMIN_PANEL.clear()
        IN_ADMIN_PANEL[uid] = ''
        mt.send_keyboard_vk_message(uid, "Разослано", cnst.KEYBOARD_ADMIN)

    elif IN_ADMIN_PANEL[uid] == cnst.BTN_BROADCAST_BY_FILE:
        send_msg_by_file(text, link)
        IN_ADMIN_PANEL.clear()
        IN_ADMIN_PANEL[uid] = ''
        mt.send_keyboard_vk_message(uid, "Разослано", cnst.KEYBOARD_ADMIN)

    elif IN_ADMIN_PANEL[uid] == cnst.BTN_SUBS_DEL:
        mt.del_subs_by_file(link)
        mt.send_keyboard_vk_message(uid, "Удалено", cnst.KEYBOARD_ADMIN)
        IN_ADMIN_PANEL[uid] = ''

    elif IN_ADMIN_PANEL[uid] == cnst.BTN_FIRST_MSG_EDIT:
        db.update_first_msg(text)
        mt.send_keyboard_vk_message(uid, "Сохранено", cnst.KEYBOARD_ADMIN)
        IN_ADMIN_PANEL[uid] = ''

    elif IN_ADMIN_PANEL[uid] == cnst.BTN_FIRST_MSG_ANSWS_EDIT:
        db.update_first_msg_answs(text)
        mt.send_keyboard_vk_message(uid, "Сохранено", cnst.KEYBOARD_ADMIN)
        IN_ADMIN_PANEL[uid] = ''

    elif IN_ADMIN_PANEL[uid] == cnst.BTN_EDIT_LAST_MSG:
        db.update_last_msg(text)
        mt.send_keyboard_vk_message(uid, "Сохранено", cnst.KEYBOARD_ADMIN)
        IN_ADMIN_PANEL[uid] = ''

    elif IN_ADMIN_PANEL[uid] == cnst.BTN_CONGRATULATION_EDIT:
        db.update_congrat_msg(text)
        mt.send_keyboard_vk_message(uid, "Сохранено", cnst.KEYBOARD_ADMIN)
        IN_ADMIN_PANEL[uid] = ''

    elif IN_ADMIN_PANEL[uid] == cnst.BTN_ADMINS:
        try:
            admin_id = int(text)
            db.delete_admin(admin_id)
            msg = cnst.MSG_ADMIN_REMOVED
            mt.send_keyboard_vk_message(uid, msg, cnst.KEYBOARD_ADMIN)
            IN_ADMIN_PANEL[uid] = ''
        except ValueError:
            msg = cnst.MSG_VALUE_ERROR
            mt.send_message(uid, msg)

    elif IN_ADMIN_PANEL[uid] == cnst.BTN_ADD_ADMIN:
        try:
            admin_id = int(text)
            admin = m.Admin('None', admin_id)
            db.add_any(admin)
            mt.send_keyboard_vk_message(uid, cnst.MSG_ADMIN_SUCCCES_ADDED,
                                        cnst.KEYBOARD_ADMIN)
            IN_ADMIN_PANEL[uid] = ''
        except ValueError:
            msg = cnst.MSG_VALUE_ERROR
            mt.send_message(uid, msg)

    elif IN_ADMIN_PANEL[uid] == cnst.BTN_BROADCAST_BY_TIME:
        try:
            id = int(text)
            thread_manager.delete_brcst(id)
            mt.send_keyboard_vk_message(uid,
                                        "Запланированная рассылка удалена",
                                        cnst.KEYBOARD_ADMIN)
            IN_ADMIN_PANEL[uid] = ''
        except ValueError:
            msg = cnst.MSG_VALUE_ERROR
            mt.send_message(uid, msg)
    else:
        pass
Exemple #5
0
def message_processing(uid, text, source, link=None):
    if db.is_admin(str(uid)) and text != '#':
        admin_message_processing(uid, text, link=link)
        return 'ok'

    elif text == '#':
        db.delete_user_by_num(uid)
        utils.del_uid_from_dict(uid, READY_TO_ENROLL)
        mt.send_text_msg_to_admins(
            'Пользователь с номером {} отписался от рассылок и сообщений'.
            format(uid))
        return 'ok'

    elif uid not in READY_TO_ENROLL and source == cnst.WHATSAPP:
        start_conwersation(uid, welcome_only=False)

    # Обработка ввода данных пользователя
    elif uid in READY_TO_ENROLL:
        READY_TO_ENROLL[uid].minut_to_drop = 29
        if source == cnst.WHATSAPP and READY_TO_ENROLL[
                uid].last_variants is not None:
            if utils.isint(text) and int(text) <= len(
                    READY_TO_ENROLL[uid].last_variants):
                index = int(text) - 1
                text = READY_TO_ENROLL[uid].last_variants[index]
                READY_TO_ENROLL[uid].last_variants = None
            else:
                mt.send_message(uid,
                                'Введите цифру варианта!',
                                msgr=READY_TO_ENROLL[uid].ei.msgr)
                return
        quests = READY_TO_ENROLL[uid].qsts
        # try:
        #     if not READY_TO_ENROLL[uid].first_time and 'рожден' in quests[0].quest.lower():
        #         READY_TO_ENROLL[uid].qsts = quests[2:]
        # except:
        #     pass

        if len(READY_TO_ENROLL[uid].qsts) > 0:
            if READY_TO_ENROLL[uid].need_birthday and not utils.isint(text):
                # пропускаем вопрос о др
                READY_TO_ENROLL[uid].ei.answers += text + '; '
                q = READY_TO_ENROLL[uid].qsts.pop(0)
                READY_TO_ENROLL[uid].need_birthday = False
                if len(READY_TO_ENROLL[uid].qsts) > 0:
                    q = READY_TO_ENROLL[uid].qsts.pop(0)
                    msg = q.quest
                else:
                    last_msg = db.get_last_msg()
                    mt.send_message(uid,
                                    last_msg,
                                    msgr=READY_TO_ENROLL[uid].ei.msgr)
                    mt.send_msg_to_admins(READY_TO_ENROLL[uid].ei)
                    db.update_user(READY_TO_ENROLL[uid].ei, uid)
                    READY_TO_ENROLL[uid].last_variants = None
                    utils.del_uid_from_dict(uid, READY_TO_ENROLL)
                    return
            else:
                if not READY_TO_ENROLL[uid].skip_next_answ:
                    READY_TO_ENROLL[uid].ei.answers += text + '; '
                    READY_TO_ENROLL[uid].skip_next_answ = False
                q = READY_TO_ENROLL[uid].qsts.pop(0)
                msg = q.quest
            if ('рождения' in msg.lower() or 'рождение' in msg.lower()):
                READY_TO_ENROLL[uid].need_birthday = True

            if q.answs is not None and len(q.answs) > 0:
                answrs = q.answs.split('; ')
                READY_TO_ENROLL[uid].last_variants = answrs
                mt.send_message_keyboard(uid,
                                         msg,
                                         answrs,
                                         msgr=READY_TO_ENROLL[uid].ei.msgr)
            else:
                READY_TO_ENROLL[uid].last_variants = None
                mt.send_message(uid, msg, msgr=READY_TO_ENROLL[uid].ei.msgr)
        else:
            READY_TO_ENROLL[uid].ei.answers += text
            try:
                answs = READY_TO_ENROLL[uid].ei.answers.split('; ')
                if datetime.today().month > int(answs[1]) and \
                                datetime.today().day > int(answs[0]):
                    y = str(datetime.today().year + 1)
                else:
                    y = str(datetime.today().year + 1)
                dmy = answs[1] + '.' + answs[0] + '.' + y
                obj = m.BcstByTime()
                obj.start_date = datetime.strptime(dmy, '%d.%m.%Y').date()
                obj.time = datetime.strptime('10:00', '%H:%M').time()
                obj.repet_days = 365
                obj.msg = db.get_congrat_msg()
                obj.target = uid
                thread_manager.add_brcst_thread(obj)
            except BaseException as e:
                print("Error ERROR ROORRR")
                print(e.with_traceback(e.__traceback__))
                print(e)
                print(e.__traceback__)
            finally:
                print('Пользователь закончил опрос')
                msg = db.get_last_msg()
                mt.send_message(uid, msg, msgr=READY_TO_ENROLL[uid].ei.msgr)
                mt.send_msg_to_admins(READY_TO_ENROLL[uid].ei)
                try:
                    db.update_user(READY_TO_ENROLL[uid].ei, uid)
                    READY_TO_ENROLL[uid].last_variants = None
                except BaseException as e:
                    print(e.with_traceback(e.__traceback__))
                    print(e)
                    print(e.__traceback__)
                finally:
                    utils.del_uid_from_dict(uid, READY_TO_ENROLL)

    # Вход для админа
    elif text.lower() in cnst.ADMIN_KEY_WORDS and not_ready_to_enroll(uid):
        if db.is_admin(str(uid)) and source == cnst.VK:
            IN_ADMIN_PANEL[uid] = ''
            mt.send_keyboard_vk_message(uid, cnst.MSG_ADMIN_PANEL,
                                        cnst.KEYBOARD_ADMIN)
        elif source != cnst.VK:
            mt.send_message(uid, "Зайдите в меню администратора через ВК")
        elif not db.is_admin(uid):
            mt.send_message(uid, "Вы не админ")
    elif text.lower() == "clearme":
        pass
        # mt.send_message(uid, "clear", keyboard=cnst.EMPTY_KEYBOARD)
    else:
        pass
    return 'ok'
Exemple #6
0
def message_processing(uid, text):
    uname = db.get_follower_name(uid)
    if uname is None:
        mt.new_user_or_not(uid, uname, send_welcome=True)
    if uid in IN_ADMIN_PANEL:
        admin_message_processing(uid, uname, text)
        return 'ok'

    if text.lower() in cnst.START_WORDS and not_ready_to_enroll(uid):
        thread = mt.ThreadSendMsgWelcome(uid, uname, utils.get_user_keyboard())
        thread.start()
        thread = mt.ThreadNewUserOrNote(uid, uname)
        thread.start()

    elif cnst.__BTN_ENROLL.lower() in text.lower() or (text.lower() in cnst.USER_ACCEPT_WORDS and not_ready_to_enroll(uid)):
        READY_TO_ENROLL[uid] = m.EnrollInfo(uid)
        quests = db.get_quest_msgs()
        quests.append('FAKE')
        READY_TO_ENROLL[uid].quests = quests
        READY_TO_ENROLL[uid].set_name(uname)
        k = None
        if len(READY_TO_ENROLL[uid].quests) > 1:
            q = READY_TO_ENROLL[uid].quests.pop(0)
            if len(q.answs) > 0:
                answrs = q.answs.split('; ')
                k = utils.get_keyboard_from_list(answrs, cnst.cancel_btn)
            else:
                k = cnst.KEYBOARD_CANCEL
            mt.send_message(uid, q.quest.format(READY_TO_ENROLL[uid].name), k)
        else:
            msg = db.get_mail_quest()
            mt.send_message(uid, msg.format(READY_TO_ENROLL[uid].name), cnst.KEYBOARD_END_AND_SKIP)
            READY_TO_ENROLL[uid].quests.pop(0)

    elif text == cnst.BTN_CANCEL:
        if uid in READY_TO_ENROLL:
            # READY_TO_ENROLL[uid].answers.clear()
            READY_TO_ENROLL[uid].answers.append('Пользователь не завершил процедуру.')
            # READY_TO_ENROLL[uid].number = ''
            # READY_TO_ENROLL[uid].email = ''
            mt.send_msg_to_admins(READY_TO_ENROLL[uid])
            mt.send_data_to_uon(READY_TO_ENROLL[uid], uid)
        if uid in TIMEOUT_THREADS:
            TIMEOUT_THREADS[uid].stop()
            utils.del_uid_from_dict(uid, TIMEOUT_THREADS)
        utils.del_uid_from_dict(uid, READY_TO_ENROLL)
        mt.send_message(uid, cnst.MSG_CANCELED_MESSAGE, utils.get_user_keyboard())

    # Обработка ввода данных пользователя
    elif uid in READY_TO_ENROLL:
        if len(READY_TO_ENROLL[uid].quests) > 0:
            if len(READY_TO_ENROLL[uid].quests) == 1:
                READY_TO_ENROLL[uid].answers.append(text)
                msg = db.get_mail_quest()
                mt.send_message(uid, msg.format(READY_TO_ENROLL[uid].name), cnst.KEYBOARD_END_AND_SKIP)
                READY_TO_ENROLL[uid].quests.pop(0)
            else:
                k = None
                READY_TO_ENROLL[uid].answers.append(text)
                q = READY_TO_ENROLL[uid].quests.pop(0)
                if len(q.answs) > 0:
                    answrs = q.answs.split('; ')
                    k = utils.get_keyboard_from_list(answrs, cnst.cancel_btn)
                else:
                    k = cnst.KEYBOARD_CANCEL
                mt.send_message(uid, q.quest.format(READY_TO_ENROLL[uid].name), k)
        elif not READY_TO_ENROLL[uid].email_is_sign():
            READY_TO_ENROLL[uid].set_name(uname)
            if utils.is_email_valid(text):
                READY_TO_ENROLL[uid].set_email(text)
                msg = db.get_number_quest()
                mt.send_message(uid, msg, cnst.KEYBOARD_CANCEL)
            else:
                if text == cnst.BTN_SKIP:
                    READY_TO_ENROLL[uid].set_email('')
                    msg = db.get_number_quest()
                    mt.send_message(uid, msg.format(READY_TO_ENROLL[uid].name), cnst.KEYBOARD_CANCEL)
                else:
                    mt.send_message(uid, cnst.MSG_UNCORECT_EMAIL)
        elif not READY_TO_ENROLL[uid].number_is_sign():
            if utils.is_number_valid(text):
                READY_TO_ENROLL[uid].set_number(text)
                mt.send_message(uid, cnst.MSG_ENROLL_COMPLETED.format(READY_TO_ENROLL[uid].name),
                                utils.get_user_keyboard())
                mt.send_msg_to_admins(READY_TO_ENROLL[uid])
                mt.send_data_to_uon(READY_TO_ENROLL[uid], uid)
                READY_TO_ENROLL[uid] = None
                utils.del_uid_from_dict(uid, READY_TO_ENROLL)
                TIMEOUT_THREADS[uid].stop()
                utils.del_uid_from_dict(uid, TIMEOUT_THREADS)
            else:
                mt.send_message(uid, cnst.MSG_UNCORECT_NUMBER)
        if uid in TIMEOUT_THREADS and uid in READY_TO_ENROLL:
            TIMEOUT_THREADS[uid].update()
        elif uid in READY_TO_ENROLL:
            TIMEOUT_THREADS[uid] = mt.ThreadSendDataByTimeout(READY_TO_ENROLL[uid], uid)

    elif uid in READY_TO_LEAVE:
        mt.send_message(uid, cnst.MSG_THANK_YOU, utils.get_user_keyboard())
        mt.send_message(uid, cnst.GROUP_LEAVE_MESSAGE.format(uname))
        admins = db.get_list_bot_admins()
        mt.send_msg_much(admins, cnst.MSG_USER_LEAVED.format(uname, uid, text))
        utils.del_uid_from_dict(uid, READY_TO_LEAVE)

    # Вход для админа
    elif text.lower() in cnst.ADMIN_KEY_WORDS and not_ready_to_enroll(uid):
        if db.is_admin(uid):
            IN_ADMIN_PANEL[uid] = ''
            mt.send_message(uid, cnst.MSG_ADMIN_PANEL, cnst.KEYBOARD_ADMIN)
        else:
            mt.send_message(uid, cnst.MSG_YOU_NOT_ADMIN, utils.get_user_keyboard())
    elif text.lower() == "clearme":
        mt.send_message(uid, "clear", keyboard=cnst.EMPTY_KEYBOARD)
    else:
        mt.new_user_or_not(uid, uname, send_welcome=True)
        # mt.send_msg_welcome(uid, uname, cnst.KEYBOARD_USER)
        # mt.send_message(uid, cnst.MSG_DEFAULT_ANSWER)
    return 'ok'
Exemple #7
0
def admin_message_processing(uid, uname, text):
    if text == cnst.MSG_ADMIN_EXIT:
        utils.del_uid_from_dict(uid, IN_ADMIN_PANEL)
        mt.send_msg_welcome(uid, uname, utils.get_user_keyboard())

    elif text == cnst.BTN_BROADCAST:
        IN_ADMIN_PANEL[uid] = cnst.BTN_BROADCAST
        all_count = vk.get_count_group_followers(cfg.group_id)
        msg_allowed_count = db.get_msg_allowed_count()
        mt.send_message(uid, cnst.MSG_USER_SHORT_INFO.format(all_count, msg_allowed_count))
        mt.send_message(uid, cnst.MSG_ACCEPT_BROADCAST, cnst.KEYBOARD_CANCEL)

    elif text == cnst.BTN_SUBS:
        pg = mt.ThreadSubs(uid)
        pg.start()

    elif text == cnst.BTN_ADMINS:
        IN_ADMIN_PANEL[uid] = cnst.BTN_ADMINS
        admins = db.get_bot_admins()
        msg = cnst.MSG_ADMINS
        for a in admins:
            msg += '🔑 {}, id - {}\n\n'.format(a.name, a.uid)
        msg += cnst.MSG_ADMIN_REMOVING
        mt.send_message(uid, msg, cnst.KEYBOARD_CANCEL)

    elif text == cnst.BTN_ADD_ADMIN:
        IN_ADMIN_PANEL[uid] = cnst.BTN_ADD_ADMIN
        mt.send_message(uid, cnst.MSG_ADMIN_ADDING, cnst.KEYBOARD_CANCEL)

    elif text == cnst.BTN_ADD_BROADCAST_BY_TIME:
        IN_ADMIN_PANEL[uid] = m.BcstByTime()
        mt.send_message(uid, cnst.MSG_ADD_BRDCST_BY_TIME, cnst.KEYBOARD_CANCEL)

    elif text == cnst.BTN_BROADCAST_BY_TIME:
        IN_ADMIN_PANEL[uid] = cnst.BTN_BROADCAST_BY_TIME
        brtcst = db.get_bcsts_by_time()
        msg = '🔥 Запланированные рассылки 🔥\n\n'
        for a in brtcst:
            msg += cnst.MSG_PLANNED_BCST.format(a.start_date, a.time, a.repet_days, a.id, a.msg)
        msg += 'Для удаления рассылки введите её id.'
        mt.send_message(uid, msg, cnst.KEYBOARD_CANCEL)

    elif text == cnst.BTN_QUESTIONS:
        IN_ADMIN_PANEL[uid] = m.QuestMsg()
        msg = utils.get_quest_msgs_as_str()
        mt.send_message(uid, msg)
        mt.send_message(uid, cnst.MSG_ACCEPT_QUEST_MSG, cnst.KEYBOARD_CANCEL_AND_MSG_EDIT)

    elif text == cnst.BTN_FIRST_MSG_EDIT:
        IN_ADMIN_PANEL[uid] = cnst.BTN_FIRST_MSG_EDIT
        msg = db.get_first_msg()
        msg += "\n\n Отправьте новое приветственное сообщение для замены. Используйте {} для обращения к пользователю."
        mt.send_message(uid, msg, keyboard=cnst.KEYBOARD_CANCEL)

    elif text == cnst.BTN_MAIL_MSG_EDIT:
        IN_ADMIN_PANEL[uid] = cnst.BTN_MAIL_MSG_EDIT
        msg = db.get_mail_quest()
        msg += "\n\n Отправьте новое сообщение запроса email для замены."
        mt.send_message(uid, msg, keyboard=cnst.KEYBOARD_CANCEL)

    elif text == cnst.BTN_NUMBER_MSG_EDIT:
        IN_ADMIN_PANEL[uid] = cnst.BTN_NUMBER_MSG_EDIT
        msg = db.get_number_quest()
        msg += "\n\n Отправьте новое сообщение запроса номера для замены."
        mt.send_message(uid, msg, keyboard=cnst.KEYBOARD_CANCEL)

    elif text == cnst.BTN_FIRST_BTN_EDIT:
        IN_ADMIN_PANEL[uid] = cnst.BTN_FIRST_BTN_EDIT
        msg = db.get_first_btn()
        msg += "\n\n Отправьте новый текст кнопки для замены."
        mt.send_message(uid, msg, keyboard=cnst.KEYBOARD_CANCEL)

    elif text == cnst.BTN_COLOR_BTN_EDIT:
        IN_ADMIN_PANEL[uid] = cnst.BTN_COLOR_BTN_EDIT
        msg = db.get_color_btn()
        msg += "\n\n Выберите новый цвет из предложеных"
        k = utils.get_keyboard_from_list(cnst.BTN_COLORS_MAP.keys(), cnst.cancel_btn)
        mt.send_message(uid, msg, k)

    elif text.lower() == cnst.CMD_PARSE_GROUP:
        if db.is_admin(uid):
            pg = mt.ThreadParseGroup(uid)
            pg.start()
        else:
            mt.send_message(uid, cnst.MSG_YOU_NOT_ADMIN, utils.get_user_keyboard())

    elif text == cnst.BTN_LEAVE_REASON:
        IN_ADMIN_PANEL[uid] = cnst.BTN_LEAVE_REASON
        reasons = utils.get_leave_reasons_as_str()
        if reasons == '':
            reasons = '<Не указано ни одной>'
        mt.send_message(uid, cnst.MSG_LEAVE_REASON.format(reasons), cnst.KEYBOARD_CANCEL)

    elif text == cnst.BTN_CANCEL:
        IN_ADMIN_PANEL[uid] = ''
        mt.send_message(uid, cnst.MSG_CANCELED_MESSAGE, cnst.KEYBOARD_ADMIN)

    elif isinstance(IN_ADMIN_PANEL[uid], m.BcstByTime):
        if IN_ADMIN_PANEL[uid].date_time_is_not_sign():
            bcst = utils.parse_bcst(text)
            IN_ADMIN_PANEL[uid] = bcst
            if bcst is None:
                mt.send_message(uid, "Некорректный формат. (22.08.2018 15:22 3)")
            else:
                mt.send_message(uid, cnst.MSG_ACCEPT_BROADCAST)
        else:
            IN_ADMIN_PANEL[uid].msg = text
            mt.send_message(uid, 'Рассылка создана!', cnst.KEYBOARD_ADMIN)
            thread_manager.add_brcst_thread(IN_ADMIN_PANEL[uid])
            IN_ADMIN_PANEL[uid] = None

    elif isinstance(IN_ADMIN_PANEL[uid], m.QuestMsg):
        try:
            if IN_ADMIN_PANEL[uid].quest is not None:
                int('not int')
            qid = int(text)
            utils.del_question(qid)
            mt.send_message(uid, "Удалено", cnst.KEYBOARD_ADMIN)
            IN_ADMIN_PANEL[uid] = ''
        except ValueError:
            qid_str = text.split(' ')[0]

            if utils.isint(qid_str) and \
                            IN_ADMIN_PANEL[uid].quest is None and IN_ADMIN_PANEL[uid].id is None:
                IN_ADMIN_PANEL[uid].id = int(qid_str)
                text = ' '.join(text.split(' ')[1:])
            if IN_ADMIN_PANEL[uid].quest is None:
                IN_ADMIN_PANEL[uid].quest = text
                mt.send_message(uid, cnst.MSG_ADDING_ANSWS_VAR, cnst.KEYBOARD_END_AND_CANCELE)
            elif text == cnst.BTN_END:
                utils.add_quest_msg(IN_ADMIN_PANEL[uid].quest, '', IN_ADMIN_PANEL[uid].id)
                mt.send_message(uid, "Сохранено", cnst.KEYBOARD_ADMIN)
                IN_ADMIN_PANEL[uid] = ''
            else:
                utils.add_quest_msg(IN_ADMIN_PANEL[uid].quest, text, IN_ADMIN_PANEL[uid].id)
                mt.send_message(uid, "Сохранено", cnst.KEYBOARD_ADMIN)
                IN_ADMIN_PANEL[uid] = ''

    elif IN_ADMIN_PANEL[uid] == cnst.BTN_BROADCAST:
        mt.emailing_to_all_subs_keyboard(uid, text)
        IN_ADMIN_PANEL.clear()
        IN_ADMIN_PANEL[uid] = ''

    elif IN_ADMIN_PANEL[uid] == cnst.BTN_FIRST_MSG_EDIT:
        db.update_first_msg(text)
        mt.send_message(uid, "Сохранено", cnst.KEYBOARD_ADMIN)
        IN_ADMIN_PANEL[uid] = ''

    elif IN_ADMIN_PANEL[uid] == cnst.BTN_MAIL_MSG_EDIT:
        db.update_mail_quest(text)
        mt.send_message(uid, "Сохранено", cnst.KEYBOARD_ADMIN)
        IN_ADMIN_PANEL[uid] = ''

    elif IN_ADMIN_PANEL[uid] == cnst.BTN_NUMBER_MSG_EDIT:
        db.update_number_quest(text)
        mt.send_message(uid, "Сохранено", cnst.KEYBOARD_ADMIN)
        IN_ADMIN_PANEL[uid] = ''

    elif IN_ADMIN_PANEL[uid] == cnst.BTN_FIRST_BTN_EDIT:
        db.update_first_btn(text)
        mt.send_message(uid, "Сохранено", cnst.KEYBOARD_ADMIN)
        IN_ADMIN_PANEL[uid] = ''

    elif IN_ADMIN_PANEL[uid] == cnst.BTN_COLOR_BTN_EDIT:
        color = cnst.BTN_COLORS_MAP[text]
        if color is None:
            mt.send_message(uid, "Выберите из предложенных")
        else:
            db.update_color_btn(color)
            mt.send_message(uid, "Сохранено", cnst.KEYBOARD_ADMIN)
            IN_ADMIN_PANEL[uid] = ''

    elif IN_ADMIN_PANEL[uid] == cnst.BTN_ADMINS:
        try:
            admin_id = int(text)
            db.delete_admin(admin_id)
            msg = cnst.MSG_ADMIN_REMOVED
            mt.send_message(uid, msg, cnst.KEYBOARD_ADMIN)
            IN_ADMIN_PANEL[uid] = ''
        except ValueError:
            msg = cnst.MSG_VALUE_ERROR
            mt.send_message(uid, msg)

    elif IN_ADMIN_PANEL[uid] == cnst.BTN_ADD_ADMIN:
        try:
            admin_id = int(text)
            name = vk.get_user_name(admin_id)
            db.add_bot_admin(admin_id, name)
            mt.send_message(uid, cnst.MSG_ADMIN_SUCCCES_ADDED, cnst.KEYBOARD_ADMIN)
            IN_ADMIN_PANEL[uid] = ''
        except ValueError:
            msg = cnst.MSG_VALUE_ERROR
            mt.send_message(uid, msg)

    elif IN_ADMIN_PANEL[uid] == cnst.BTN_BROADCAST_BY_TIME:
        try:
            id = int(text)
            thread_manager.delete_brcst(id)
            mt.send_message(uid, "Запланированная рассылка удалена", cnst.KEYBOARD_ADMIN)
            IN_ADMIN_PANEL[uid] = ''
        except ValueError:
            msg = cnst.MSG_VALUE_ERROR
            mt.send_message(uid, msg)

    elif IN_ADMIN_PANEL[uid] == cnst.BTN_LEAVE_REASON:
        db.delete_all_leave_reason()
        count = utils.save_leave_reasons(text)
        mt.send_message(uid, cnst.MSG_LEAVE_REASON_SAVED.format(str(count)), cnst.KEYBOARD_ADMIN)
        IN_ADMIN_PANEL[uid] = ''
    else:
        pass