Skip to content

Commit 900348e

Browse files
committed
🐛 fix Target send in multi-adapter
1 parent 5a0038b commit 900348e

2 files changed

Lines changed: 44 additions & 9 deletions

File tree

src/nonebot_plugin_alconna/uniseg/message.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1364,15 +1364,16 @@ async def send(
13641364
except LookupError as e:
13651365
raise SerializeFailed(lang.require("nbp-uniseg", "event_missing")) from e
13661366
if not bot:
1367-
try:
1368-
bot = current_bot.get()
1369-
except LookupError as e:
1370-
if not isinstance(target, Target):
1371-
raise SerializeFailed(lang.require("nbp-uniseg", "bot_missing")) from e
1367+
if isinstance(target, Target):
13721368
try:
13731369
bot = await target.select()
1374-
except Exception as e1:
1375-
raise SerializeFailed(lang.require("nbp-uniseg", "bot_missing")) from e1
1370+
except Exception as e:
1371+
raise SerializeFailed(lang.require("nbp-uniseg", "bot_missing")) from e
1372+
else:
1373+
try:
1374+
bot = current_bot.get()
1375+
except LookupError as e:
1376+
raise SerializeFailed(lang.require("nbp-uniseg", "bot_missing")) from e
13761377
if at_sender:
13771378
if isinstance(at_sender, str):
13781379
self.insert(0, At("user", at_sender)) # type: ignore

tests/test_target_scope.py

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,19 @@
33
import pytest
44
from nonebug import App
55
from pytest_mock import MockerFixture
6-
from nonebot import get_driver, get_adapter
76
from nonebot.adapters.qq import Bot as QQBot
87
from nonebot.adapters.qq import Adapter as QQAdapter
98
from nonebot.adapters.satori import Bot as SatoriBot
109
from nonebot.adapters.onebot.v11 import MessageSegment
10+
from nonebot import get_driver, on_command, get_adapter
1111
from nonebot.adapters.onebot.v11 import Bot as Onebot11Bot
1212
from nonebot.adapters.onebot.v12 import Bot as Onebot12Bot
1313
from nonebot.adapters.satori import Adapter as SatoriAdapter
1414
from nonebot.adapters.onebot.v11 import Adapter as Onebot11Adapter
1515
from nonebot.adapters.onebot.v12 import Adapter as Onebot12Adapter
1616
from nonebot.adapters.satori.models import User, Guild, Channel, PageResult, ChannelType
1717

18-
from tests.fake import fake_satori_bot_params
18+
from tests.fake import fake_satori_bot_params, fake_message_event_guild
1919

2020

2121
@pytest.mark.asyncio()
@@ -109,3 +109,37 @@ async def test_enable(app: App, mocker: MockerFixture):
109109
driver = get_driver()
110110
driver._bot_connection_hook.clear()
111111
driver._bot_disconnection_hook.clear()
112+
113+
114+
@pytest.mark.asyncio()
115+
async def test_switch(app: App, mocker: MockerFixture):
116+
from nonebot.adapters.qq import Message
117+
118+
from nonebot_plugin_alconna import Target, UniMessage, SupportScope
119+
120+
matcher = on_command("test_switch", priority=5)
121+
122+
@matcher.handle()
123+
async def h_():
124+
await UniMessage.text("hello").send()
125+
target = Target("123", private=True, scope=SupportScope.qq_client)
126+
await UniMessage.text("world").send(target=target)
127+
128+
async with app.test_matcher(matcher) as ctx:
129+
qq_adapter = get_adapter(QQAdapter)
130+
qq_bot = ctx.create_bot(base=QQBot, adapter=qq_adapter, self_id="1", bot_info=None)
131+
132+
onebot11_adapter = get_adapter(Onebot11Adapter)
133+
_ = ctx.create_bot(base=Onebot11Bot, adapter=onebot11_adapter, self_id="2")
134+
135+
event = fake_message_event_guild(user_id="11111", message=Message("/test_switch"))
136+
ctx.receive_event(qq_bot, event)
137+
ctx.should_call_send(event, Message("hello"))
138+
ctx.should_call_api(
139+
"send_msg",
140+
{
141+
"message_type": "private",
142+
"user_id": 123,
143+
"message": [MessageSegment(type="text", data={"text": "world"})],
144+
},
145+
)

0 commit comments

Comments
 (0)