示例#1
0
def new_roadblock(bot: Bot, message: Message) -> None:
    if banned(message.from_user) or message.chat_id == roads_chat \
            or spam(message):
        return

    user_id = message.from_user.id
    with db_session:
        U.get(user_id=user_id).roadblocks_count += 1
    user = bot.get_chat_member(mods_chat, user_id)
    if user['status'] in ('creator', 'administrator', 'member'):
        bypass_moderators(bot, message)
        return

    message.reply_text(BOT_MSG_ACCEPT.format(message.from_user.name))
    msg = BOT_REQUEST_CHECK.format(message.from_user.name)
    mods_message = bot.send_message(mods_chat, msg, reply_markup=mods_keyboard)
    message.forward(mods_chat)

    with db_session:
        Roadblock(author=message.from_user.id,
                  chat_id=message.chat_id,
                  chat_message_id=message.message_id,
                  mods_message_id=mods_message.message_id)
def forward_evidence(client: Bot,
                     message: Message,
                     level: str,
                     rule: str,
                     length: int,
                     score: float = 0.0,
                     more: str = None,
                     general: bool = True) -> Optional[Union[bool, Message]]:
    # Forward the message to the logging channel as evidence
    result = None

    try:
        # Get channel id
        channel_id = glovar.logging_channel_id if general else glovar.long_channel_id

        if not glovar.long_channel_id:
            channel_id = glovar.logging_channel_id

        # 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(rule)}\n")

        # Additional information
        if length:
            text += f"{lang('message_len')}{lang('colon')}{code(length)}\n"

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

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

        if lang("score") in rule:
            text += f"{lang('user_score')}{lang('colon')}{code(f'{score:.1f}')}\n"

        if lang("name") in rule:
            name = get_full_name(message.from_user)

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

            forward_name = get_forward_name(message)

            if forward_name and forward_name != name:
                text += f"{lang('from_name')}{lang('colon')}{code(forward_name)}\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:
            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):
            result = send_message(client, channel_id, text)
            return result

        try:
            result = message.forward(chat_id=channel_id,
                                     disable_notification=True)
        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, channel_id, text, result)
    except Exception as e:
        logger.warning(f"Forward evidence error: {e}", exc_info=True)

    return result
示例#3
0
def send_message(message: Message, chat_id: int) -> Union[MessageId, Message]:
    if REMOVE_TAG:
        return message.copy(chat_id)
    return message.forward(chat_id)