From b5647a2d8c72849fc18036c58fd467b08e480dd6 Mon Sep 17 00:00:00 2001 From: Azide Date: Tue, 30 Jan 2024 01:13:34 +0800 Subject: [PATCH 1/2] =?UTF-8?q?:bug:=20=E4=BD=BF=E7=94=A8=20parse=5Fobj=5F?= =?UTF-8?q?as=20=E6=AD=A3=E7=A1=AE=E5=AE=9E=E4=BE=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nonebot/adapters/telegram/bot.py | 9 ++++- tests/test_bot.py | 59 ++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/nonebot/adapters/telegram/bot.py b/nonebot/adapters/telegram/bot.py index 8185d00..bf611f9 100644 --- a/nonebot/adapters/telegram/bot.py +++ b/nonebot/adapters/telegram/bot.py @@ -237,7 +237,14 @@ async def send_to( if len(files) > 1: # 多个文件 medias = [ - InputMedia(type=file.type, media=file.data["file"]) for file in files + parse_obj_as( + InputMedia, + { + "type": file.type, + "media": file.data.pop("file"), + **file.get("data", {}), + } + ) for file in files ] try: diff --git a/tests/test_bot.py b/tests/test_bot.py index f3a585c..a261a72 100644 --- a/tests/test_bot.py +++ b/tests/test_bot.py @@ -34,3 +34,62 @@ async def test_check_tome(app: App): bot.username = "test" bot._check_tome(event) assert event._tome + +@pytest.mark.asyncio +async def test_send_to(app: App): + from nonebot.adapters.telegram.bot import Bot + from nonebot.adapters.telegram.message import File, Message + from nonebot.adapters.telegram.model import InputMediaPhoto, InputMediaAudio, Chat, Message as ReturnMessage + + Chat.update_forward_refs() + + with (Path(__file__).parent / "updates.json").open("r", encoding="utf8") as f: + test_updates = json.load(f) + test_update = test_updates[0] + test_update["message"]["chat"]["type"] = "group" + test_update["message"]["text"] = "@test" + test_update["message"]["entities"] = [{"type": "mention", "offset": 0, "length": 5}] + event = Event.parse_event(test_update) + assert isinstance(event, GroupMessageEvent) + + async with app.test_api() as ctx: + bot = Bot( + ctx.create_adapter(base=Adapter), + Bot.get_bot_id_by_token(bot_config.token), + config=bot_config, + ) + bot.username = "test" + ctx.should_call_api( + "send_media_group", + { + "chat_id": 1234567890, + "message_thread_id": None, + "media": [ + InputMediaPhoto( + media="test.jpg", + has_spoiler=True, + ), + InputMediaAudio( + media="test.ogg", + ), + ], + "reply_parameters": None, + "disable_notification": None, + "protect_content": None, + "reply_to_message_id": None, + "allow_sending_without_reply": None, + }, + [ + ReturnMessage( + message_id=1, + date=111, + chat=Chat(id=1, type="group") + ).dict(), + ReturnMessage( + message_id=2, + date=222, + chat=Chat(id=2, type="group") + ).dict(), + ] + ) + await bot.send_to(chat_id=1234567890, message=Message([File.photo("test.jpg", has_spoiler=True), File.audio("test.ogg")])) \ No newline at end of file From 5d1e5faaa3f10f2cf850125c3e75cbc347645660 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 29 Jan 2024 17:16:59 +0000 Subject: [PATCH 2/2] :rotating_light: auto fix by pre-commit hooks --- nonebot/adapters/telegram/bot.py | 7 ++++--- tests/test_bot.py | 22 +++++++++++++--------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/nonebot/adapters/telegram/bot.py b/nonebot/adapters/telegram/bot.py index bf611f9..a08a52a 100644 --- a/nonebot/adapters/telegram/bot.py +++ b/nonebot/adapters/telegram/bot.py @@ -238,13 +238,14 @@ async def send_to( # 多个文件 medias = [ parse_obj_as( - InputMedia, + InputMedia, { "type": file.type, "media": file.data.pop("file"), **file.get("data", {}), - } - ) for file in files + }, + ) + for file in files ] try: diff --git a/tests/test_bot.py b/tests/test_bot.py index a261a72..00d15a7 100644 --- a/tests/test_bot.py +++ b/tests/test_bot.py @@ -35,11 +35,14 @@ async def test_check_tome(app: App): bot._check_tome(event) assert event._tome + @pytest.mark.asyncio async def test_send_to(app: App): from nonebot.adapters.telegram.bot import Bot + from nonebot.adapters.telegram.model import Chat from nonebot.adapters.telegram.message import File, Message - from nonebot.adapters.telegram.model import InputMediaPhoto, InputMediaAudio, Chat, Message as ReturnMessage + from nonebot.adapters.telegram.model import Message as ReturnMessage + from nonebot.adapters.telegram.model import InputMediaAudio, InputMediaPhoto Chat.update_forward_refs() @@ -81,15 +84,16 @@ async def test_send_to(app: App): }, [ ReturnMessage( - message_id=1, - date=111, - chat=Chat(id=1, type="group") + message_id=1, date=111, chat=Chat(id=1, type="group") ).dict(), ReturnMessage( - message_id=2, - date=222, - chat=Chat(id=2, type="group") + message_id=2, date=222, chat=Chat(id=2, type="group") ).dict(), - ] + ], + ) + await bot.send_to( + chat_id=1234567890, + message=Message( + [File.photo("test.jpg", has_spoiler=True), File.audio("test.ogg")] + ), ) - await bot.send_to(chat_id=1234567890, message=Message([File.photo("test.jpg", has_spoiler=True), File.audio("test.ogg")])) \ No newline at end of file