Skip to content

Commit fa7e8dd

Browse files
committed
✅ Add test for Telegram Middleware
1 parent c6e81a1 commit fa7e8dd

File tree

5 files changed

+379
-9
lines changed

5 files changed

+379
-9
lines changed

nonebot_plugin_all4one/middlewares/onebot/v12.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ async def send_message(
8989
message=message,
9090
**kwargs,
9191
)
92-
return self.bot.send_message(
92+
return await self.bot.send_message(
9393
detail_type=detail_type, message=message, **kwargs
9494
) # type:ignore
9595

nonebot_plugin_all4one/middlewares/telegram.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from pathlib import Path
22
from typing import Any, Dict, List, Union, Literal, Optional
33

4-
from httpx import AsyncClient
54
from pydantic import parse_obj_as
65
from nonebot.adapters.onebot.v12 import UnsupportedSegment
76
from nonebot.adapters.telegram.message import File, Entity
@@ -124,13 +123,14 @@ async def to_onebot_message(self, message: Message) -> OneBotMessage:
124123
for segment in message_list:
125124
if segment.type in ("image", "voice", "audio", "video", "file"):
126125
file = await self.bot.get_file(segment.data["file_id"])
127-
async with AsyncClient() as client:
128-
segment.data["file_id"] = await upload_file(
129-
Path(file.file_path).name, # type:ignore
130-
self.get_platform(),
131-
file.file_id,
132-
url=f"https://api.telegram.org/file/bot{self.bot.bot_config.token}/{file.file_path}",
133-
)
126+
if file.file_path is None:
127+
continue
128+
segment.data["file_id"] = await upload_file(
129+
Path(file.file_path).name,
130+
self.get_platform(),
131+
file.file_id,
132+
url=f"https://api.telegram.org/file/bot{self.bot.bot_config.token}/{file.file_path}",
133+
)
134134
return OneBotMessage(message_list)
135135

136136
async def send(

tests/telegram/test_telegram.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import json
2+
from pathlib import Path
3+
4+
from nonebug import App
5+
from nonebot.adapters.telegram import Bot, Event
6+
from nonebot.adapters.telegram.model import File
7+
from nonebot.adapters.telegram.config import BotConfig
8+
from nonebot.adapters.onebot.v12 import PrivateMessageEvent
9+
10+
bot_config = BotConfig(token="1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHI")
11+
12+
13+
async def test_to_onebot_event(app: App):
14+
from nonebot_plugin_all4one.middlewares.telegram import Middleware
15+
16+
with (Path(__file__).parent / "updates.json").open("r", encoding="utf8") as f:
17+
test_updates = json.load(f)
18+
19+
async with app.test_api() as ctx:
20+
bot = ctx.create_bot(base=Bot, self_id=bot_config) # type:ignore
21+
middleware = Middleware(bot)
22+
23+
event = Event.parse_event(test_updates[0])
24+
event = await middleware.to_onebot_event(event)
25+
assert isinstance(event[0], PrivateMessageEvent)
26+
27+
event = Event.parse_event(test_updates[3])
28+
event = await middleware.to_onebot_event(event)
29+
assert isinstance(event[0], PrivateMessageEvent)
30+
assert event[0].message[0].type == "reply"
31+
32+
event = Event.parse_event(test_updates[6])
33+
ctx.should_call_api(
34+
"get_file",
35+
{"file_id": "AwADBAADbXXXXXXXXXXXGBdhD2l6_XX"},
36+
File(file_id="AwADBAADbXXXXXXXXXXXGBdhD2l6_XX", file_unique_id=""),
37+
)
38+
event = await middleware.to_onebot_event(event)
39+
assert isinstance(event[0], PrivateMessageEvent)
40+
assert event[0].message[0].type == "audio"
41+
42+
event = Event.parse_event(test_updates[7])
43+
ctx.should_call_api(
44+
"get_file",
45+
{"file_id": "AwADBAADbXXXXXXXXXXXGBdhD2l6_XX"},
46+
File(file_id="AwADBAADbXXXXXXXXXXXGBdhD2l6_XX", file_unique_id=""),
47+
)
48+
event = await middleware.to_onebot_event(event)
49+
assert isinstance(event[0], PrivateMessageEvent)
50+
assert event[0].message[0].type == "voice"
51+
52+
event = Event.parse_event(test_updates[8])
53+
ctx.should_call_api(
54+
"get_file",
55+
{"file_id": "AwADBAADbXXXXXXXXXXXGBdhD2l6_XX"},
56+
File(file_id="AwADBAADbXXXXXXXXXXXGBdhD2l6_XX", file_unique_id=""),
57+
)
58+
event = await middleware.to_onebot_event(event)
59+
assert isinstance(event[0], PrivateMessageEvent)
60+
assert event[0].message[0].type == "file"

0 commit comments

Comments
 (0)