Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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')
Exemplo n.º 3
0
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()