diff --git a/nonebot/adapters/red/__init__.py b/nonebot/adapters/red/__init__.py index 0cdc4f4..d1859d5 100644 --- a/nonebot/adapters/red/__init__.py +++ b/nonebot/adapters/red/__init__.py @@ -6,4 +6,4 @@ from .event import GroupMessageEvent as GroupMessageEvent from .event import PrivateMessageEvent as PrivateMessageEvent -__version__ = "0.7.1" +__version__ = "0.7.2" diff --git a/nonebot/adapters/red/api/model.py b/nonebot/adapters/red/api/model.py index 6d8bd38..047a9cb 100644 --- a/nonebot/adapters/red/api/model.py +++ b/nonebot/adapters/red/api/model.py @@ -1,4 +1,5 @@ from enum import IntEnum +from datetime import datetime from typing import Any, List, Optional from pydantic import BaseModel @@ -52,7 +53,7 @@ class MemberAdd(BaseModel): class ShutUpTarget(BaseModel): - uid: Optional[str] + uid: str = "undefined" card: str name: str role: int @@ -334,10 +335,10 @@ class Message(BaseModel): msgType: MsgType subMsgType: int sendType: int - senderUid: Optional[str] - senderUin: Optional[str] - peerUid: Optional[str] - peerUin: Optional[str] + senderUid: str = "undefined" + senderUin: str = "-1" + peerUid: str = "undefined" + peerUin: str = "-1" channelId: str guildId: str guildCode: str @@ -376,6 +377,10 @@ class Message(BaseModel): nameType: Optional[int] avatarFlag: Optional[int] + @property + def time(self): + return datetime.fromtimestamp(int(self.msgTime)) + class Profile(BaseModel): uid: str diff --git a/nonebot/adapters/red/bot.py b/nonebot/adapters/red/bot.py index 39c2a6f..b628668 100644 --- a/nonebot/adapters/red/bot.py +++ b/nonebot/adapters/red/bot.py @@ -488,7 +488,7 @@ async def send_fake_forward( for node in nodes: elems.append(await node.export(base_seq, self, int(src_peer))) base_seq += 1 - await self.call_api( + return await self.call_api( "send_fake_forward", chat_type=chat_type, target=peer, @@ -510,7 +510,7 @@ async def send_group_forward( group: 群组 id source_group: 伪造的消息来源群组 id """ - await self.send_fake_forward( + return await self.send_fake_forward( nodes, ChatType.GROUP, group, diff --git a/nonebot/adapters/red/event.py b/nonebot/adapters/red/event.py index 046508c..644ec79 100644 --- a/nonebot/adapters/red/event.py +++ b/nonebot/adapters/red/event.py @@ -144,6 +144,11 @@ def get_event_description(self) -> str: ) return escape_tag(text) + @property + def user_id(self) -> str: + """好友的id""" + return self.peerUin or self.peerUid + class GroupMessageEvent(MessageEvent): @override @@ -159,6 +164,11 @@ def get_event_description(self) -> str: ) return escape_tag(text) + @property + def group_id(self) -> str: + """群组的id""" + return self.peerUin or self.peerUid + class NoticeEvent(Event): msgId: str @@ -286,13 +296,11 @@ def convert(cls, obj: Any): "peerUid": obj.peerUid, "peerUin": obj.peerUin, } - if obj.elements[0].grayTipElement.xmlElement: # type: ignore - if not ( - mat := legacy_invite_message.search( - obj.elements[0].grayTipElement.xmlElement.content - ) - ): # type: ignore # noqa: E501 + if obj.elements[0].grayTipElement and obj.elements[0].grayTipElement.xmlElement and obj.elements[0].grayTipElement.xmlElement.content: # type: ignore # noqa: E501 + # fmt: off + if not (mat := legacy_invite_message.search(obj.elements[0].grayTipElement.xmlElement.content)): # type: ignore # noqa: E501 raise ValueError("Invalid legacy invite message.") + # fmt: on params["operatorUid"] = mat[1] params["memberUid"] = mat[2] else: diff --git a/plugins/demo.py b/plugins/demo.py new file mode 100644 index 0000000..4cbeb93 --- /dev/null +++ b/plugins/demo.py @@ -0,0 +1,33 @@ +from nonebot import on_command +from nonebot.adapters.red import Bot +from nonebot.adapters.red.message import Message, ForwardNode, MessageSegment +from nonebot.adapters.red.event import MessageEvent +from pathlib import Path +import asyncio + +matcher = on_command("test") + +@matcher.handle() +async def handle_first_receive(bot: Bot, event: MessageEvent): + # print(await bot.get_friends()) + # print(await bot.get_groups()) + + msg = await bot.send_group_message( + event.peerUin, Message( + [ + MessageSegment.reply(event.msgSeq, event.msgId, event.senderUin), + MessageSegment.image(Path("C:\\Users\\TR\\Pictures\\QQ图片20210814001401.jpg"))])) + await asyncio.sleep(5) + await bot.recall_message(event.chatType, event.peerUin, msg.msgId) + # await bot.send_fake_forward( + # [ + # ForwardNode( + # event.senderUid, + # event.sendNickName, + # event.peerUin, + # Message("hello") + # ) + # ], + # event.chatType, + # event.peerUin, + # )