Example #1
0
def dissect_comment(comment):
    """
    :param comment: comment string
    :raises exceptions.MovieNotFound
    :raises exceptions.EpisodeNotFound
    :raises exceptions.OffensiveWord
    """
    split_command = comment.split(" ")
    requests_command = split_command[0]
    if not any(commands in requests_command.lower() for commands in COMMANDS):
        return

    split_command.pop(0)
    final_comment = " ".join(split_command)

    try:
        title = final_comment.split("[")[0].rstrip()
        if is_episode(title):
            search_episode(EPISODE_LIST, title, raise_resting=False)
        else:
            search_movie(MOVIE_LIST, title, raise_resting=False)
    except IndexError:
        return

    content = REQUEST_RE.findall(final_comment)
    if content:
        [check_offensive_content(text) for text in content]
        return {
            "command": requests_command,
            "title": title,
            "comment": final_comment,
            "content": content,
        }
Example #2
0
def get_requests(filter_type="movies", priority_only=False):
    """
    :param filter: movies or episodes
    :param priority_only: filter requests without priority
    """
    with sqlite3.connect(REQUESTS_DB) as conn:
        result = conn.execute("select * from requests where used=0").fetchall()
        requests = []
        for i in result:
            is_episode_ = is_episode(i[1])

            if filter_type == "movies" and is_episode_:
                continue

            if filter_type == "episodes" and not is_episode_:
                continue

            requests.append({
                "user": i[0],
                "comment": i[1],
                "type": i[2],
                "movie": i[3],
                "content": i[4].split("|"),
                "id": i[5],
                "verified": i[7],
                "priority": i[8],
            })

        random.shuffle(requests)

        if priority_only:
            return [request for request in requests if request.get("priority")]

        return requests
Example #3
0
def handle_request_item(request_dict, published):
    """
    :param request_list: request dictionaries
    :param published: directly publish to Facebook
    """
    block_user(request_dict["user"], check=True)
    request_command = request_dict["type"]
    request_dict["is_episode"] = is_episode(request_dict["comment"])
    request_dict["parallel"] = is_parallel(request_dict["comment"])

    if len(request_dict["content"]) > 8:
        raise exceptions.TooLongRequest

    logger.info(
        f"Request command: {request_command} {request_dict['comment']} "
        f"(Episode: {request_dict['is_episode']})")

    is_multiple = len(request_dict["content"]) > 1
    final_imgs, frames, alt_title = get_images(request_dict, is_multiple,
                                               published)
    request_dict["parallel"] = alt_title

    try:
        post_id = post_request(
            final_imgs,
            frames[0].movie,
            request_dict,
            published,
            request_dict["is_episode"],
        )
    except facepy.exceptions.OAuthError as error:
        message = f"Something is wrong with the Facebook token: {error}"
        webhook = DiscordWebhook(url=DISCORD_WEBHOOK_TEST, content=message)
        webhook.execute()
        sys.exit(message)

    try:
        comment_post(post_id, published, request_dict["is_episode"])
        notify(request_dict["id"], None, published, request_dict["is_episode"])
    except (facepy.exceptions.FacepyError, RequestException) as error:
        logger.error(error, exc_info=True)
    finally:
        if request_dict["is_episode"]:
            insert_episode_request_info_to_db(frames[0].movie,
                                              request_dict["user"])
        else:
            insert_request_info_to_db(frames[0].movie, request_dict["user"])

        update_request_to_used(request_dict["id"])

        logger.info("Request finished successfully")
        return True
Example #4
0
async def search(ctx, *args):
    query = " ".join(args)
    try:
        if is_episode(query):
            result = search_episode(EPISODE_LIST, query, raise_resting=False)
            message = f"{BASE}/episode/{result['id']}"
        else:
            result = search_movie(MOVIE_LIST, query, raise_resting=False)
            message = f"{BASE}/movie/{result['tmdb']}"
    except (MovieNotFound, EpisodeNotFound):
        message = "apoco si pa"

    await ctx.send(message)
Example #5
0
def search_item(query, return_dict=False):
    if is_episode(query):
        EPISODE_LIST = db.get_list_of_episode_dicts()
        result = search_episode(EPISODE_LIST, query, raise_resting=False)
        if not return_dict:
            return f"{BASE}/episode/{result['id']}"
    else:
        MOVIE_LIST = db.get_list_of_movie_dicts()
        result = search_movie(MOVIE_LIST, query, raise_resting=False)
        if not return_dict:
            return f"{BASE}/movie/{result['tmdb']}"

    return result
Example #6
0
def dissect_comment(comment):
    """
    :param comment: comment string
    :raises exceptions.MovieNotFound
    :raises exceptions.EpisodeNotFound
    :raises exceptions.OffensiveWord
    :raises exceptions.IvalidRequest
    """
    split_command = comment.split(" ")
    requests_command = split_command[0]

    if requests_command.lower() not in COMMANDS:
        return

    split_command.pop(0)
    final_comment = " ".join(split_command)

    if requests_command == "!parallel":
        parallels = is_parallel(final_comment)

        try:
            contents = [REQUEST_RE.findall(parallel) for parallel in parallels]
            if any(len(content) > 1
                   for content in contents) or len(parallels) > 3:
                raise InvalidRequest(final_comment)
        except TypeError:
            return

        title, content = "Parallel", ["Parallel"]
    else:
        try:
            title = final_comment.split("[")[0].rstrip()
            if is_episode(title):
                search_episode(EPISODE_LIST, title, raise_resting=False)
            else:
                search_movie(MOVIE_LIST, title, raise_resting=False)
        except IndexError:
            return
        content = REQUEST_RE.findall(final_comment)

    if content:
        [check_offensive_content(text) for text in content]
        return {
            "command": requests_command,
            "title": title,
            "comment": final_comment,
            "content": content,
        }
Example #7
0
def handle_request(request_dict, facebook=True):
    """
    :param request_list: request dictionaries
    :param facebook: add extra info to description key
    """
    request_dict["is_episode"] = is_episode(request_dict["comment"])
    request_dict["parallel"] = is_parallel(request_dict["comment"])

    if len(request_dict["content"]) > 10:
        raise exceptions.TooLongRequest(
            f"Expected less than 11 brackets, found {len(request_dict['content'])}."
        )

    logger.info(f"Request comment: {request_dict['comment']}; "
                f"command: {request_dict['type']}")

    if request_dict["type"] == "!gif":
        if facebook:
            raise exceptions.InvalidRequest(
                "Facebook doesn't support GIF requests.")
        if request_dict["is_episode"]:
            raise exceptions.NotAvailableForCommand(
                "Episodes don't support GIFs yet.")

        movie, final_imgs = handle_gif_request(request_dict,
                                               get_list_of_movie_dicts())
        alt_title = None
    else:
        is_multiple = len(request_dict["content"]) > 1
        final_imgs, frames, alt_title = get_images(request_dict, is_multiple)
        movie = frames[0].movie

    request_dict["parallel"] = alt_title
    request_description = get_description(movie, request_dict, facebook)

    logger.info("Request finished successfully")

    return {
        "description": request_description,
        "images": final_imgs,
        "final_request_dict": request_dict,
        "movie_dict": movie,
    }