Ejemplo n.º 1
0
def refresh_stickers(session, sticker_set, bot, refresh_ocr=False, chat=None):
    """Refresh stickers and set data from telegram."""
    # Get sticker set from telegram and create new a Sticker for each sticker
    stickers = []
    try:
        tg_sticker_set = call_tg_func(bot,
                                      'get_sticker_set',
                                      args=[sticker_set.name])
    except BadRequest as e:
        if e.message == 'Stickerset_invalid' or \
                e.message == 'Requested data is inaccessible':
            sticker_set.deleted = True
            return

        raise e

    # Sometimes file ids in telegram seem to randomly change
    # If this has already happened, merge the two stickers (backup replay)
    # otherwise, change the file id to the new one
    for sticker in sticker_set.stickers:
        try:
            tg_sticker = call_tg_func(bot, 'get_file', args=[sticker.file_id])
        except BadRequest as e:
            if e.message == 'Wrong file id':
                session.delete(sticker)
            continue

        if tg_sticker.file_id != sticker.file_id:
            new_sticker = session.query(Sticker).get(tg_sticker.file_id)
            if new_sticker is not None:
                merge_sticker(session, sticker, new_sticker)

            sticker.file_id = tg_sticker.file_id
            session.commit()

    for tg_sticker in tg_sticker_set.stickers:
        # Ignore already existing stickers if we don't need to rescan images
        sticker = session.query(Sticker).get(tg_sticker.file_id)
        text = None
        if sticker is None or refresh_ocr:
            text = extract_text(tg_sticker)

        # Create new Sticker.
        if sticker is None:
            sticker = Sticker(tg_sticker.file_id)

        # Only set text, if we got some text from the ocr recognition
        if text is not None:
            sticker.text = text

        add_original_emojis(session, sticker, tg_sticker.emoji)
        stickers.append(sticker)
        session.commit()

    sticker_set.name = tg_sticker_set.name.lower()

    sticker_set.title = tg_sticker_set.title.lower()
    sticker_set.stickers = stickers
    sticker_set.complete = True
    session.commit()
Ejemplo n.º 2
0
def test_convert_tag_to_emoji(session, user, sticker_set):
    """Tags will be converted to emojis, if they appear in the original emojis."""
    sticker = sticker_set.stickers[0]
    # Add an original emoji tag to the sticker
    tag = Tag('😲', False, False)
    sticker.tags.append(tag)
    session.commit()

    assert not tag.emoji
    assert not tag.international

    # Now tag the sticker in replace mode
    add_original_emojis(session, sticker, '😲')
    session.commit()

    assert tag.emoji
    assert not tag.international
    assert len(sticker.tags) == 1
    assert sticker.original_emojis[0] in sticker.tags
Ejemplo n.º 3
0
def refresh_stickers(session, sticker_set, bot, refresh_ocr=False, chat=None):
    """Refresh stickers and set data from telegram."""
    # Get sticker set from telegram and create new a Sticker for each sticker
    stickers = []
    try:
        tg_sticker_set = call_tg_func(bot, 'get_sticker_set', args=[sticker_set.name])
    except BadRequest as e:
        if e.message == 'Stickerset_invalid': # noqa
            sticker_set.deleted = True
            return

        raise e

    for tg_sticker in tg_sticker_set.stickers:
        # Ignore already existing stickers if we don't need to rescan images
        sticker = session.query(Sticker).get(tg_sticker.file_id)
        text = None
        if sticker is None or refresh_ocr:
            text = extract_text(tg_sticker)

        # Create new Sticker.
        if sticker is None:
            sticker = Sticker(tg_sticker.file_id)

        # Only set text, if we got some text from the ocr recognition
        if text is not None:
            sticker.text = text

        add_original_emojis(session, sticker, tg_sticker.emoji)
        stickers.append(sticker)
        session.commit()

    sticker_set.name = tg_sticker_set.name.lower()

    sticker_set.title = tg_sticker_set.title.lower()
    sticker_set.stickers = stickers
    sticker_set.complete = True
    session.commit()
Ejemplo n.º 4
0
def refresh_stickers(session, sticker_set, bot, refresh_ocr=False, chat=None):
    """Refresh stickers and set data from telegram."""
    # Get sticker set from telegram and create new a Sticker for each sticker
    stickers = []
    try:
        tg_sticker_set = call_tg_func(bot, "get_sticker_set", args=[sticker_set.name])
    except BadRequest as e:
        if (
            e.message == "Stickerset_invalid"
            or e.message == "Requested data is inaccessible"
        ):
            sticker_set.deleted = True
            sticker_set.completed = True
            # Auto review the task
            if len(sticker_set.tasks) > 0 and sticker_set.tasks[0].type == "scan_set":
                sticker_set.tasks[0].reviewed = True
            return

        raise e

    # Sometimes file ids in telegram seem to randomly change
    # If this has already happened, merge the two stickers (backup replay)
    # otherwise, change the file id to the new one
    for sticker in sticker_set.stickers:
        try:
            tg_sticker = call_tg_func(bot, "get_file", args=[sticker.file_id])
        except BadRequest as e:
            if e.message == "Wrong file id":
                session.delete(sticker)
            continue

        if tg_sticker.file_id != sticker.file_id:
            new_sticker = session.query(Sticker).get(tg_sticker.file_id)
            if new_sticker is not None:
                merge_sticker(session, sticker, new_sticker)

            sticker.file_id = tg_sticker.file_id
            session.commit()

    for tg_sticker in tg_sticker_set.stickers:
        # Ignore already existing stickers if we don't need to rescan images
        sticker = session.query(Sticker).get(tg_sticker.file_id)
        text = None
        # This is broken for now and I don't know why
        if False:  # (sticker is None or refresh_ocr) and not tg_sticker.is_animated:
            text = extract_text(tg_sticker)

        # Create new Sticker.
        if sticker is None:
            sticker = Sticker(tg_sticker.file_id)

        # Only set text, if we got some text from the ocr recognition
        if text is not None:
            sticker.text = text

        sticker.animated = tg_sticker.is_animated
        add_original_emojis(session, sticker, tg_sticker.emoji)
        stickers.append(sticker)
        session.commit()

    sticker_set.name = tg_sticker_set.name.lower()

    sticker_set.title = tg_sticker_set.title.lower()
    sticker_set.stickers = stickers
    sticker_set.complete = True

    # Auto accept everything if the config says so
    review_task = None
    if len(sticker_set.tasks) > 0 and sticker_set.tasks[0].type == "scan_set":
        review_task = sticker_set.tasks[0]

    if review_task and config["mode"]["auto_accept_set"] and not review_task.reviewed:
        sticker_set.reviewed = True
        review_task.reviewed = True

        keyboard = get_tag_this_set_keyboard(sticker_set, review_task.user)
        message = f"Stickerset {sticker_set.name} has been added."
        bot.send_message(review_task.chat.id, message, reply_markup=keyboard)

        newsfeed_chats = session.query(Chat).filter(Chat.is_newsfeed.is_(True)).all()
        for chat in newsfeed_chats:
            bot.send_sticker(chat.id, sticker_set.stickers[0].file_id)

    session.commit()