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
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)
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)
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)