2929 Event ,
3030 FriendAddEvent ,
3131 GroupAddRobotEvent ,
32+ GroupAtMessageCreateEvent ,
3233 GroupMessageCreateEvent ,
3334 GuildMessageEvent ,
3435 InteractionCreateEvent ,
@@ -115,36 +116,58 @@ async def _check_reply(
115116 bot: Bot 对象
116117 event: MessageEvent 对象
117118 """
118- if not isinstance (event , GuildMessageEvent ) or event .message_reference is None :
119- return
120- try :
121- event .reply = await bot .get_message_of_id (
122- channel_id = event .channel_id ,
123- message_id = event .message_reference .message_id ,
124- )
125- if event .reply .author .id == bot .self_info .id :
119+ if isinstance (event , GuildMessageEvent ):
120+ if event .message_reference is None :
121+ return
122+ try :
123+ event .reply = await bot .get_message_of_id (
124+ channel_id = event .channel_id ,
125+ message_id = event .message_reference .message_id ,
126+ )
127+ if event .reply .author .id == bot .self_info .id :
128+ event .to_me = True
129+ except Exception as e :
130+ log ("WARNING" , f"Error when getting message reply info: { e !r} " , e )
131+ else :
132+ if not event .msg_elements :
133+ return
134+ event .reply = event .msg_elements [0 ]
135+ if (
136+ event .reply .author
137+ and event .reply .author .bot
138+ and event .reply .author .username == bot .self_info .username
139+ ):
126140 event .to_me = True
127- except Exception as e :
128- log ("WARNING" , f"Error when getting message reply info: { e !r} " , e )
129141
130142
131143def _check_at_me (
132144 bot : "Bot" ,
133145 event : GuildMessageEvent | QQMessageEvent ,
134146):
147+ message = event .get_message ()
148+ if not message :
149+ message .append (MessageSegment .text ("" ))
150+ if isinstance (event , GroupAtMessageCreateEvent ):
151+ event .original_message = message .copy ()
152+ event .original_message .insert (0 , MessageSegment .mention_user (bot .self_info .id ))
153+ if message and message [0 ].type == "text" :
154+ message [0 ].data ["text" ] = message [0 ].data ["text" ].lstrip ("\xa0 " ).lstrip ()
155+ if not message [0 ].data ["text" ]:
156+ del message [0 ]
157+ return
135158 if (
136159 isinstance (event , GuildMessageEvent )
137160 and event .mentions is not None
138161 and bot .self_info .id in {user .id for user in event .mentions }
139162 ):
140163 event .to_me = True
141164
142- if (
143- isinstance ( event , QQMessageEvent )
144- and event . mentions is not None
145- and any ( user . is_you for user in event . mentions )
146- ):
147- event .to_me = True
165+ if isinstance ( event , GroupMessageCreateEvent ):
166+ for seg in message :
167+ if seg . type == "mention_user" and seg . data . get ( "is_bot" , False ):
168+ seg . data [ "user_id" ] = bot . self_info . id
169+
170+ event .original_message = message . copy ()
148171
149172 def _is_at_me_seg (segment : MessageSegment ) -> bool :
150173 if segment .type == "mention_user" :
@@ -319,7 +342,9 @@ def _prepare_message(message: str | Message | MessageSegment) -> Message:
319342
320343 @staticmethod
321344 def _extract_send_message (
322- message : Message , escape_text : bool = True
345+ message : Message ,
346+ msg_ref_id : str | None = None ,
347+ escape_text : bool = True ,
323348 ) -> dict [str , Any ]:
324349 kwargs = {}
325350 content = message .extract_content (escape_text ) or None
@@ -332,6 +357,10 @@ def _extract_send_message(
332357 kwargs ["markdown" ] = markdown [- 1 ].data ["markdown" ]
333358 if reference := (message ["reference" ] or None ):
334359 kwargs ["message_reference" ] = reference [- 1 ].data ["reference" ]
360+ if msg_ref_id and not reference [- 1 ].data ["reference" ].message_id .startswith (
361+ "REFIDX"
362+ ):
363+ kwargs ["message_reference" ] = MessageReference (message_id = msg_ref_id )
335364 if keyboard := (message ["keyboard" ] or None ):
336365 kwargs ["keyboard" ] = keyboard [- 1 ].data ["keyboard" ]
337366 if stream := (message ["stream" ] or None ):
@@ -429,9 +458,12 @@ async def send_to_c2c(
429458 msg_id : str | None = None ,
430459 msg_seq : int | None = None ,
431460 event_id : str | None = None ,
461+ msg_ref_id : str | None = None ,
432462 ) -> PostC2CMessagesReturn | PostC2CFilesReturn :
433463 message = self ._prepare_message (message )
434- kwargs = self ._extract_send_message (message = message , escape_text = False )
464+ kwargs = self ._extract_send_message (
465+ message = message , msg_ref_id = msg_ref_id , escape_text = False
466+ )
435467 if kwargs .get ("embed" ):
436468 msg_type = 4
437469 elif kwargs .get ("ark" ):
@@ -489,9 +521,12 @@ async def send_to_group(
489521 msg_id : str | None = None ,
490522 msg_seq : int | None = None ,
491523 event_id : str | None = None ,
524+ msg_ref_id : str | None = None ,
492525 ) -> PostGroupMessagesReturn | PostGroupFilesReturn :
493526 message = self ._prepare_message (message )
494- kwargs = self ._extract_send_message (message = message , escape_text = False )
527+ kwargs = self ._extract_send_message (
528+ message = message , msg_ref_id = msg_ref_id , escape_text = False
529+ )
495530 if kwargs .get ("embed" ):
496531 msg_type = 4
497532 elif kwargs .get ("ark" ):
@@ -560,19 +595,41 @@ async def send(
560595 )
561596 elif isinstance (event , C2CMessageCreateEvent ):
562597 event ._reply_seq += 1
598+ ref_idx = None
599+ if event .message_scene :
600+ ref_idx = next (
601+ (
602+ ext .partition ("=" )[- 1 ]
603+ for ext in event .message_scene .ext
604+ if ext .startswith ("msg_idx=" )
605+ ),
606+ "" ,
607+ )
563608 return await self .send_to_c2c (
564609 openid = event .author .id ,
565610 message = message ,
566611 msg_id = event .id ,
567612 msg_seq = event ._reply_seq ,
613+ msg_ref_id = ref_idx ,
568614 )
569615 elif isinstance (event , GroupMessageCreateEvent ):
570616 event ._reply_seq += 1
617+ ref_idx = None
618+ if event .message_scene :
619+ ref_idx = next (
620+ (
621+ ext .partition ("=" )[- 1 ]
622+ for ext in event .message_scene .ext
623+ if ext .startswith ("msg_idx=" )
624+ ),
625+ "" ,
626+ )
571627 return await self .send_to_group (
572628 group_openid = event .group_openid ,
573629 message = message ,
574630 msg_id = event .id ,
575631 msg_seq = event ._reply_seq ,
632+ msg_ref_id = ref_idx ,
576633 )
577634 elif isinstance (event , InteractionCreateEvent ):
578635 if gid := event .group_openid :
@@ -1726,7 +1783,7 @@ async def post_c2c_messages(
17261783 ark : MessageArk | None = None ,
17271784 embed : MessageEmbed | None = None ,
17281785 image : None = None ,
1729- message_reference : None = None ,
1786+ message_reference : MessageReference | None = None ,
17301787 stream : MessageStream | None = None ,
17311788 prompt_keyboard : MessagePromptKeyboard | None = None ,
17321789 action_button : MessageActionButton | None = None ,
@@ -1964,7 +2021,7 @@ async def post_group_messages(
19642021 ark : MessageArk | None = None ,
19652022 embed : MessageEmbed | None = None ,
19662023 image : None = None ,
1967- message_reference : None = None ,
2024+ message_reference : MessageReference | None = None ,
19682025 event_id : str | None = None ,
19692026 msg_id : str | None = None ,
19702027 msg_seq : int | None = None ,
0 commit comments