Пример #1
0
def forward_evidence(client: Client,
                     message: Message,
                     level: str,
                     more: str = None) -> Optional[Union[bool, Message]]:
    # Forward the message to logging channel as evidence
    result = None
    try:
        if not message or not message.from_user:
            return result

        # Basic information
        uid = message.from_user.id
        text = (f"{lang('project')}{lang('colon')}{code(glovar.sender)}\n"
                f"{lang('user_id')}{lang('colon')}{code(uid)}\n"
                f"{lang('level')}{lang('colon')}{code(level)}\n"
                f"{lang('rule')}{lang('colon')}{code(lang('rule_admin'))}\n")

        # Additional information
        if message.game:
            text += f"{lang('message_type')}{lang('colon')}{code(lang('gam'))}\n"
        elif message.service:
            text += f"{lang('message_type')}{lang('colon')}{code(lang('ser'))}\n"

        if message.game:
            text += f"{lang('message_game')}{lang('colon')}{code(message.game.short_name)}\n"

        if message.from_user.is_self:
            if message.from_user.is_self is True:
                if message.entities:
                    for en in message.entities:
                        if not en.user:
                            continue

                        name = get_full_name(en.user)
                        if not name:
                            continue

                        text += f"{lang('user_name')}{lang('colon')}{code(name)}\n"
                        break

                text += f"{lang('more')}{lang('colon')}{code(lang('from_self'))}\n"
            # User didn't use report function wisely, should not forward evidence
            else:
                text += f"{lang('more')}{lang('colon')}{code(message.from_user.is_self)}"

            result = send_message(client, glovar.warn_channel_id, text)
            return result

        name = get_full_name(message.from_user)
        if name:
            text += f"{lang('user_name')}{lang('colon')}{code(name)}\n"

        if message.service and level == lang("action_ban"):
            bio = get_user_bio(client, uid)
            if bio:
                text += f"{lang('user_bio')}{lang('colon')}{code(bio)}\n"

        # Extra information
        if message.contact or message.location or message.venue or message.video_note or message.voice:
            text += f"{lang('more')}{lang('colon')}{code(lang('privacy'))}\n"
        elif message.game or message.service:
            text += f"{lang('more')}{lang('colon')}{code(lang('cannot_forward'))}\n"
        elif more:
            text += f"{lang('more')}{lang('colon')}{code(more)}\n"

        # DO NOT try to forward these types of message
        if (message.contact or message.location or message.venue
                or message.video_note or message.voice or message.game
                or message.service):
            result = send_message(client, glovar.warn_channel_id, text)
            return result

        flood_wait = True
        while flood_wait:
            flood_wait = False
            try:
                result = message.forward(chat_id=glovar.warn_channel_id,
                                         disable_notification=True)
            except FloodWait as e:
                flood_wait = True
                wait_flood(e)
            except Exception as e:
                logger.info(f"Forward evidence message error: {e}",
                            exc_info=True)
                return False

        result = result.message_id
        result = send_message(client, glovar.warn_channel_id, text, result)
    except Exception as e:
        logger.warning(f"Forward evidence error: {e}", exc_info=True)

    return result
Пример #2
0
def forward_evidence(client: Client,
                     message: Message,
                     user: User,
                     level: str,
                     rule: str,
                     more: str = None,
                     general: bool = True) -> Optional[Union[bool, Message]]:
    # Forward the message to the logging channel as evidence
    result = None

    try:
        # Basic information
        uid = user.id
        text = (f"{lang('project')}{lang('colon')}{code(glovar.sender)}\n"
                f"{lang('user_id')}{lang('colon')}{code(uid)}\n"
                f"{lang('level')}{lang('colon')}{code(level)}\n"
                f"{lang('rule')}{lang('colon')}{code(rule)}\n")

        if message.game:
            text += f"{lang('message_type')}{lang('colon')}{code(lang('gam'))}\n"
        elif message.service:
            text += f"{lang('message_type')}{lang('colon')}{code(lang('ser'))}\n"

        if message.contact or message.location or message.venue or message.video_note or message.voice:
            text += f"{lang('more')}{lang('colon')}{code(lang('privacy'))}\n"
        elif message.game or message.service:
            text += f"{lang('more')}{lang('colon')}{code(lang('cannot_forward'))}\n"
        elif more:
            text += f"{lang('more')}{lang('colon')}{code(more)}\n"

        # TODO
        if message.service or not general:
            channel_id = glovar.user_channel_id
        else:
            channel_id = glovar.logging_channel_id

        if not glovar.user_channel_id:
            channel_id = glovar.logging_channel_id

        # DO NOT try to forward these types of message
        if (message.contact or message.location or message.venue
                or message.video_note or message.voice or message.game
                or message.service):
            result = send_message(client, channel_id, text)
            return result

        flood_wait = True
        while flood_wait:
            flood_wait = False
            try:
                result = message.forward(chat_id=channel_id,
                                         disable_notification=True)
            except FloodWait as e:
                flood_wait = True
                wait_flood(e)
            except Exception as e:
                logger.warning(f"Forward evidence message error: {e}",
                               exc_info=True)
                return False

        result = result.message_id
        result = send_message(client, channel_id, text, result)
    except Exception as e:
        logger.warning(f"Forward evidence error: {e}", exc_info=True)

    return result