def vkinder_init_command(self, event): #корневой раздел сервиса знакомств session = Session() dating_id = event.user_id user = session.query(DatingUser).filter(DatingUser.dating_id == dating_id).all() if len(user) == 0: # если отсутствет информация о пользователе то создаётся запись в БД self.add_new_dating_user(event) return self.vkinder_init_command(event) else: self.write_msg(event.user_id, "что будем делать?")#переходы из корневого раздела к другим командам for event in self.longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW: if event.to_me: request = event.text if request == "новые партнёры": self.search_new_partners(event) elif request == "покажи понравившихся": self.see_liked(event) elif request == 'покажи чс': self.see_blacklisted(event) elif request == 'обнови информацию': self.update_user_data(event) elif request == 'удали понравившихся': self.drop_liked(event) elif request == 'удали чс': self.drop_blacklisted(event) elif request == 'удали пользователя': self.drop_user_data(event) elif request == 'в начало': self.write_msg(event.user_id, "перешли в начало") return else: self.show_vkinder_commands(event)
def search_new_partners(self, event): # получение исходных данных для поиска партнёров session = Session() user = session.query(DatingUser).all() age_min = user[0].age_min age_max = user[0].age_max city_id = user[0].city_id offset = 0 sex = user[0].partners_sex self.show_possible_partners(event, search_token, offset, city_id, sex, age_min, age_max)
def see_blacklisted(self, event): #вывод из БД чёрного списка session = Session() id_dater = event.user_id blacklisted_users = session.query(BlacklistedUser).filter(BlacklistedUser.id_dater == id_dater).all() for user in blacklisted_users: first_name = user.first_name last_name = user.last_name id = user.blacklisted_id bl_user = first_name + ' ' + last_name + ' ' + 'https://vk.com/id' + str(id) self.write_msg(event.user_id, bl_user)
def drop_user_data(self, event): self.write_msg(event.user_id, 'вы уверены?') reply = self.wait_command() if reply == 'да': session = Session() self.drop_blacklisted(event) self.drop_liked(event) dating_id = event.user_id session.query(DatingUser).filter(DatingUser.dating_id == dating_id).delete() self.write_msg(event.user_id, 'данные удалены') else: self.write_msg(event.user_id, 'ну и хорошо')
def database_check(check_id): # метод для проверки на вхождение в БД session = Session() liked_users = session.query(MatchingUser).all() liked_users_list = [liked_user.matching_id for liked_user in liked_users] disliked_users = session.query(BlacklistedUser).all() disliked_users_list = [ disliked_user.blacklisted_id for disliked_user in disliked_users ] if check_id in liked_users_list or check_id in disliked_users_list: return True else: return False
def see_liked(self, event): #вывод из БД понравившихся session = Session() id_dater = event.user_id liked_users = session.query(MatchingUser).filter(MatchingUser.id_dater == id_dater).all() for liked_user in liked_users: first_name = liked_user.first_name last_name = liked_user.last_name id = liked_user.matching_id user_info = first_name + ' ' + last_name + ' ' + 'https://vk.com/id' + str(id) self.write_msg(event.user_id, user_info) photos = session.query(Photos).filter(Photos.id_matcher == id).all() for photo in photos: if id == photo.id_matcher: self.write_msg(event.user_id, photo.photo_link)
def update_user_data(self, event): #метод для обновления информации для поиска session = Session() user = session.query(DatingUser).all()[0] id = user.dating_id self.write_msg(event.user_id, f'Укажите минимальный возраст для поиска партнёров') age_min = self.wait_command() self.write_msg(event.user_id, f'Укажите максимальный возраст для поиска партнёров') age_max = self.wait_command() self.write_msg(event.user_id, f'Укажите пол партнёров для поиска поиска, м или ж') partners_sex = self.wait_command() if partners_sex == 'м': partners_sex = 2 elif partners_sex == 'ж': partners_sex = 1 else: self.write_msg(event.user_id, f'ничего не понял, спрошу ещё раз') return self.update_user_data(event) session.query(DatingUser).filter(DatingUser.dating_id == id).update( {"age_min": age_min, "age_max": age_max, "partners_sex": partners_sex} ) session.commit() self.write_msg(event.user_id, 'информация обновлена')
def drop_liked(self, event): session = Session() id_dater = event.user_id liked_users = session.query(MatchingUser).filter(MatchingUser.id_dater == id_dater).all() for liked_user in liked_users: id_matcher = liked_user.matching_id session.query(Photos).filter(Photos.id_matcher == id_matcher).delete() session.query(MatchingUser).filter(MatchingUser.id_dater == id_dater).delete() self.write_msg(event.user_id, 'список понравившихся очищен')
def add_blocked(self, entry_id): #метод для записи в БД чёрного списка session = Session() user = session.query(DatingUser).all() id_dater = user[0].dating_id blacklisted_id = entry_id[2] first_name = entry_id[0] last_name =entry_id[1] disliked_iser = BlacklistedUser(blacklisted_id=blacklisted_id, first_name=first_name, last_name=last_name, id_dater=id_dater) session.add(disliked_iser) session.commit()
def add_new_dating_user(self, event): #метод для первоначального добавления пользователя session = Session() self.write_msg(event.user_id, 'Необходимо ввести данные для работы бота VKinder') vk_id = event.user_id r = requests.get( 'https://api.vk.com/method/users.get', params={ 'access_token': vk_token, 'v': 5.89, 'user_ids': vk_id, 'fields': 'bdate, sex, city', 'name_case': 'Nom' } ) r = r.json() first_name = r['response'][0]['first_name'] last_name = r['response'][0]['last_name'] city_name = r['response'][0]['city']['title'] city_id = r['response'][0]['city']['id'] bdate = r['response'][0]['bdate'] sex = r['response'][0]['sex'] self.write_msg(event.user_id, f'Укажите минимальный возраст для поиска партнёров') age_min = self.wait_command() # print(age_min) self.write_msg(event.user_id, f'Укажите максимальный возраст для поиска партнёров') age_max = self.wait_command() self.write_msg(event.user_id, f'Укажите пол партнёров для поиска поиска, м или ж') partners_sex = self.wait_command() if partners_sex == 'м': partners_sex = 2 elif partners_sex == 'ж': partners_sex = 1 else: self.write_msg(event.user_id, f'ничего не понял, спрошу ещё раз') return self.add_new_dating_user(event) user = DatingUser(dating_id=vk_id, first_name=first_name, last_name=last_name, city_name=city_name, city_id=city_id, bdate=bdate, age_min=age_min, age_max=age_max, sex=sex, partners_sex=partners_sex) session.add(user) session.commit() self.write_msg(event.user_id, f'Пользователь {vk_id} добавлен')
def drop_blacklisted(self, event): session = Session() id_dater = event.user_id session.query(BlacklistedUser).filter(BlacklistedUser.id_dater == id_dater).delete() self.write_msg(event.user_id, 'список чс очищен')
def add_liked(self, top3_pics, matching_id): #метод для записи в БД понравившихся пользователей session = Session() user = session.query(DatingUser).all() id_dater = user[0].dating_id r = requests.get( 'https://api.vk.com/method/users.get', params={ 'access_token': vk_token, 'v': 5.89, 'user_ids': matching_id, 'fields': 'bdate, sex', 'name_case': 'Nom' } ) r = r.json() first_name = r['response'][0]['first_name'] last_name = r['response'][0]['last_name'] try: bdate = r['response'][0]['bdate'] except: bdate = 'NA' sex = r['response'][0]['sex'] liked_user = MatchingUser(matching_id=matching_id, first_name=first_name, last_name=last_name, bdate=bdate, id_dater=id_dater, sex=sex) session.add(liked_user) session.commit() for photo in top3_pics: pic_link = photo[0] pic_likes = photo[1] photo = Photos(id_matcher=matching_id, photo_link=pic_link, likes_count=pic_likes) session.add(photo) session.commit()