Skip to content

Commit d17b62d

Browse files
authored
feat: 给 MessageEvent 类添加用于获取唯一表示符的 get_sender_id method() 方法 (#113)
1 parent f4ce37c commit d17b62d

File tree

7 files changed

+48
-62
lines changed

7 files changed

+48
-62
lines changed

alicebot/event.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,14 @@ def __repr__(self) -> str:
5252
class MessageEvent(Event[AdapterT], Generic[AdapterT]):
5353
"""通用的消息事件类的基类。"""
5454

55+
@abstractmethod
56+
def get_sender_id(self) -> Union[None, int, str]:
57+
"""获取消息的发送者的唯一标识符。
58+
59+
Returns:
60+
消息的发送者的唯一标识符。
61+
"""
62+
5563
@abstractmethod
5664
def get_plain_text(self) -> str:
5765
"""获取消息的纯文本内容。
@@ -71,7 +79,6 @@ async def reply(self, message: str) -> Any:
7179
回复消息动作的响应。
7280
"""
7381

74-
@abstractmethod
7582
async def is_same_sender(self, other: Self) -> bool:
7683
"""判断自身和另一个事件是否是同一个发送者。
7784
@@ -81,6 +88,7 @@ async def is_same_sender(self, other: Self) -> bool:
8188
Returns:
8289
是否是同一个发送者。
8390
"""
91+
return self.get_sender_id() == other.get_sender_id()
8492

8593
async def get(
8694
self,

examples/adapters/console_adapter.py

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
import asyncio
77
import sys
8-
from typing_extensions import Self
98

109
from alicebot import MessageEvent
1110
from alicebot.adapter import Adapter
@@ -20,6 +19,13 @@ class ConsoleAdapterEvent(MessageEvent["ConsoleAdapter"]):
2019

2120
message: str
2221

22+
def get_sender_id(self) -> None:
23+
"""获取消息的发送者的唯一标识符。
24+
25+
Returns:
26+
消息的发送者的唯一标识符。
27+
"""
28+
2329
def get_plain_text(self) -> str:
2430
"""获取消息的纯文本内容。
2531
@@ -36,14 +42,6 @@ async def reply(self, message: str) -> None:
3642
"""
3743
return await self.adapter.send(message)
3844

39-
async def is_same_sender(self, other: Self) -> bool: # noqa: ARG002
40-
"""判断自身和另一个事件是否是同一个发送者。
41-
42-
Returns:
43-
是否是同一个发送者。
44-
"""
45-
return True
46-
4745

4846
class ConsoleAdapter(Adapter[ConsoleAdapterEvent, None]):
4947
"""Console 适配器。"""

packages/alicebot-adapter-cqhttp/alicebot/adapter/cqhttp/event.py

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
get_args,
1212
get_origin,
1313
)
14-
from typing_extensions import Self
1514

1615
from pydantic import BaseModel, ConfigDict, Field
1716
from pydantic.fields import FieldInfo
@@ -131,6 +130,14 @@ def __repr__(self) -> str:
131130
"""
132131
return f'Event<{self.type}>: "{self.message}"'
133132

133+
def get_sender_id(self) -> Optional[int]:
134+
"""获取消息的发送者的唯一标识符。
135+
136+
Returns:
137+
消息的发送者的唯一标识符。
138+
"""
139+
return self.sender.user_id
140+
134141
def get_plain_text(self) -> str:
135142
"""获取消息的纯文本内容。
136143
@@ -152,17 +159,6 @@ async def reply(
152159
"""
153160
raise NotImplementedError
154161

155-
async def is_same_sender(self, other: Self) -> bool:
156-
"""判断自身和另一个事件是否是同一个发送者。
157-
158-
Args:
159-
other: 另一个事件。
160-
161-
Returns:
162-
是否是同一个发送者。
163-
"""
164-
return self.sender.user_id == other.sender.user_id
165-
166162

167163
class PrivateMessageEvent(MessageEvent):
168164
"""私聊消息"""

packages/alicebot-adapter-dingtalk/alicebot/adapter/dingtalk/event.py

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import time
44
from typing import TYPE_CHECKING, Any, Dict, List, Literal, Optional, Union
5-
from typing_extensions import Self
65

76
from pydantic import BaseModel, Field
87

@@ -62,6 +61,14 @@ def message(self) -> DingTalkMessage:
6261
"""返回 message 字段。"""
6362
return DingTalkMessage.text(self.text.content)
6463

64+
def get_sender_id(self) -> str:
65+
"""获取消息的发送者的唯一标识符。
66+
67+
Returns:
68+
消息的发送者的唯一标识符。
69+
"""
70+
return self.senderId
71+
6572
def get_plain_text(self) -> str:
6673
"""获取消息的纯文本内容。
6774
@@ -96,14 +103,3 @@ async def reply(
96103
at=at,
97104
)
98105
raise WebhookExpiredError
99-
100-
async def is_same_sender(self, other: Self) -> bool:
101-
"""判断自身和另一个事件是否是同一个发送者。
102-
103-
Args:
104-
other: 另一个事件。
105-
106-
Returns:
107-
是否是同一个发送者。
108-
"""
109-
return self.senderId == other.senderId

packages/alicebot-adapter-mirai/alicebot/adapter/mirai/event/message.py

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
# pyright: reportIncompatibleVariableOverride=false
33

44
from typing import TYPE_CHECKING, Any, Dict, Literal, Union
5-
from typing_extensions import Self
65

76
from alicebot.event import MessageEvent as BaseMessageEvent
87
from alicebot.message import BuildMessageType
@@ -62,16 +61,13 @@ class MessageEvent(MiraiBaseMessageEvent):
6261

6362
sender: Union[FriendInfo, GroupMemberInfo, OtherClientSender]
6463

65-
async def is_same_sender(self, other: Self) -> bool:
66-
"""判断自身和另一个事件是否是同一个发送者。
67-
68-
Args:
69-
other: 另一个事件。
64+
def get_sender_id(self) -> int:
65+
"""获取消息的发送者的唯一标识符。
7066
7167
Returns:
72-
是否是同一个发送者
68+
消息的发送者的唯一标识符
7369
"""
74-
return self.sender.id == other.sender.id
70+
return self.sender.id
7571

7672
async def reply(
7773
self,
@@ -244,18 +240,15 @@ async def reply(
244240
class SyncMessage(MiraiBaseMessageEvent):
245241
"""同步消息"""
246242

247-
sender: Union[FriendInfo, GroupMemberInfo]
243+
subject: Union[FriendInfo, GroupMemberInfo]
248244

249-
async def is_same_sender(self, other: Self) -> bool: # noqa: ARG002
250-
"""判断自身和另一个事件是否是同一个发送者。
251-
252-
Args:
253-
other: 另一个事件。
245+
def get_sender_id(self) -> None:
246+
"""获取消息的发送者的唯一标识符。
254247
255248
Returns:
256-
是否是同一个发送者
249+
消息的发送者的唯一标识符
257250
"""
258-
return True
251+
return
259252

260253
async def reply(
261254
self,

packages/alicebot-adapter-onebot/alicebot/adapter/onebot/event.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
get_args,
1313
get_origin,
1414
)
15-
from typing_extensions import Self
1615

1716
from pydantic import BaseModel, ConfigDict
1817
from pydantic.fields import FieldInfo
@@ -169,16 +168,13 @@ async def reply(
169168
"""
170169
raise NotImplementedError
171170

172-
async def is_same_sender(self, other: Self) -> bool:
173-
"""判断自身和另一个事件是否是同一个发送者。
174-
175-
Args:
176-
other: 另一个事件。
171+
def get_sender_id(self) -> str:
172+
"""获取消息的发送者的唯一标识符。
177173
178174
Returns:
179-
是否是同一个发送者
175+
消息的发送者的唯一标识符
180176
"""
181-
return self.user_id == other.user_id
177+
return self.user_id
182178

183179

184180
class PrivateMessageEvent(MessageEvent):

tests/fake_adapter.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import inspect
22
from typing import Any, Awaitable, Callable, ClassVar, Optional, Tuple, Union
3-
from typing_extensions import Self
43

54
from alicebot import Adapter, Event, MessageEvent
65

@@ -45,11 +44,11 @@ def set_event_factories(cls, *event_factories: EventFactory) -> None:
4544
class FakeMessageEvent(MessageEvent[FakeAdapter]):
4645
message: str = "test"
4746

47+
def get_sender_id(self) -> None:
48+
pass
49+
4850
def get_plain_text(self) -> str:
4951
return self.message
5052

5153
async def reply(self, message: str) -> None:
5254
pass
53-
54-
async def is_same_sender(self, other: Self) -> bool:
55-
return self.adapter == other.adapter

0 commit comments

Comments
 (0)