Skip to content

Commit 9cca3e4

Browse files
committed
🍻 ignore at_sender when send to private target
1 parent 2497fb0 commit 9cca3e4

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

src/nonebot_plugin_alconna/uniseg/message.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1380,12 +1380,14 @@ async def send(
13801380
except LookupError as e:
13811381
raise SerializeFailed(lang.require("nbp-uniseg", "bot_missing")) from e
13821382
if at_sender:
1383-
if isinstance(at_sender, str):
1384-
self.insert(0, At("user", at_sender)) # type: ignore
1385-
elif isinstance(target, Event):
1386-
self.insert(0, At("user", target.get_user_id())) # type: ignore
1387-
else:
1388-
raise TypeError("at_sender must be str when target is not Event")
1383+
_target = target if isinstance(target, Target) else get_target(target, bot)
1384+
if not _target.private:
1385+
if isinstance(at_sender, str):
1386+
self.insert(0, At("user", at_sender)) # type: ignore
1387+
elif isinstance(target, Event):
1388+
self.insert(0, At("user", target.get_user_id())) # type: ignore
1389+
else:
1390+
raise TypeError("at_sender must be str when target is not Event")
13891391
if reply_to:
13901392
if isinstance(reply_to, Reply):
13911393
self.insert(0, reply_to) # type: ignore

tests/test_uniseg.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from nonebot.compat import model_dump, type_validate_python
77
from nonebot.adapters.onebot.v11 import Bot, Adapter, Message, MessageSegment
88

9-
from tests.fake import fake_group_message_event_v11
9+
from tests.fake import fake_group_message_event_v11, fake_private_message_event_v11
1010

1111

1212
def ansi(*code) -> str:
@@ -277,6 +277,17 @@ async def handle(msg: MsgId):
277277
MessageSegment.reply(event.message_id + 1) + MessageSegment.at(123) + MessageSegment.text("world!"),
278278
)
279279
ctx.should_call_api("delete_msg", {"message_id": event.message_id + 1})
280+
event1 = fake_private_message_event_v11(message=Message("test_unimsg_send"), user_id=123)
281+
ctx.receive_event(bot, event1)
282+
ctx.should_call_send(
283+
event1,
284+
MessageSegment.reply(event1.message_id) + MessageSegment.text("hello!"),
285+
)
286+
ctx.should_call_send(
287+
event1,
288+
MessageSegment.reply(event1.message_id + 1) + MessageSegment.text("world!"),
289+
)
290+
ctx.should_call_api("delete_msg", {"message_id": event1.message_id + 1})
280291

281292
async with app.test_api() as ctx1:
282293
adapter = get_adapter(Adapter)

0 commit comments

Comments
 (0)