def watch_wishlist_inline(chosen_inline_result): """ inline-метод, позволяющий публиковать в чате игры из своего вишлиста :param chosen_inline_result: пустая строка """ print('общий инлайнер') try: with session_scope() as session: wishes = Wish.get_all(user_id=chosen_inline_result.from_user.id, session=session) games = [ Game.get(id=wish.game_id, session=session) for wish in wishes ] bot.answer_inline_query( inline_query_id=chosen_inline_result.id, results=[ types.InlineQueryResultPhoto( id=game.id, title=game.name, photo_url=game.poster_url, thumb_url=game.poster_url, caption=str(game), parse_mode='MARKDOWN', input_message_content=types.InputMediaPhoto( caption=str(game), parse_mode='MARKDOWN', media=get_image_bytes(game.poster_url)), ) for i, game in enumerate( sorted(games, key=lambda x: x.name)) ], switch_pm_text='Добавить игр?', switch_pm_parameter='start') except Exception as e: print(e)
def add_game(message): """ добавить игру в вишлист, пример: `/add https://store.playstation.com/ru-ru/concept/10000237` или `/add 10000237` добавить в вишлист Assassin's Creed Valhalla """ try: with session_scope() as session: wish, is_created = Wish.get_or_create(user_id=message.chat.id, game_id=message.text.split( ' ', maxsplit=1)[1], session=session) game = Game.get(id=wish.game_id, session=session) if is_created: response = f'Игра успешно добавлена в твой вишлист: {game}.' else: response = f'Эта игра уже есть в твоём вишлисте: {game}.' if game.poster_url: bot.send_photo(chat_id=message.chat.id, photo=get_image_bytes(game.poster_url), parse_mode='MARKDOWN', caption=response) return except ValueError as ve: response = str(ve) bot.send_message(message.chat.id, response, parse_mode='MARKDOWN')
def get_wishlist(message): """просто получить вишлист""" with session_scope() as session: wishlist = Wish.get_all(user_id=message.chat.id, session=session) games = [ Game.get(id=wish.game_id, session=session) for wish in wishlist ] if games: response = '\n'.join([ f'{i}) {game}' for i, game in enumerate(sorted(games, key=lambda x: x.name), start=1) ]) else: response = 'Твой вишлист пуст :(' bot.send_message(chat_id=message.chat.id, text=response, parse_mode='MARKDOWN')
def do_jaccard(query, max_results): tag_set = set(query.tags.keys()) matching_app_ids = Tag.get_games_with_tags(tag_set) to_get = set() for games in matching_app_ids.values(): to_get.update(games) to_get.remove(query.app_id) games = Game.get(to_get) scores = [(jaccard_sim(tag_set, set(g.tags.keys())), g.score_rank, g) for g in games.values()] # Magic trick: Python sorts tuples element-wise, so if the first value in a pair of tuples # is equal, it will sort by the next and so on. Since the score_rank is second element, # games with equal Jaccard will then be sorted by score_rank. scores.sort(reverse=True) scores = map(itemgetter(2), scores) if max_results is None: return scores else: return scores[:max_results]
def search(): app_id = request.args.get("app_id", "").strip() or None query = request.args.get("search", "").strip() or None only_library_vector = request.args.get("only_library_vector", "off") == "on" removed_features = request.args.get("removed_features", "").decode('base64').split(",") or [] removed_features = Game.get_feature_indices(removed_features) if only_library_vector and g.library_vector is not None and g.game_list is not None: return render_ranking_page(None, True, removed_features=removed_features) elif app_id is not None and app_id.isdigit(): game = Game.get(int(app_id)) if game is not None: return render_ranking_page(game, False, removed_features=removed_features) else: return render_search_template(no_such_app_id=True) elif query is not None and len(query) > 0: game = Game.find_by_name(query) if game is not None: return render_ranking_page(game, False, removed_features=removed_features) else: app.logger.info("No result for " + query.encode("ascii", "ignore")) didyoumean1, didyoumean2 = Game.correct_game_name(query, max_results=2) return render_search_template(didyoumean1=didyoumean1, didyoumean2=didyoumean2, query=query) else: return render_search_template()