def check_in_db_ready_to_change(new_str, id, type_of_messenger): session = data_base.get_sqlachemy_session() for row in session.query(User.ready_to_change).filter( or_(User.id_vk == id, User.id_teleg == id)): if row.ready_to_change == 'true': return change_platform(new_str, id, type_of_messenger) return constants.STR_NO_ANSWER
def save_user_id(user_id, type_of_messenger): session = data_base.get_sqlachemy_session() rows = session.query(User.id_teleg, User.id_vk) i = 0 # индекс для перебора строк rowcount = rows.count() # количество строк из БД # Если пришло сообщение из ВК if type_of_messenger == constants.VK_MESSENGER['messenger_name']: for row in rows: if row.id_vk != user_id: i += 1 # Если совпадений не нашлось (rowcount == i) , то пользователь новый: возвращаем True и записываем id в БД if rowcount - i == 0: session.add(User(id_vk=user_id, ready_to_change='false')) session.commit() return True # Если пришло сообщение из Телеги elif type_of_messenger == constants.TELEGRAM_MESSENGER['messenger_name']: for row in rows: if row.id_teleg != user_id: i += 1 # Если совпадений не нашлось (rowcount == i) , то пользователь новый: возвращаем True и записываем id в БД if rowcount - i == 0: session.add(User(id_teleg=user_id, ready_to_change='false')) session.commit() return True # Если id уже есть в базе, и пользователь просто так написал /start, то возвращаем False return False
def send_message_in_new_platform(new_str, id, type_of_messenger): new_id = cast_to_int(new_str) session = data_base.get_sqlachemy_session() # Прислали из вк айди на телегу if type_of_messenger == constants.VK_MESSENGER['messenger_name']: rows = session.query(User.id_last_message, User.ready_to_change, User.id_teleg).filter(User.id_vk == id) for row in rows: if row.ready_to_change == 'true' and row.id_last_message == constants.SYSTEM_CONSTANT_CHANGING_TO_TELEGRAM: row.id_teleg = new_id row.ready_to_change = 'false' session.commit() bot_teleg.Bot.send_new_mes(bot_teleg.Bot, new_id) return constants.STR_ID_WAS_SAVED # Прислали из телеги айди на вк elif type_of_messenger == constants.TELEGRAM_MESSENGER['messenger_name']: rows = session.query(User).filter(User.id_teleg == id) for row in rows: if row.ready_to_change == 'true' and row.id_last_message == constants.SYSTEM_CONSTANT_CHANGING_TO_VK: bot_vk.Bot.send_new_mes(bot_vk.Bot, new_id) row.id_vk = new_id row.ready_to_change = 'false' session.commit() return constants.STR_ID_WAS_SAVED return constants.STR_NO_ANSWER
def get_answer_from_data_base(new_str, id): session = data_base.get_sqlachemy_session() rows = session.query(Quest.id_quest, Quest.text_quest, Quest.text_quest_answer) for row in rows: # Получаем массив элементов из строки text_quest, варианты которой разделены / и ищем сходства for i in range(len(row.text_quest.split('/'))): if row.text_quest.split('/')[i].startswith(new_str): id_quest = row.id_quest save_quest_id(id, id_quest) return row.text_quest_answer i += 1 return constants.STR_NO_ANSWER
def change_platform(new_str, id, type_of_messenger): session = data_base.get_sqlachemy_session() for row in session.query(User).filter( or_(User.id_vk == id, User.id_teleg == id)): # защита от дурака: пользователь был в том же мессенджере, который выбрал if (type_of_messenger == constants.VK_MESSENGER['messenger_name'] and new_str == constants.VK_MESSENGER['messenger_choice'] or type_of_messenger == constants.TELEGRAM_MESSENGER['messenger_name'] and new_str == constants.TELEGRAM_MESSENGER['messenger_choice']): row.ready_to_change = 'false' session.commit() return constants.STR_RIGHT_CHANNEL # если были в вк и уходим в телегу elif type_of_messenger == constants.VK_MESSENGER['messenger_name'] and \ new_str == constants.TELEGRAM_MESSENGER['messenger_choice']: # при наличии id teleg if row.id_teleg is not None: # изменяем состояние пользователя row.ready_to_change = 'false' session.commit() # отправляем сообщение в выбранной платформе bot_teleg.Bot.send_new_mes(bot_teleg.Bot, row.id_teleg) return constants.STR_CHANGED_FROM_VK_TO_TELEG else: # при отсутствии id teleg запрашиваем ввод id row.id_last_message = constants.SYSTEM_CONSTANT_CHANGING_TO_TELEGRAM session.commit() return constants.STR_INPUT_ID_TELEG # если были в телеге и уходим в вк elif type_of_messenger == constants.TELEGRAM_MESSENGER['messenger_name'] and \ new_str == constants.VK_MESSENGER['messenger_choice']: # при наличии id vk if row.id_vk is not None: # изменяем состояние пользователя row.ready_to_change = 'false' session.commit() # отправляем сообщение в выбранной платформе bot_vk.Bot.send_new_mes(bot_vk.Bot, row.id_vk) return constants.STR_CHANGE_FROM_TELEG_TO_VK else: # при отсутствии id vk запрашиваем ввод id row.id_last_message = constants.SYSTEM_CONSTANT_CHANGING_TO_VK session.commit() return constants.STR_INPUT_ID_VK
def save_quest_id(user_id, quest_id): session = data_base.get_sqlachemy_session() # Если запрос на смену платформы if quest_id == constants.QUEST_ID_TO_START_CHANGE_PLATFORM: users = session.query(User).filter( or_(User.id_teleg == user_id, User.id_vk == user_id)) for user in users: user.id_last_message = quest_id user.ready_to_change = 'true' session.commit() else: users = session.query(User).filter( or_(User.id_teleg == user_id, User.id_vk == user_id)) for user in users: user.id_last_message = quest_id user.ready_to_change = 'false' session.commit()