11import pytest
22from nonebug import App
33from nonebot import get_adapter
4- from arclet .alconna import Alconna
4+ from arclet .alconna import Args , Alconna
55from nonebot .adapters .onebot .v11 .event import Reply
66from nonebot .compat import model_dump , type_validate_python
77from nonebot .adapters .onebot .v11 import Bot , Adapter , Message , MessageSegment
@@ -135,7 +135,7 @@ async def test_fallback(app: App):
135135@pytest .mark .asyncio ()
136136async def test_unimsg_template (app : App ):
137137 from nonebot_plugin_alconna .uniseg import FallbackSegment
138- from nonebot_plugin_alconna import At , Text , Other , UniMessage , on_alconna
138+ from nonebot_plugin_alconna import At , Text , Match , Other , UniMessage , on_alconna
139139
140140 assert UniMessage .template ("{} {}" ).format ("hello" , Other (FallbackSegment .text ("123" ))) == UniMessage (
141141 [Text ("hello " ), Other (FallbackSegment .text ("123" ))]
@@ -159,6 +159,43 @@ async def _():
159159 ctx .should_call_send (event , MessageSegment .reply (event .message_id ) + MessageSegment .at (23 ))
160160 ctx .should_finished (matcher )
161161
162+ matcher1 = on_alconna (Alconna ("test_unimsg_template1" , Args ["foo?" , str ]["bar?" , str ]))
163+
164+ @matcher1 .handle ()
165+ async def _ (foo : Match [str ], bar : Match [str ]):
166+ if foo .available :
167+ matcher1 .set_path_arg ("foo" , foo .result )
168+ if bar .available :
169+ matcher1 .set_path_arg ("bar" , bar .result )
170+
171+ @matcher1 .got_path (
172+ "foo" ,
173+ prompt = UniMessage .template ("{:At(user, $event.get_user_id())} 请确认目标 foo" ),
174+ )
175+ @matcher1 .got_path (
176+ "bar" ,
177+ prompt = UniMessage .template ("{:At(user, $event.get_user_id())} 请确认目标 bar" ),
178+ )
179+ async def _ ():
180+ await matcher1 .send (
181+ UniMessage .template ("{:At(user, $event.get_user_id())} 已确认目标为 {foo}, {bar}" ),
182+ )
183+
184+ async with app .test_matcher (matcher1 ) as ctx1 :
185+ adapter = get_adapter (Adapter )
186+ bot = ctx1 .create_bot (base = Bot , adapter = adapter )
187+ event = fake_group_message_event_v11 (message = Message ("test_unimsg_template1" ), user_id = 123 )
188+ ctx1 .receive_event (bot , event )
189+ ctx1 .should_call_send (event , MessageSegment .at (123 ) + " 请确认目标 foo" )
190+ ctx1 .should_rejected (matcher1 )
191+ event1 = fake_group_message_event_v11 (message = Message ("123" ), user_id = 123 )
192+ ctx1 .receive_event (bot , event1 )
193+ ctx1 .should_call_send (event1 , MessageSegment .at (123 ) + " 请确认目标 bar" )
194+ ctx1 .should_rejected (matcher1 )
195+ event2 = fake_group_message_event_v11 (message = Message ("456" ), user_id = 123 )
196+ ctx1 .receive_event (bot , event2 )
197+ ctx1 .should_call_send (event2 , MessageSegment .at (123 ) + " 已确认目标为 123, 456" )
198+
162199
163200@pytest .mark .asyncio ()
164201async def test_uniseg_recv (app : App ):
0 commit comments