Пример #1
0
async def handler(message: Message) -> NoReturn:
    """
    Default handler that handles every message
    ---
    Attachment types:
    1. Audio Message/Photo
    2. Video (sent as a link because of TG API limits and also to save TG space)
    3. Sticker (cannot be parsed, so instead just becomes "*sticker*")
    Handling:
    - If there are no *valid* attachments, then only text will be sent
    """
    logger.info("New message")
    logger.debug(str(message))
    # VK attachment limit workaround
    # Also needed to have right model parsing
    logger.debug("Requesting message data")
    message_data = (await bot_bp.api.messages.get_by_id(message_ids=[message.id])).items[0]
    message.attachments = message_data.attachments
    message.fwd_messages = message_data.fwd_messages
    #
    logger.debug("Requesting sender and attachments")
    bot = Bot(data_config.bot_token)
    sender = await MessageHelper.get_sender(data_config.user_token, message)
    attachments = MessageHelper.get_valid_attachments(message)

    message_template = "{head}:\n{text}"
    formatted_message = message_template.format(head=MessageHelper.get_header(sender, message),
                                                text=MessageHelper.get_text(message.text))

    # This is horrible, I know
    if message.fwd_messages:
        await nested_handler.handle_nested(bot=bot, message=message, tree_getter=nested_handler.get_fwd_tree)
    elif message.reply_message:
        await nested_handler.handle_nested(bot=bot, message=message, tree_getter=nested_handler.get_reply_tree)
    elif len(attachments) == 1:
        logger.info("One attachment, calling handler")
        await attachment_handler.handle_attachment(
            bot,
            formatted_message,
            attachments[0]
        )
    elif message.attachments:
        await nested_handler.handle_nested(bot=bot, message=message, tree_getter=nested_handler.get_fwd_tree)
    elif not message.attachments:
        logger.info("No valid attachments or forwarded messages, sending text")

        await bot.send_message(chat_id=data_config.destination_id,
                               text=formatted_message,
                               parse_mode=PARSE_MODE)

    await bot.close()
    await sleep(0.1)
    return
Пример #2
0
async def duty_signal(message: Message, prefix: str, user_id: int, signal: str, **kwargs):
    db = Database.get_current()
    if user_id != await message.api.user_id:
        return
    message_ = message.dict()
    __model = {
        "user_id": await message.api.user_id,
        "method": "lpSendSignal",
        "secret": db.secret_code,
        "message": {
            "conversation_message_id": message_['conversation_message_id'],
            "from_id": message_['from_id'],
            "date": message.date,
            "text": prefix + ' ' + signal,
            "peer_id": message.peer_id
        },
        "object": {
            "chat": None,
            "from_id": message_['from_id'],
            "value": prefix + ' ' + signal,
            "conversation_message_id": message_['conversation_message_id']
        },
        "vkmessage": message_
    }
    await send_request(__model)
Пример #3
0
async def send_signal(database: Database,
                      message: Message,
                      alias: Alias,
                      separator: str = ' ',
                      signal: Optional[str] = None):
    message_ = message.dict()
    prepared_text = database.self_prefixes[0] + ' ' + alias.command_to
    prepared_text += f"{separator}{signal}" if signal else ''

    __model = {
        "user_id": message_['from_id'],
        "method": "lpSendMySignal",
        "secret": database.secret_code,
        "message": {
            "conversation_message_id": message_['conversation_message_id'],
            "from_id": message_['from_id'],
            "date": message.date,
            "text": prepared_text,
            "peer_id": message.peer_id
        },
        "object": {
            "chat": None,
            "from_id": message_['from_id'],
            "value": prepared_text,
            "conversation_message_id": message_['conversation_message_id']
        },
        "vkmessage": message_
    }

    await send_request(__model)
Пример #4
0
async def self_signal(message: Message, prefix: str, signal: str):
    db = Database.get_current()
    message_ = message.dict()
    __model = {
        "user_id": message_['from_id'],
        "method": "lpSendMySignal",
        "secret": db.secret_code,
        "message": {
            "conversation_message_id": message_['conversation_message_id'],
            "from_id": message_['from_id'],
            "date": message.date,
            "text": prefix + ' ' + signal,
            "peer_id": message.peer_id
        },
        "object": {
            "chat": None,
            "from_id": message_['from_id'],
            "value": prefix + ' ' + signal,
            "conversation_message_id": message_['conversation_message_id']
        },
        "vkmessage": message_
    }

    await send_request(__model)