Skip to content

Commit de67007

Browse files
committed
feat: 加群退群事件和主动消息设置事件
1 parent f35553e commit de67007

File tree

5 files changed

+91
-4
lines changed

5 files changed

+91
-4
lines changed

botpy/api.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1469,6 +1469,7 @@ async def post_group_file(
14691469
上传/发送群聊图片
14701470
14711471
Args:
1472+
group_openid (str): 您要将消息发送到的群的 ID
14721473
file_type (int): 媒体类型:1 图片png/jpg,2 视频mp4,3 语音silk,4 文件(暂不开放)
14731474
url (str): 需要发送媒体资源的url
14741475
srv_send_msg (bool): 设置 true 会直接发送消息到目标端,且会占用主动消息频次
@@ -1489,6 +1490,7 @@ async def post_c2c_file(
14891490
上传/发送c2c图片
14901491
14911492
Args:
1493+
openid (str): 您要将消息发送到的用户的 ID
14921494
file_type (int): 媒体类型:1 图片png/jpg,2 视频mp4,3 语音silk,4 文件(暂不开放)
14931495
url (str): 需要发送媒体资源的url
14941496
srv_send_msg (bool): 设置 true 会直接发送消息到目标端,且会占用主动消息频次

botpy/client.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ async def close(self) -> None:
103103
def is_closed(self) -> bool:
104104
return self._closed
105105

106+
async def on_ready(self):
107+
pass
108+
106109
async def on_error(self, event_method: str, *args: Any, **kwargs: Any) -> None:
107110
traceback.print_exc()
108111

@@ -255,7 +258,7 @@ def ws_dispatch(self, event: str, *args: Any, **kwargs: Any) -> None:
255258
try:
256259
coro = getattr(self, method)
257260
except AttributeError:
258-
pass
261+
_log.warning("[botpy] 事件: %s 未注册", event)
259262
else:
260263
self._schedule_event(coro, method, *args, **kwargs)
261264

botpy/connection.py

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from .channel import Channel
66
from .guild import Guild
77
from .interaction import Interaction
8+
from .manage import C2CManageEvent, GroupManageEvent
89
from .message import C2CMessage, GroupMessage, Message, DirectMessage, MessageAudit
910
from .user import Member
1011
from .reaction import Reaction
@@ -200,7 +201,7 @@ def parse_public_message_delete(self, payload):
200201
_message = Message(self.api, payload.get('id', None), payload.get('d', {}))
201202
self._dispatch("public_message_delete", _message)
202203

203-
# botpy.flags.Intents.public_messages
204+
# botpy.flags.Intents.public_messages
204205
def parse_group_at_message_create(self, payload):
205206
_message = GroupMessage(self.api, payload.get("id", None), payload.get("d", {}))
206207
self._dispatch("group_at_message_create", _message)
@@ -209,6 +210,38 @@ def parse_c2c_message_create(self, payload):
209210
_message = C2CMessage(self.api, payload.get("id", None), payload.get("d", {}))
210211
self._dispatch("c2c_message_create", _message)
211212

213+
def parse_group_add_robot(self, payload):
214+
_event = GroupManageEvent(self.api, payload.get("id", None), payload.get("d", {}))
215+
self._dispatch("group_add_robot", _event)
216+
217+
def parse_group_del_robot(self, payload):
218+
_event = GroupManageEvent(self.api, payload.get("id", None), payload.get("d", {}))
219+
self._dispatch("group_del_robot", _event)
220+
221+
def parse_group_msg_reject(self, payload):
222+
_event = GroupManageEvent(self.api, payload.get("id", None), payload.get("d", {}))
223+
self._dispatch("group_msg_reject", _event)
224+
225+
def parse_group_msg_receive(self, payload):
226+
_event = GroupManageEvent(self.api, payload.get("id", None), payload.get("d", {}))
227+
self._dispatch("group_msg_receive", _event)
228+
229+
def parse_friend_add(self, payload):
230+
_event = C2CManageEvent(self.api, payload.get("id", None), payload.get("d", {}))
231+
self._dispatch("friend_add", _event)
232+
233+
def parse_friend_del(self, payload):
234+
_event = C2CManageEvent(self.api, payload.get("id", None), payload.get("d", {}))
235+
self._dispatch("friend_del", _event)
236+
237+
def parse_c2c_msg_reject(self, payload):
238+
_event = C2CManageEvent(self.api, payload.get("id", None), payload.get("d", {}))
239+
self._dispatch("c2c_msg_reject", _event)
240+
241+
def parse_c2c_msg_receive(self, payload):
242+
_event = C2CManageEvent(self.api, payload.get("id", None), payload.get("d", {}))
243+
self._dispatch("c2c_msg_receive", _event)
244+
212245
# botpy.flags.Intents.forums
213246
def parse_forum_thread_create(self, payload):
214247
_forum = Thread(self.api, payload.get('id', None), payload.get('d', {}))

botpy/flags.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def decorator(cls: Type[BF]) -> Type[BF]:
1717

1818
if inverted:
1919
max_bits = max(cls.VALID_FLAGS.values()).bit_length()
20-
cls.DEFAULT_VALUE = -1 + (2 ** max_bits)
20+
cls.DEFAULT_VALUE = -1 + (2**max_bits)
2121
else:
2222
cls.DEFAULT_VALUE = 0
2323

@@ -317,7 +317,7 @@ def open_forum_event(self):
317317
318318
"""
319319
return 1 << 18
320-
320+
321321
@Flag
322322
def public_messages(self):
323323
""":class:`bool`: 是否打开公域群/C2C消息事件的监听.
@@ -326,10 +326,19 @@ def public_messages(self):
326326
327327
- :func:`on_group_at_message_create` // 当收到群@机器人的消息时
328328
- :func:`on_c2c_message_create` // 当收到c2c的消息时
329+
- :func:`on_group_add_robot` // 机器人加入群聊
330+
- :func:`on_group_del_robot` // 机器人退出群聊
331+
- :func:`on_group_msg_reject` // 群聊拒绝机器人主动消息
332+
- :func:`on_group_msg_receive` // 群聊接受机器人主动消息
333+
- :func:`on_friend_add` // 用户添加机器人
334+
- :func:`on_friend_del` // 用户删除机器人
335+
- :func:`on_c2c_msg_reject` // 用户拒绝机器人主动消息
336+
- :func:`on_c2c_msg_receive` // 用户接受机器人主动消息
329337
330338
"""
331339
return 1 << 25
332340

341+
333342
@fill_with_flags()
334343
class Permission(BaseFlags):
335344
def __init__(self, **kwargs: bool) -> None:

botpy/manage.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from typing import Dict
2+
from .api import BotAPI
3+
4+
5+
class GroupManageEvent:
6+
__slots__ = (
7+
"_api",
8+
"event_id",
9+
"timestamp",
10+
"group_openid",
11+
"op_member_openid",
12+
)
13+
14+
def __init__(self, api: BotAPI, event_id, data: Dict):
15+
self._api = api
16+
self.event_id = event_id
17+
self.timestamp = data.get("timestamp", None)
18+
self.group_openid = data.get("group_openid", None)
19+
self.op_member_openid = data.get("op_member_openid", None)
20+
21+
def __repr__(self):
22+
return str({items: str(getattr(self, items)) for items in self.__slots__ if not items.startswith("_")})
23+
24+
25+
class C2CManageEvent:
26+
__slots__ = (
27+
"_api",
28+
"event_id",
29+
"timestamp",
30+
"openid",
31+
)
32+
33+
def __init__(self, api: BotAPI, event_id, data: Dict):
34+
self._api = api
35+
self.event_id = event_id
36+
self.timestamp = data.get("timestamp", None)
37+
self.openid = data.get("openid", None)
38+
39+
def __repr__(self):
40+
return str({items: str(getattr(self, items)) for items in self.__slots__ if not items.startswith("_")})

0 commit comments

Comments
 (0)