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'
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'
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)
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
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'
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'
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