Skip to content

Commit b409111

Browse files
committed
feat: 更新群/C2C管理事件demo, 删除过时demo
1 parent de67007 commit b409111

10 files changed

+110
-112
lines changed

botpy/api.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,10 @@ async def create_channel(
342342
Kwargs(fields):
343343
position (int): 排序,非必填
344344
parent_id (str): 否,分组 ID
345+
private_type (int): 子频道私密类型 PrivateType
346+
private_user_ids (List[str]): 子频道私密类型成员 ID
347+
speak_permission (int): 子频道发言权限 SpeakPermission
348+
application_id (str): 应用类型子频道 AppID,仅应用子频道需要该字段
345349
346350
Returns:
347351
通道对象。
@@ -351,7 +355,14 @@ async def create_channel(
351355
"type": int(type),
352356
"subtype": int(sub_type),
353357
}
354-
valid_keys = ("position", "parent_id")
358+
valid_keys = (
359+
"position",
360+
"parent_id",
361+
"private_type",
362+
"private_user_ids",
363+
"speak_permission",
364+
"application_id",
365+
)
355366
payload.update({k: v for k, v in fields.items() if k in valid_keys and v})
356367
route = Route("POST", "/guilds/{guild_id}/channels", guild_id=guild_id)
357368
return await self._http.request(route, json=payload)

botpy/client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ def ws_dispatch(self, event: str, *args: Any, **kwargs: Any) -> None:
258258
try:
259259
coro = getattr(self, method)
260260
except AttributeError:
261-
_log.warning("[botpy] 事件: %s 未注册", event)
261+
_log.debug("[botpy] 事件: %s 未注册", event)
262262
else:
263263
self._schedule_event(coro, method, *args, **kwargs)
264264

examples/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,10 @@ examples/
2626
├── demo_schedule.py # 机器人日程相关示例
2727
├── demo_group_reply_text.py # 机器人群内发消息相关示例
2828
├── demo_group_reply_file.py # 机器人群内发富媒体消息相关示例
29+
├── demo_group_manage_event.py # 机器人群管理事件
2930
├── demo_c2c_reply_text.py # 机器人好友内发消息相关示例
3031
├── demo_c2c_reply_file.py # 机器人好友内发富媒体消息相关示例
32+
├── demo_c2c_manage_event.py # 机器人好友管理事件
3133
├── demo_audio_or_live_channel_member.py # 音视频/直播子频道成员进出事件
3234
├── demo_open_forum_event.py # 开放论坛事件对象
3335
```

examples/demo_announce.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ async def on_at_message_create(self, message: Message):
2121
await self.api.post_message(message.channel_id, content="command received: %s" % message.content)
2222

2323
# 输入/xxx后的处理
24-
message_id = "088de19cbeb883e7e97110a2e39c0138d401"
24+
# 对用户引用回复的消息设置/删除公告
25+
message_id = message.message_reference.message_id
2526
if "/建公告" in message.content:
2627
await self.api.create_announce(message.guild_id, message.channel_id, message_id)
2728

examples/demo_at_reply_command.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
_log = logging.get_logger()
1414

1515

16-
@Commands(name=("你好", "hello"))
16+
@Commands("你好", "hello")
1717
async def hello(api: BotAPI, message: Message, params=None):
1818
_log.info(params)
1919
# 第一种用reply发送消息
@@ -45,7 +45,6 @@ async def on_at_message_create(self, message: Message):
4545
return
4646

4747

48-
4948
if __name__ == "__main__":
5049
# 通过预设置的类型,设置需要监听的事件通道
5150
# intents = botpy.Intents.none()

examples/demo_at_reply_keyboard_buttons.py

Lines changed: 0 additions & 74 deletions
This file was deleted.

examples/demo_c2c_manage_event.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# -*- coding: utf-8 -*-
2+
import os
3+
4+
import botpy
5+
from botpy import logging
6+
from botpy.ext.cog_yaml import read
7+
from botpy.manage import C2CManageEvent
8+
9+
test_config = read(os.path.join(os.path.dirname(__file__), "config.yaml"))
10+
11+
_log = logging.get_logger()
12+
13+
14+
class MyClient(botpy.Client):
15+
async def on_friend_add(self, event: C2CManageEvent):
16+
_log.info("用户添加机器人:" + str(event))
17+
await self.api.post_c2c_message(
18+
openid=event.openid,
19+
msg_type=0,
20+
event_id=event.event_id,
21+
content="hello",
22+
)
23+
24+
async def on_friend_del(self, event: C2CManageEvent):
25+
_log.info("用户删除机器人:" + str(event))
26+
27+
async def on_c2c_msg_reject(self, event: C2CManageEvent):
28+
_log.info("用户关闭机器人主动消息:" + str(event))
29+
30+
async def on_c2c_msg_receive(self, event: C2CManageEvent):
31+
_log.info("用户打开机器人主动消息:" + str(event))
32+
33+
34+
if __name__ == "__main__":
35+
# 通过预设置的类型,设置需要监听的事件通道
36+
# intents = botpy.Intents.none()
37+
# intents.public_messages=True
38+
39+
# 通过kwargs,设置需要监听的事件通道
40+
intents = botpy.Intents(public_messages=True)
41+
client = MyClient(intents=intents)
42+
client.run(appid=test_config["appid"], secret=test_config["secret"])

examples/demo_dms_reply.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import botpy
55
from botpy import logging
66

7-
from botpy.message import DirectMessage
7+
from botpy.message import DirectMessage, Message
88
from botpy.ext.cog_yaml import read
99

1010
test_config = read(os.path.join(os.path.dirname(__file__), "config.yaml"))
@@ -23,13 +23,19 @@ async def on_direct_message_create(self, message: DirectMessage):
2323
msg_id=message.id,
2424
)
2525

26+
async def on_at_message_create(self, message: Message):
27+
if "/私信" in message.content:
28+
dms_payload = await self.api.create_dms(message.guild_id, message.author.id)
29+
_log.info("发送私信")
30+
await self.api.post_dms(dms_payload["guild_id"], content="hello", msg_id=message.id)
31+
2632

2733
if __name__ == "__main__":
2834
# 通过预设置的类型,设置需要监听的事件通道
2935
# intents = botpy.Intents.none()
3036
# intents.public_guild_messages=True
3137

3238
# 通过kwargs,设置需要监听的事件通道
33-
intents = botpy.Intents(direct_message=True)
39+
intents = botpy.Intents(direct_message=True, public_guild_messages=True)
3440
client = MyClient(intents=intents)
3541
client.run(appid=test_config["appid"], secret=test_config["secret"])
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# -*- coding: utf-8 -*-
2+
import os
3+
4+
import botpy
5+
from botpy import logging
6+
from botpy.ext.cog_yaml import read
7+
from botpy.manage import GroupManageEvent
8+
9+
test_config = read(os.path.join(os.path.dirname(__file__), "config.yaml"))
10+
11+
_log = logging.get_logger()
12+
13+
14+
class MyClient(botpy.Client):
15+
async def on_group_add_robot(self, event: GroupManageEvent):
16+
_log.info("机器人被添加到群聊:" + str(event))
17+
await self.api.post_group_message(
18+
group_openid=event.group_openid,
19+
msg_type=0,
20+
event_id=event.event_id,
21+
content="hello",
22+
)
23+
24+
async def on_group_del_robot(self, event: GroupManageEvent):
25+
_log.info("机器人被移除群聊:" + str(event))
26+
27+
async def on_group_msg_reject(self, event: GroupManageEvent):
28+
_log.info("群聊关闭机器人主动消息:" + str(event))
29+
30+
async def on_group_msg_receive(self, event: GroupManageEvent):
31+
_log.info("群聊打开机器人主动消息:" + str(event))
32+
33+
34+
if __name__ == "__main__":
35+
# 通过预设置的类型,设置需要监听的事件通道
36+
# intents = botpy.Intents.none()
37+
# intents.public_messages=True
38+
39+
# 通过kwargs,设置需要监听的事件通道
40+
intents = botpy.Intents(public_messages=True)
41+
client = MyClient(intents=intents)
42+
client.run(appid=test_config["appid"], secret=test_config["secret"])

examples/demo_handle_direct_msg_delete_event.py

Lines changed: 0 additions & 31 deletions
This file was deleted.

0 commit comments

Comments
 (0)