From 2620326202bea71900c796a835bdcef612553424 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E5=BF=B5=E5=90=8C=E5=AD=A6?= <2660422452@qq.com>
Date: Mon, 20 Jun 2022 12:09:57 +0800
Subject: [PATCH 01/21] =?UTF-8?q?feat:=20pythosdk=E6=9B=B4=E6=96=B0?=
=?UTF-8?q?=E5=85=AC=E5=91=8AAPI=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../api/announce/create_channel_announce.md | 49 +++-----------
.../api/announce/create_guild_announce.md | 64 ++++++-------------
.../api/announce/delete_channel_announce.md | 34 ++++------
.../api/announce/delete_guild_announce.md | 29 +++------
4 files changed, 54 insertions(+), 122 deletions(-)
diff --git a/docs/develop/pythonsdk/api/announce/create_channel_announce.md b/docs/develop/pythonsdk/api/announce/create_channel_announce.md
index dc1c0fff..3f064409 100644
--- a/docs/develop/pythonsdk/api/announce/create_channel_announce.md
+++ b/docs/develop/pythonsdk/api/announce/create_channel_announce.md
@@ -4,30 +4,18 @@
## 使用示例
-#### sync
-
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-def demo():
- announce_api = qqbot.AnnounceAPI(token, False)
- create_channel_announce_request = CreateChannelAnnounceRequest(message_id)
- announce = announce_api.create_channel_announce(channel_id, create_channel_announce_request)
-```
-
-#### async
-
```python
-import qqbot
+import botpy
+from botpy.message import Message
-token = qqbot.Token({appid}, {token})
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ message_id = "088de19cbeb883e7e97110a2e39c0138d401"
+ await self.api.create_announce(message.guild_id, message.channel_id, message_id)
-async def demo():
- announce_api = qqbot.AsyncAnnounceAPI(token, False)
- create_channel_announce_request = CreateChannelAnnounceRequest(message_id)
- announce = await announce_api.create_channel_announce(channel_id, create_channel_announce_request)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
@@ -35,26 +23,9 @@ async def demo():
| 字段名 | 必填 | 类型 | 描述 |
| --------- | ---- | ------ | -------------------------------- |
| guild_id | 是 | string | 频道 ID |
-| create_channel_announce_request | 是 | [CreateChannelAnnounceRequest](#CreateChannelAnnounceRequest) | 创建子频道公告请求参数 |
-
-
-### CreateChannelAnnounceRequest
-
-| 字段名 | 类型 | 描述 |
-| ------------ | ------ | ------------------------- |
+| channel_id | 是 | string | 子频道 ID |
| message_id | string | 消息 ID |
-## 返回说明
-
-返回 [Announce](#announce) 对象。
-
-### Announce
-
-| 字段名 | 类型 | 描述 |
-| ------------ | ------ | ------------------------- |
-| guild_id | string | 频道 ID |
-| channel_id | string | 子频道 ID |
-| message_id | string | 消息 ID |
## 返回示例
diff --git a/docs/develop/pythonsdk/api/announce/create_guild_announce.md b/docs/develop/pythonsdk/api/announce/create_guild_announce.md
index f902eeff..1d49610d 100644
--- a/docs/develop/pythonsdk/api/announce/create_guild_announce.md
+++ b/docs/develop/pythonsdk/api/announce/create_guild_announce.md
@@ -1,33 +1,29 @@
-# 创建频道全局公告
+# 创建频道公告推荐子频道
-将某个子频道的某条消息创建为频道全局公告。
+用于将指定子频道设置为当前频道的推荐子频道,并以全局公告形式展示。
-## 使用示例
-
-#### sync
-
-```python
-import qqbot
+::: warning 注意
-token = qqbot.Token({appid}, {token})
+- 只有子频道权限为全体成员可见才可设置为推荐子频道。
+- **删除频道公告**推荐子频道请使用 [删除频道公告](./delete_channel_announce.md),并将 `messageId` 设置为 `all`。
-def demo():
- announce_api = qqbot.AnnounceAPI(token, False)
- create_announce_request = CreateAnnounceRequest(channel_id, message_id)
- announce = announce_api.create_announce(guild_id, create_announce_request)
-```
+:::
-#### async
+## 使用示例
```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-async def demo():
- announce_api = qqbot.AsyncAnnounceAPI(token, False)
- create_announce_request = CreateAnnounceRequest(channel_id, message_id)
- announce = await announce_api.create_announce(guild_id, create_announce_request)
+import botpy
+from botpy.message import Message
+from botpy.types.announce import AnnouncesType
+
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ channel_list = [{"channel_id": message.channel_id, "introduce": "introduce"}]
+ await self.api.create_recommend_announce(message.guild_id, AnnouncesType.MEMBER, channel_list)
+
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
@@ -35,27 +31,9 @@ async def demo():
| 字段名 | 必填 | 类型 | 描述 |
| --------- | ---- | ------ | -------------------------------- |
| guild_id | 是 | string | 频道 ID |
-| create_announce_request | 是 | [CreateAnnounceRequest](#CreateAnnounceRequest) | 创建频道公告请求参数 |
-
-
-### CreateAnnounceRequest
-
-| 字段名 | 类型 | 描述 |
-| ------------ | ------ | ------------------------- |
-| channel_id | string | 子频道 ID |
+| channel_id | 是 | string | 子频道 ID |
| message_id | string | 消息 ID |
-## 返回说明
-
-返回 [Announce](#announce) 对象。
-
-### Announce
-
-| 字段名 | 类型 | 描述 |
-| ------------ | ------ | ------------------------- |
-| guild_id | string | 频道 ID |
-| channel_id | string | 子频道 ID |
-| message_id | string | 消息 ID |
## 返回示例
@@ -67,4 +45,4 @@ async def demo():
"channel_id":"channel_id",
"message_id":"message_id"
}
-```
+```
\ No newline at end of file
diff --git a/docs/develop/pythonsdk/api/announce/delete_channel_announce.md b/docs/develop/pythonsdk/api/announce/delete_channel_announce.md
index 54f40c05..7d1f7095 100644
--- a/docs/develop/pythonsdk/api/announce/delete_channel_announce.md
+++ b/docs/develop/pythonsdk/api/announce/delete_channel_announce.md
@@ -4,34 +4,26 @@
## 使用示例
-#### sync
```python
-import qqbot
+import botpy
+from botpy.message import Message
-token = qqbot.Token({appid}, {token})
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ message_id = "088de19cbeb883e7e97110a2e39c0138d401"
+ await self.api.delete_announce(message.guild_id, message_id)
-def demo():
- announce_api = qqbot.AnnounceAPI(token, False)
- is_success = announce_api.delete_channel_announce(channel_id, message_id)
-```
-
-#### async
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-async def demo():
- announce_api = qqbot.AsyncAnnounceAPI(token, False)
- is_success = await announce_api.delete_channel_announce(channel_id, message_id)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
-| 字段名 | 必填 | 类型 | 描述 |
-| --------- | ---- | ------ | ------------------------------ |
-| channel_id | 是 | string | 子频道 ID |
-| message_id | 是 | string | 消息 ID |
+| 字段名 | 必填 | 类型 | 描述 |
+| --------- | ---- | ------ | -------------------------------- |
+| guild_id | 是 | string | 频道 ID |
+| message_id | string | 消息 ID |
## 返回说明
diff --git a/docs/develop/pythonsdk/api/announce/delete_guild_announce.md b/docs/develop/pythonsdk/api/announce/delete_guild_announce.md
index d2f43c64..2773a98e 100644
--- a/docs/develop/pythonsdk/api/announce/delete_guild_announce.md
+++ b/docs/develop/pythonsdk/api/announce/delete_guild_announce.md
@@ -1,29 +1,20 @@
-# 删除频道全局公告
+# 删除频道推荐子频道
-删除频道全局公告。
+删除频道推荐子频道。
## 使用示例
-#### sync
```python
-import qqbot
+import botpy
+from botpy.message import Message
-token = qqbot.Token({appid}, {token})
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.delete_announce(message.guild_id, "all")
-def demo():
- announce_api = qqbot.AnnounceAPI(token, False)
- is_success = announce_api.delete_announce(guild_id, message_id)
-```
-
-#### async
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-async def demo():
- announce_api = qqbot.AsyncAnnounceAPI(token, False)
- is_success = await announce_api.delete_announce(guild_id, message_id)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
From cf93dfed6b829a2f28d6fb59d8b4f9a3b68f6f1e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E5=BF=B5=E5=90=8C=E5=AD=A6?= <2660422452@qq.com>
Date: Mon, 20 Jun 2022 12:15:14 +0800
Subject: [PATCH 02/21] =?UTF-8?q?feat:=20pythonsdk=E6=9B=B4=E6=96=B0?=
=?UTF-8?q?=E9=A6=96=E9=A1=B5=E5=92=8C=E6=97=A5=E5=BF=97=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docs/develop/pythonsdk/README.md | 321 ++++++++++++---------
docs/develop/pythonsdk/changelog/README.md | 27 ++
2 files changed, 211 insertions(+), 137 deletions(-)
diff --git a/docs/develop/pythonsdk/README.md b/docs/develop/pythonsdk/README.md
index 5a2bc2f5..4aecc0c5 100644
--- a/docs/develop/pythonsdk/README.md
+++ b/docs/develop/pythonsdk/README.md
@@ -1,204 +1,251 @@
# Python SDK 接入指南
-![PyPI](https://img.shields.io/pypi/v/qq-bot)
+![PyPI](https://img.shields.io/pypi/v/qq-botpy)
## sdk 安装
外发版本通过下面方式安装
```bash
-pip install qq-bot
+pip install qq-botpy
```
->- 注意是`qq-bot`而不是 `qqbot`!
->- 注意不要命名代码为`qqbot.py`,会导致冲突
->- 更新包的话需要添加 `--upgrade` `注:需要python3.7+`
+> 更新包的话需要添加 `--upgrade` `兼容版本:python3.8+`
## sdk 使用
-需要使用的地方 import SDK
+需要使用的地方`import botpy`
```python
-import qqbot
+import botpy
```
+### 兼容提示
+
+> 原机器人的老版本`qq-bot`仍然可以使用,但新接口的支持上会逐渐暂停,此次升级不会影响线上使用的机器人
+
+
## 示例机器人
[`examples`](https://github.com/tencent-connect/botpy/tree/master/examples) 目录下存放示例机器人,可供实现参考。
-## qqbot-API
+## botpy-API
基于 [机器人开放平台API](https://bot.q.qq.com/wiki/develop/api/) 实现的 API 接口封装。
-### 使用方法
+### 快速示例
-通过 `import` 对应 API 的类来进行使用,构造参数(`Token` 对象,是否沙盒模式)。
+通过继承实现`bot.Client`, 实现自己的机器人Client
-比如下面的例子,通过 api 当前机器人的相关信息:
+```python
+import botpy
+from botpy.types.message import Message
-```py
-import qqbot
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.post_message(channel_id=message.channel_id, content="content")
-token = qqbot.Token("{appid}","{token}")
-api = qqbot.UserAPI(token, False)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
+```
+
+## botpy-事件监听
-user = api.me()
+异步模块基于 websocket 技术用于监听频道内的相关事件,如消息、成员变化等事件,用于开发者对事件进行相应的处理。
-print(user.username) # 打印机器人名字
+更完整的事件说明,请参考 [事件监听](https://bot.q.qq.com/wiki/develop/pythonsdk/websocket/listen_events.html)
+
+## 订阅事件的方法
+
+### 方法一:
+
+```python
+intents = botpy.Intents()
+client = MyClient(intents=intents)
```
-async 示例:
+在Intents中填入对应的[参数](#参数列表)
-```py
-import qqbot
+例子:
-token = qqbot.Token("{appid}","{token}")
-api = qqbot.AsyncUserAPI(token, False)
+```python
+intents = botpy.Intents(public_guild_messages=True, direct_message=True, guilds=True)
+```
-# 获取loop
-loop = asyncio.get_event_loop()
-user = loop.run_until_complete(api.me())
+### 方法二:
-print(user.username) # 打印机器人名字
+```python
+intents = botpy.Intents.none()
```
-## qqbot-事件监听
+然后打开对应的订阅([参数列表](#参数列表))
-异步模块基于 websocket 技术用于监听频道内的相关事件,如消息、成员变化等事件,用于开发者对事件进行相应的处理。
+```python
+intents.public_guild_messages=True
+intents.direct_message=True
+intents.guilds=True
+```
-更完整的事件说明,请参考 [事件监听](https://bot.q.qq.com/wiki/develop/pythonsdk/websocket/listen_events.html)
+说明:
-### 使用方法
+方法二对应的快捷订阅方式为
+
+1. 订阅所有事件
+
+```python
+intents = botpy.Intents.all()
+```
+
+2. 订阅所有的公域事件
+
+```python
+intents = botpy.Intents.default()
+```
+
+### 备注
+
+也可以通过预设置的类型,设置需要监听的事件通道
+
+```python
+import botpy
+
+intents = botpy.Intents.none()
+intents.public_guild_messages=True
+```
+
+#### 参数列表
+
+| 参数 | 含义 |
+| ----------------------- | ---------------------------------- |
+| public_guild_messages | 公域消息事件 |
+| guild_messages | 消息事件 **(仅 `私域` 机器人能够设置此 intents)** |
+| direct_message | 私信事件 |
+| guild_message_reactions | 消息相关互动事件 |
+| guilds | 频道事件 |
+| guild_members | 频道成员事件 |
+| interaction | 互动事件 |
+| message_audit | 消息审核事件 |
+| forums | 论坛事件 **(仅 `私域` 机器人能够设置此 intents)** |
+| audio_action | 音频事件 |
-通过注册需要监听的事件并设置回调函数后,即可完成对事件的监听。
-
-比如下面这个例子:需要监听机器人被@后消息并进行相应的回复。
-
-- 先初始化需要用的 `token` 对象
-- 通过 `qqbot.listen_events` 注册需要监听的事件
-- 通过 `qqbot.HandlerType` 定义需要监听的事件(部分事件可能需要权限申请)
-
- ```py
- t_token = qqbot.Token(test_config["token"]["appid"], test_config["token"]["token"])
- # 注册事件类型和回调,可以注册多个
- qqbot_handler = qqbot.Handler(qqbot.HandlerType.AT_MESSAGE_EVENT_HANDLER, _message_handler)
- qqbot.listen_events(t_token, False, qqbot_handler)
- ```
-
-- 最后定义注册事件回调执行函数,如 `_message_handler` 。
-
- ```py
- def _message_handler(event, message: Message):
- msg_api = qqbot.MessageAPI(t_token, False)
- # 打印返回信息
- qqbot.logger.info("event %s" % event + ",receive message %s" % message.content)
- # 构造消息发送请求数据对象
- send = qqbot.MessageSendRequest("<@%s>谢谢你,加油" % message.author.id, message.id)
- # 通过api发送回复消息
- msg_api.post_message(message.channel_id, send)
- ```
-
-- async 示例:
-
- ```py
- # async的异步接口的使用示例
- t_token = qqbot.Token(test_config["token"]["appid"], test_config["token"]["token"])
- qqbot_handler = qqbot.Handler(qqbot.HandlerType.AT_MESSAGE_EVENT_HANDLER, _message_handler)
- qqbot.async_listen_events(t_token, False, qqbot_handler)
- ```
-
- ```py
- async def _message_handler(event, message: qqbot.Message):
- """
- 定义事件回调的处理
-
- :param event: 事件类型
- :param message: 事件对象(如监听消息是Message对象)
- """
- msg_api = qqbot.AsyncMessageAPI(t_token, False)
- # 打印返回信息
- qqbot.logger.info("event %s" % event + ",receive message %s" % message.content)
- for i in range(5):
- await asyncio.sleep(5)
- # 构造消息发送请求数据对象
- send = qqbot.MessageSendRequest("<@%s>谢谢你,加油 " % message.author.id, message.id)
- # 通过api发送回复消息
- await msg_api.post_message(message.channel_id, send)
-
- ```
-
-- 注:当前支持事件及回调数据对象为:
-
- ```py
- class HandlerType(Enum):
- PLAIN_EVENT_HANDLER = 0 # 透传事件
- GUILD_EVENT_HANDLER = 1 # 频道事件
- GUILD_MEMBER_EVENT_HANDLER = 2 # 频道成员事件
- CHANNEL_EVENT_HANDLER = 3 # 子频道事件
- MESSAGE_EVENT_HANDLER = 4 # 消息事件
- AT_MESSAGE_EVENT_HANDLER = 5 # At消息事件
- # DIRECT_MESSAGE_EVENT_HANDLER = 6 # 私信消息事件
- # AUDIO_EVENT_HANDLER = 7 # 音频事件
- ```
-
- 事件回调函数的参数 1 为事件名称,参数 2 返回具体的数据对象。
-
- ```py
- # 透传事件(无具体的数据对象,根据后台返回Json对象)
- def _plain_handler(event, data):
- # 频道事件
- def _guild_handler(event, guild:Guild):
- # 频道成员事件
- def _guild_member_handler(event, guild_member: GuildMember):
- # 子频道事件
- def _channel_handler(event, channel: Channel):
- # 消息事件
- # At消息事件
- def _message_handler(event, message: Message):
- ```
## 日志打印
-基于自带的 logging 模块封装的日志模块,提供了日志写入以及美化了打印格式,并支持通过设置 `QQBOT_LOG_LEVEL` 环境变量来调整日志打印级别(默认打印级别为 `INFO`)。
+基于自带的 logging 模块封装的日志模块,提供了日志写入以及美化了打印格式,并支持调整打印级别(默认打印级别为 `INFO`)。
### 使用方法
引用模块,并获取 `logger` 实例:
-```py
-from core.util import logging
+```python
+from botpy import logging
-logger = logging.getLogger(__name__)
```
+或者通过`botpy.logger`也可以获取logger对象
+
然后就可以愉快地使用 logger 进行打印。例如:
-```py
+```python
+from botpy import logger
+
logger.info("hello world!")
+
```
-### 设置日志级别
+### 日志设置
+
+SDK的日志设置集成在`bot.Client`的实例化阶段,也可通过[`logging.configure_logging`](botpy/logging.py)修改(均为可选)
+
+```python
+import botpy
+
+# 示例,非默认值
+botpy.Client(
+ log_level=10,
+ log_format="new format",
+ bot_log=None,
+ ext_handlers=False,
+ log_config="log_config.json"
+)
+
+```
+
+### log_level
+
+日志级别,默认为`INFO`
-通过 `export` 命令添加 `QQBOT_LOG_LEVEL` 环境变量可以设置日志级别。例如:
+命令行启动py可增加参数`-d` 或 `--debug`快捷打开debug日志
```bash
-export QQBOT_LOG_LEVEL=10 # 10表示DEBUG级别
+python3 demo_at_reply.py -d
```
-几个可选取值(参考了[logging 模块的取值](https://docs.python.org/3/library/logging.html#levels)):
+几个可选取值(参考了[logging模块的取值](https://docs.python.org/3/library/logging.html#levels)):
-| Level | 取值 |
-| -------- | ---- |
-| CRITICAL | 50 |
-| ERROR | 40 |
-| WARNING | 30 |
-| INFO | 20 |
-| DEBUG | 10 |
-| NOTSET | 0 |
+| Level | 取值 |
+| -------- | --- |
+| CRITICAL | 50 |
+| ERROR | 40 |
+| WARNING | 30 |
+| INFO | 20 |
+| DEBUG | 10 |
+| NOTSET | 0 |
-### 禁用日志文件输出
+### log_format
-默认情况下 qqbot 会在当前执行目录下生成格式为 `qqbot.log.*` 的日志文件。如果想禁用这些日志文件,可以通过设置 `QQBOT_DISABLE_LOG` 环境变量为 1 来关闭。
+日志控制台输出格式,默认为 `"\033[1;33m[%(levelname)s]\t(%(filename)s:%(lineno)s)%(funcName)s\t\033[0m%(message)s"`
-```bash
-export QQBOT_DISABLE_LOG=1 # 1表示禁用日志
+### bot_log
+
+是否启用`botpy`日志,默认为`True`
+
+`True` 启用
+`None` 禁用 拓展
+`False` 禁用 拓展+控制台输出
+
+### ext_handlers
+
+日志Handler拓展,为`True`使用默认拓展,`False`不添加拓展,可用list添加多个拓展。默认为`True`
+
+[默认拓展](./botpy/logging.py)
+
+```python
+import os
+import logging
+from logging.handlers import TimedRotatingFileHandler
+
+DEFAULT_FILE_HANDLER = {
+ # 要实例化的Handler
+ "handler": TimedRotatingFileHandler,
+ # 可选 Default to DEFAULT_FILE_FORMAT
+ "format": "%(asctime)s\t[%(levelname)s]\t(%(filename)s:%(lineno)s)%(funcName)s\t%(message)s",
+ # 可选 Default to DEBUG
+ "level": logging.DEBUG,
+ # 以下是Handler相关参数
+ "when": "D",
+ "backupCount": 7,
+ "encoding": "utf-8",
+ # *特殊* 对于filename参数,其中如有 %(name)s 会在实例化阶段填入相应的日志name
+ "filename": os.path.join(os.getcwd(), "%(name)s.log"),
+}
```
+
+#### 修改默认拓展
+
+```python
+import os
+import botpy
+from botpy.logging import DEFAULT_FILE_HANDLER
+
+# 修改日志路径
+DEFAULT_FILE_HANDLER["filename"] = os.path.join(os.getcwd(), "log", "%(name)s.log")
+# 修改日志格式
+DEFAULT_FILE_HANDLER["format"] = "new format"
+
+botpy.Client(ext_handlers=DEFAULT_FILE_HANDLER)
+```
+
+### log_config
+
+该参数将传入`logging.config.dictConfig`(内置logging而非botpy.logging),如果为.json/.yaml文件路径将从文件中读取配置,无默认值
diff --git a/docs/develop/pythonsdk/changelog/README.md b/docs/develop/pythonsdk/changelog/README.md
index 75b4bf69..a311da41 100644
--- a/docs/develop/pythonsdk/changelog/README.md
+++ b/docs/develop/pythonsdk/changelog/README.md
@@ -1,5 +1,32 @@
# PythonSDK更新日志
+## 2022-06-17
+
+* feat: 完善ws事件中Message数据的构建 ([9564cb2](https://github.com/tencent-connect/botpy/pull/103/commits/9564cb2858833fb8de442123226fe7a46f743fe6))
+* feat: 完善ws事件中User-Member数据的构建 ([109c74e](https://github.com/tencent-connect/botpy/pull/103/commits/109c74e8845ee0c91b0237a7bf427e9f4587cf47))
+* feat: 完善ws事件中Reaction、Audio、DirectMessage 以及 Forum(Thread类)数据的构建
+ ([26af7ad](https://github.com/tencent-connect/botpy/pull/103/commits/26af7adc5fb193707023f3d6ebdc4f6b36936cff))
+
+## 2022-06-15
+
+* feat: 优化gateway, api, flags, http中的部分逻辑构建与冗余代码 ([727ed73](https://github.com/tencent-connect/botpy/commit/727ed73823a3d4e7a9a5f507edb5a3ff0f9a5222))
+* docs: 更新文档中的部分demo ([a24bf94](https://github.com/tencent-connect/botpy/commit/a24bf94557a06cf5cfabeefc81de5376a8578346))
+* feat: 优化撤回消息api的用法&优化handle消息参数的返回值 ([166496e](https://github.com/tencent-connect/botpy/commit/166496e8b6615b7797b71b004ec394e1876611cb))
+
+## 2022-06-14
+
+* fix: 修复撤回消息隐藏小灰条没有生效的问题 ([6c37dd6](https://github.com/tencent-connect/botpy/commit/06afb5361b05ac05981b1453453c99b1f10faf87))
+
+## 2022-06-13
+
+* feat: 优化指令装饰器并新增指令装饰器demo ([40576451](https://github.com/ReadSmall/botpy/commit/405764517c32bf55b168bd217934d4d452655fb8))
+* feat: botpy 1.0 版本合入 ([8a30abe2](https://github.com/ReadSmall/botpy/commit/8a30abe28fc9daed122c60f517c1fbbd3198c8c0))
+* feat: 优化http模块&新增频道成员事件的Member构建&优化代码逻辑统一性,去除部分冗余代码 ([0add0b9](https://github.com/tencent-connect/botpy/commit/0add0b9dd761b12e98f66db91c34e0939c270c60))
+
+## 2022-06-11
+
+* fix: 优化logging模块 ([9162c24](https://github.com/tencent-connect/botpy/commit/9162c2452b71778a15dadbc088b76405e53fd68b))
+
## 2022-01-13
* fix: 修改发送主动消息后的审核状态判断为正常状态 ([9d2dbd3](https://github.com/tencent-connect/botpy/commit/9d2dbd38fc437f466bb4e3ec66892f035f39847b))
From 5d7abbd9b4aa5b3e9721a1f9124ffd78a1714415 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E5=BF=B5=E5=90=8C=E5=AD=A6?= <2660422452@qq.com>
Date: Mon, 20 Jun 2022 12:16:17 +0800
Subject: [PATCH 03/21] =?UTF-8?q?feat:=20pythonsdk=E6=9B=B4=E6=96=B0?=
=?UTF-8?q?=E4=BA=8B=E4=BB=B6=E7=9B=91=E5=90=AC=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../pythonsdk/websocket/listen_events.md | 517 +++++++++++++++---
1 file changed, 441 insertions(+), 76 deletions(-)
diff --git a/docs/develop/pythonsdk/websocket/listen_events.md b/docs/develop/pythonsdk/websocket/listen_events.md
index da175801..a0c1216c 100644
--- a/docs/develop/pythonsdk/websocket/listen_events.md
+++ b/docs/develop/pythonsdk/websocket/listen_events.md
@@ -1,104 +1,469 @@
-# WSS 消息体
+# 事件监听
-## 当前支持的事件类型
+**本文档概述[botpy的事件监听](https://github.com/tencent-connect/botpy/blob/feature/botpy_1.0/botpy/flags.py)**
+
+## 准备
+
+```python
+import botpy
+```
+
+## 使用方式
+
+通过继承实现`bot.Client`, 实现自己的机器人Client
+
+在`MyClient`类中调用函数实现处理事件的功能
+
+```python
+class MyClient(botpy.Client):
+```
+
+## 监听的事件
+
+### 公域消息事件的监听
+
+首先需要订阅事件`public_guild_messages`
+
+```python
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+```
+
+| 对应函数 | 说明 |
+| ------------------------------------------------ | ----------- |
+| on_at_message_create(self, message: Message) | 当收到@机器人的消息时 |
+| on_public_message_delete(self, message: Message) | 当频道的消息被删除时 |
+
+- **注:需要引入`Message`**
+
+```python
+from botpy.message import Message
+```
+
+```python
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ """
+ 此处为处理该事件的代码
+ """
+ async def on_public_message_delete(self, message: Message):
+ """
+ 此处为处理该事件的代码
+ """
+```
+
+### 消息事件的监听
+
+- **仅 私域 机器人能够设置此 intents**
+
+首先需要订阅事件`guild_messages`
+
+```python
+intents = botpy.Intents(guild_messages=True)
+client = MyClient(intents=intents)
+```
+
+| 对应函数 | 说明 |
+| ----------------------------------------- | -------------------------------------------------------------- |
+| on_message_create(self, message: Message) | 发送消息事件,代表频道内的全部消息,而不只是 at 机器人的消息。内容与 AT_MESSAGE_CREATE 相同 |
+| on_message_delete(self, message: Message) | 删除(撤回)消息事件 |
+
+- **注:需要引入`Message`**
+
+```python
+from botpy.message import Message
+```
+
+```python
+class MyClient(botpy.Client):
+ async def on_message_create(self, message: Message):
+ """
+ 此处为处理该事件的代码
+ """
+ async def on_message_delete(self, message: Message):
+ """
+ 此处为处理该事件的代码
+ """
+```
+
+### 私信事件的监听
+
+首先需要订阅事件`direct_message`
+
+```python
+intents = botpy.Intents(direct_message=True)
+client = MyClient(intents=intents)
+```
+
+| 对应函数 | 说明 |
+| ------------------------------------------------------ | ---------------- |
+| on_direct_message_create(self, message: DirectMessage) | 当收到用户发给机器人的私信消息时 |
+| on_direct_message_delete(self, message: DirectMessage) | 删除(撤回)消息事件 |
+
+- **注:需要引入`DirectMessage`**
+
+```python
+from botpy.message import DirectMessage
+```
+
+```python
+class MyClient(botpy.Client):
+ async def on_direct_message_create(self, message: DirectMessage):
+ """
+ 此处为处理该事件的代码
+ """
+ async def on_direct_message_delete(self, message: DirectMessage):
+ """
+ 此处为处理该事件的代码
+ """
+```
+
+### 消息相关互动事件的监听
+
+首先需要订阅事件`guild_message_reactions`
+
+```python
+intents = botpy.Intents(guild_message_reactions=True)
+client = MyClient(intents=intents)
+```
+
+| 对应函数 | 说明 |
+| ---------------------------------------------------- | --------- |
+| on_message_reaction_add(self, reaction: Reaction) | 为消息添加表情表态 |
+| on_message_reaction_remove(self, reaction: Reaction) | 为消息删除表情表态 |
+
+- **注:需要引入`Reaction`**
+
+```python
+from botpy.reaction import Reaction
+```
+
+```python
+class MyClient(botpy.Client):
+ async def on_message_reaction_add(self, reaction: Reaction):
+ """
+ 此处为处理该事件的代码
+ """
+ async def on_message_reaction_remove(self, reaction: Reaction):
+ """
+ 此处为处理该事件的代码
+ """
+```
+
+### 频道事件的监听
+
+首先需要订阅事件`guilds`
+
+```python
+intents = botpy.Intents(guilds=True)
+client = MyClient(intents=intents)
+```
+
+| 对应函数 | 说明 |
+| ----------------------------------------- | ------------- |
+| on_guild_create(self, guild: Guild) | 当机器人加入新guild时 |
+| on_guild_update(self, guild: Guild) | 当guild资料发生变更时 |
+| on_guild_delete(self, guild: Guild) | 当机器人退出guild时 |
+| on_channel_create(self, channel: Channel) | 当channel被创建时 |
+| on_channel_update(self, channel: Channel) | 当channel被更新时 |
+| on_channel_delete(self, channel: Channel) | 当channel被删除时 |
+
+- **注:需要引入`Guild`和`Channel`**
+
+```python
+from botpy.guild import Guild
+from botpy.channel import Channel
+```
```python
-class HandlerType(Enum):
- PLAIN_EVENT_HANDLER = 0 # 透传事件
- GUILD_EVENT_HANDLER = 1 # 频道事件
- GUILD_MEMBER_EVENT_HANDLER = 2 # 频道成员事件
- CHANNEL_EVENT_HANDLER = 3 # 子频道事件
- MESSAGE_EVENT_HANDLER = 4 # 消息事件
- AT_MESSAGE_EVENT_HANDLER = 5 # At消息事件
- DIRECT_MESSAGE_EVENT_HANDLER = 6 # 私信事件
- AUDIO_EVENT_HANDLER = 7 # 音频事件
- MESSAGE_REACTIONS_EVENT_HANDLER = 8 # 表情表态事件
+class MyClient(botpy.Client):
+ async def on_guild_create(self, guild: Guild):
+ """
+ 此处为处理该事件的代码
+ """
+ async def on_guild_update(self, guild: Guild):
+ """
+ 此处为处理该事件的代码
+ """
+ async def on_guild_delete(self, guild: Guild):
+ """
+ 此处为处理该事件的代码
+ """
+ async def on_channel_create(self, channel: Channel):
+ """
+ 此处为处理该事件的代码
+ """
+ async def on_channel_update(self, channel: Channel):
+ """
+ 此处为处理该事件的代码
+ """
+ async def on_channel_delete(self, channel: Channel):
+ """
+ 此处为处理该事件的代码
+ """
```
-## 当前支持的事件
+### 频道成员事件的监听
+
+首先需要订阅事件`guild_members`
```python
-class WsEvent:
- EventGuildCreate = "GUILD_CREATE"
- EventGuildUpdate = "GUILD_UPDATE"
- EventGuildDelete = "GUILD_DELETE"
-
- EventChannelCreate = "CHANNEL_CREATE"
- EventChannelUpdate = "CHANNEL_UPDATE"
- EventChannelDelete = "CHANNEL_DELETE"
+intents = botpy.Intents(guild_members=True)
+client = MyClient(intents=intents)
+```
- EventGuildMemberAdd = "GUILD_MEMBER_ADD"
- EventGuildMemberUpdate = "GUILD_MEMBER_UPDATE"
- EventGuildMemberRemove = "GUILD_MEMBER_REMOVE"
+| 对应函数 | 说明 |
+| -------------------------------------------- | -------- |
+| on_guild_member_add(self, member: Member) | 当成员加入时 |
+| on_guild_member_update(self, member: Member) | 当成员资料变更时 |
+| on_guild_member_remove(self, member: Member) | 当成员被移除时 |
- EventMessageCreate = "MESSAGE_CREATE"
- EventDirectMessageCreate = "DIRECT_MESSAGE_CREATE"
- EventAtMessageCreate = "AT_MESSAGE_CREATE"
+- **注:需要引入`GuildMember`**
- EventAudioStart = "AUDIO_START"
- EventAudioFinish = "AUDIO_FINISH"
- EventAudioOnMic = "AUDIO_ON_MIC"
- EventAudioOffMic = "AUDIO_OFF_MIC"
+```python
+from botpy.user import Member
+```
- EventMessageReactionAdd = "MESSAGE_REACTION_ADD"
- EventMessageReactionRemove = "MESSAGE_REACTION_REMOVE"
+```python
+class MyClient(botpy.Client):
+ async def on_guild_member_add(self, member: Member):
+ """
+ 此处为处理该事件的代码
+ """
+ async def on_guild_member_update(self, member: Member):
+ """
+ 此处为处理该事件的代码
+ """
+ async def on_guild_member_remove(self, member: Member):
+ """
+ 此处为处理该事件的代码
+ """
```
-## 当前事件的返回类型
+### 互动事件的监听
+
+首先需要订阅事件`interaction`
-``` py
-#透传事件(无具体的数据对象,根据后台返回Json对象)
-def _plain_handler(event, data):
-#频道事件
-def _guild_handler(event, guild:Guild):
-#频道成员事件
-def _guild_member_handler(event, guild_member: GuildMember):
-#子频道事件
-def _channel_handler(event, channel: Channel):
-#消息事件
-def _message_handler(event, message: Message):
-#At消息事件
-def _message_handler(event, message: Message):
-#私信消息事件
-def _message_handler(event, message: Message):
-#表情表态消息事件
-def _message_reactions_handler(event, reaction: Reaction):
+```python
+intents = botpy.Intents(interaction=True)
+client = MyClient(intents=intents)
```
-## 使用示例
+| 对应函数 | 说明 |
+| ----------------------------------------------------- | ---------------- |
+| on_interaction_create(self, interaction: Interaction) | 当收到用户发给机器人的私信消息时 |
-### 创建 WSS 实例并监听消息
+- **注:需要引入`Interaction`**
-```py
-import qqbot
+```python
+from botpy.interaction import Interaction
+```
-token = qqbot.Token({appid}, {token})
+```python
+class MyClient(botpy.Client):
+ async def on_interaction_create(self, interaction: Interaction):
+ """
+ 此处为处理该事件的代码
+ """
+```
+
+### 消息审核事件的监听
+首先需要订阅事件`message_audit`
-def _message_handler(event, message: Message):
- msg_api = qqbot.MessageAPI(t_token, False)
- # 打印返回信息
- qqbot.logger.info("event %s" % event + ",receive message %s" % message.content)
- # 构造消息发送请求数据对象
- send = qqbot.MessageSendRequest("<@%s>谢谢你,加油" % message.author.id, message.id)
- # 通过api发送回复消息
- msg_api.post_message(message.channel_id, send)
+```python
+intents = botpy.Intents(message_audit=True)
+client = MyClient(intents=intents)
+```
+| 对应函数 | 说明 |
+| ---------------------------------------------------- | ------- |
+| on_message_audit_pass(self, message: MessageAudit) | 消息审核通过 |
+| on_message_audit_reject(self, message: MessageAudit) | 消息审核不通过 |
-qqbot_handler = qqbot.Handler(qqbot.HandlerType.AT_MESSAGE_EVENT_HANDLER, _message_handler)
-qqbot.listen_events(token, False, qqbot_handler)
+- **注:需要引入`MessageAudit`**
+
+```python
+from botpy.message import MessageAudit
```
-如果同时需要监听多个事件,在``listen_events``增加多个事件的handler对象
-```py
-# 同时监听at消息和私信消息的事件
-qqbot_handler = qqbot.Handler(
- qqbot.HandlerType.AT_MESSAGE_EVENT_HANDLER, _message_handler
-)
-qqbot_direct_message_handler = qqbot.Handler(
- qqbot.HandlerType.DIRECT_MESSAGE_EVENT_HANDLER, _direct_message_handler
-)
-qqbot.listen_events(token, False, qqbot_handler, qqbot_direct_message_handler)
+```python
+class MyClient(botpy.Client):
+ async def on_message_audit_pass(self, message: MessageAudit):
+ """
+ 此处为处理该事件的代码
+ """
+ async def on_message_audit_reject(self, message: MessageAudit):
+ """
+ 此处为处理该事件的代码
+ """
+```
+### 论坛事件的监听
+
+- **仅 私域 机器人能够设置此 intents**
+
+首先需要订阅事件`forums`
+
+```python
+intents = botpy.Intents(forums=True)
+client = MyClient(intents=intents)
+```
+
+| 对应函数 | 说明 |
+| ------------------------------------------------------------- | ---------- |
+| on_forum_thread_create(self, thread: Thread) | 当用户创建主题时 |
+| on_forum_thread_update(self, thread: Thread) | 当用户更新主题时 |
+| on_forum_thread_delete(self, thread: Thread) | 当用户删除主题时 |
+| on_forum_post_create(self, post: Post) | 当用户创建帖子时 |
+| on_forum_post_delete(self, post: Post) | 当用户删除帖子时 |
+| on_forum_reply_create(self, reply: Reply) | 当用户回复评论时 |
+| on_forum_reply_delete(self, reply: Reply) | 当用户删除评论时 |
+| on_forum_publish_audit_result(self, auditresult: AuditResult) | 当用户发表审核通过时 |
+
+- **注:需要引入`Thread`、`Post`、`Reply`和`AuditResult`**
+
+```python
+from botpy.forum import Thread
+from botpy.types.forum import Post, Reply, AuditResult
```
+```python
+class MyClient(botpy.Client):
+ async def on_forum_thread_create(self, thread: Thread):
+ """
+ 此处为处理该事件的代码
+ """
+ async def on_forum_thread_update(self, thread: Thread):
+ """
+ 此处为处理该事件的代码
+ """
+ async def on_forum_thread_delete(self, thread: Thread):
+ """
+ 此处为处理该事件的代码
+ """
+ async def on_forum_post_create(self, post: Post):
+ """
+ 此处为处理该事件的代码
+ """
+ async def on_forum_post_delete(self, post: Post):
+ """
+ 此处为处理该事件的代码
+ """
+ async def on_forum_reply_create(self, reply: Reply):
+ """
+ 此处为处理该事件的代码
+ """
+ async def on_forum_reply_delete(self, reply: Reply):
+ """
+ 此处为处理该事件的代码
+ """
+ async def on_forum_publish_audit_result(self, auditresult: AuditResult):
+ """
+ 此处为处理该事件的代码
+ """
+```
+
+### 音频事件的监听
+
+首先需要订阅事件`audio_action`
+
+```python
+intents = botpy.Intents(audio_action=True)
+client = MyClient(intents=intents)
+```
+
+| 对应函数 | 说明 |
+| ------------------------------------ | ------- |
+| on_audio_start(self, audio: Audio) | 音频开始播放时 |
+| on_audio_finish(self, audio: Audio) | 音频播放结束时 |
+| on_audio_on_mic(self, audio: Audio) | 上麦时 |
+| on_audio_off_mic(self, audio: Audio) | 下麦时 |
+
+- **注:需要引入`Audio`**
+
+```python
+from botpy.audio import Audio
+```
+
+```python
+class MyClient(botpy.Client):
+ async def on_audio_start(self, audio: Audio):
+ """
+ 此处为处理该事件的代码
+ """
+ async def on_audio_finish(self, audio: Audio):
+ """
+ 此处为处理该事件的代码
+ """
+ async def on_audio_on_mic(self, audio: Audio):
+ """
+ 此处为处理该事件的代码
+ """
+ async def on_audio_off_mic(self, audio: Audio):
+ """
+ 此处为处理该事件的代码
+ """
+```
+
+## 订阅事件的方法
+
+### 方法一:
+
+```python
+intents = botpy.Intents()
+client = MyClient(intents=intents)
+```
+
+在Intents中填入对应的[参数](#参数列表)
+
+例子:
+
+```python
+intents = botpy.Intents(public_guild_messages=True, direct_message=True, guilds=True)
+```
+
+### 方法二:
+
+```python
+intents = botpy.Intents.none()
+```
+
+然后打开对应的订阅([参数列表](#参数列表))
+
+```python
+intents.public_guild_messages=True
+intents.direct_message=True
+intents.guilds=True
+```
+
+- **说明**
+
+方法二对应的快捷订阅方式为
+
+1. 订阅所有事件
+
+```python
+intents = botpy.Intents.all()
+```
+
+2. 订阅所有的公域事件
+
+```python
+intents = botpy.Intents.default()
+```
+
+#### 参数列表
+
+| 参数 | 含义 |
+| ----------------------- | ---------------------------------- |
+| public_guild_messages | 公域消息事件 |
+| guild_messages | 消息事件 **(仅 `私域` 机器人能够设置此 intents)** |
+| direct_message | 私信事件 |
+| guild_message_reactions | 消息相关互动事件 |
+| guilds | 频道事件 |
+| guild_members | 频道成员事件 |
+| interaction | 互动事件 |
+| message_audit | 消息审核事件 |
+| forums | 论坛事件 **(仅 `私域` 机器人能够设置此 intents)** |
+| audio_action | 音频事件 |
\ No newline at end of file
From 7bb68b46ebb353302bc08316c012b2425fdc7571 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E5=BF=B5=E5=90=8C=E5=AD=A6?= <2660422452@qq.com>
Date: Mon, 20 Jun 2022 12:19:15 +0800
Subject: [PATCH 04/21] =?UTF-8?q?feat:=20pythonsdk=E6=9B=B4=E6=96=B0?=
=?UTF-8?q?=E7=94=A8=E6=88=B7API=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docs/develop/pythonsdk/api/user/me.md | 12 +++--
docs/develop/pythonsdk/api/user/me_guilds.md | 50 +++++++-------------
2 files changed, 24 insertions(+), 38 deletions(-)
diff --git a/docs/develop/pythonsdk/api/user/me.md b/docs/develop/pythonsdk/api/user/me.md
index abd4d030..b9e71bcf 100644
--- a/docs/develop/pythonsdk/api/user/me.md
+++ b/docs/develop/pythonsdk/api/user/me.md
@@ -3,12 +3,16 @@
## 使用示例
``` python
-import qqbot
+import botpy
+from botpy.message import Message
-token = qqbot.Token({appid}, {token})
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ user = await self.api.me()
-api = qqbot.UserAPI(token, False)
-user = api.me()
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 返回说明
diff --git a/docs/develop/pythonsdk/api/user/me_guilds.md b/docs/develop/pythonsdk/api/user/me_guilds.md
index eb2e5b30..75a7bd88 100644
--- a/docs/develop/pythonsdk/api/user/me_guilds.md
+++ b/docs/develop/pythonsdk/api/user/me_guilds.md
@@ -3,24 +3,18 @@
### 使用示例
#### sync
```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-def demo():
- api = qqbot.UserAPI(token, False)
- guilds = api.me_guilds()
-```
-
-#### async
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-async def demo():
- api = qqbot.AsyncUserAPI(token, False)
- guilds = await api.me_guilds()
+import botpy
+from botpy.message import Message
+
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ guild_list = await self.api.me_guilds(guild_id=message.guild_id, limit=100, desc=True)
+ for guild in guild_list:
+ botpy.logger.info(f'guild_id: {guild.get("id")} guild_name: {guild.get("name")}')
+
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
@@ -28,21 +22,9 @@ async def demo():
| 字段名 | 必填 | 类型 | 描述 |
| ------- | ---- | ------------------------- | ---------------- |
-| options | 否 | [ReqOptions](#reqoptions) | 获取频道列表范围 |
-
-### ReqOptions
-
-| 字段名 | 必填 | 类型 | 描述 |
-| ------ | ---- | ------ | ------------------------------------------------ |
-| before | 否 | string | 读取此 `guild id` 之前的数据 |
-| after | 否 | string | 读取此 `guild id` 之后的数据 |
-| limit | 否 | number | 每次拉取多少条数据,最大不超过 `100`,默认 `100` |
-
-::: warning 注意
-
-before、after 同时存在时,以 before 为准。
-
-:::
+| guild_id | 是 | string | 获取频道列表范围 |
+| limit | 否 | int | 获取频道列表范围 |
+| desc | 否 | bool | 获取列表返回的顺序是否为反序 |
## 返回说明
@@ -65,7 +47,7 @@ before、after 同时存在时,以 before 为准。
[
{
"id": 'xxxxxx',
- "name": 'Ost测试频道',
+ "name": '测试频道',
"icon": 'xxxxxx',
"owner": false,
},
From 945f9328bdc45d71e15cee1d30e37e442c99c818 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E5=BF=B5=E5=90=8C=E5=AD=A6?= <2660422452@qq.com>
Date: Mon, 20 Jun 2022 12:19:37 +0800
Subject: [PATCH 05/21] =?UTF-8?q?feat:=20pythonsdk=E6=9B=B4=E6=96=B0?=
=?UTF-8?q?=E9=9F=B3=E9=A2=91API=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../pythonsdk/api/audio/audio_off_mic.md | 29 +++++++++++++++++++
.../pythonsdk/api/audio/audio_on_mic.md | 29 +++++++++++++++++++
.../develop/pythonsdk/api/audio/post_audio.md | 20 +++++++++----
3 files changed, 73 insertions(+), 5 deletions(-)
create mode 100644 docs/develop/pythonsdk/api/audio/audio_off_mic.md
create mode 100644 docs/develop/pythonsdk/api/audio/audio_on_mic.md
diff --git a/docs/develop/pythonsdk/api/audio/audio_off_mic.md b/docs/develop/pythonsdk/api/audio/audio_off_mic.md
new file mode 100644
index 00000000..20049ac6
--- /dev/null
+++ b/docs/develop/pythonsdk/api/audio/audio_off_mic.md
@@ -0,0 +1,29 @@
+# 机器人下麦
+
+## 使用示例
+
+```py
+import botpy
+from botpy.audio import Audio
+
+class MyClient(botpy.Client):
+ async def on_audio_start(self, audio: Audio):
+ await self.api.off_microphone(audio.channel_id)
+
+intents = botpy.Intents(audio_action=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
+
+```
+
+## 参数说明
+
+| 字段名 | 类型 | 描述 |
+| ------------ | ------------------------------------- | -------------- |
+| channel_id | String | 子频道 id |
+
+## 返回说明
+
+```json
+{}
+```
\ No newline at end of file
diff --git a/docs/develop/pythonsdk/api/audio/audio_on_mic.md b/docs/develop/pythonsdk/api/audio/audio_on_mic.md
new file mode 100644
index 00000000..96202ef0
--- /dev/null
+++ b/docs/develop/pythonsdk/api/audio/audio_on_mic.md
@@ -0,0 +1,29 @@
+# 机器人上麦
+
+## 使用示例
+
+```py
+import botpy
+from botpy.audio import Audio
+
+class MyClient(botpy.Client):
+ async def on_audio_start(self, audio: Audio):
+ await self.api.on_microphone(audio.channel_id)
+
+intents = botpy.Intents(audio_action=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
+
+```
+
+## 参数说明
+
+| 字段名 | 类型 | 描述 |
+| ------------ | ------------------------------------- | -------------- |
+| channel_id | String | 子频道 id |
+
+## 返回说明
+
+```json
+{}
+```
diff --git a/docs/develop/pythonsdk/api/audio/post_audio.md b/docs/develop/pythonsdk/api/audio/post_audio.md
index a67a10a9..adffa590 100644
--- a/docs/develop/pythonsdk/api/audio/post_audio.md
+++ b/docs/develop/pythonsdk/api/audio/post_audio.md
@@ -3,12 +3,22 @@
## 使用示例
```py
-import qqbot
+import botpy
+from botpy.audio import Audio
+
+class MyClient(botpy.Client):
+ async def on_audio_start(self, audio: Audio):
+ audio_control={
+ "audio_url":"url",
+ "text":"简单爱-周杰伦",
+ "status":"START",
+ }
+ await self.api.update_audio(audio.channel_id, audio_control=audio_control)
+
+intents = botpy.Intents(audio_action=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
-token = qqbot.Token({appid}, {token})
-
-audioApi = qqbot.AudioAPI(token, False)
-result = audioApi.post_audio(channel_id, audio_control)
```
## 参数说明
From 800fbae3368c9c109dc50ee634ffb583b73b3a03 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E5=BF=B5=E5=90=8C=E5=AD=A6?= <2660422452@qq.com>
Date: Mon, 20 Jun 2022 12:20:37 +0800
Subject: [PATCH 06/21] =?UTF-8?q?feat:=20pythonsdk=E6=9B=B4=E6=96=B0?=
=?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=9D=83=E9=99=90API=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../api/announce/post_recommended_channels.md | 98 -------------------
.../api/api_permissions/get_permissions.md | 28 +++---
.../api/api_permissions/post_permission.md | 42 ++++----
3 files changed, 33 insertions(+), 135 deletions(-)
delete mode 100644 docs/develop/pythonsdk/api/announce/post_recommended_channels.md
diff --git a/docs/develop/pythonsdk/api/announce/post_recommended_channels.md b/docs/develop/pythonsdk/api/announce/post_recommended_channels.md
deleted file mode 100644
index a7ea8c53..00000000
--- a/docs/develop/pythonsdk/api/announce/post_recommended_channels.md
+++ /dev/null
@@ -1,98 +0,0 @@
-# 创建频道公告推荐子频道
-
-用于将指定子频道设置为当前频道的推荐子频道,并以全局公告形式展示。
-
-::: warning 注意
-
-- 同频道内推荐子频道最多只能创建 `3` 条。
-- 推荐子频道和全局公告**不能同时存在**,会互相顶替设置。
-- 只有子频道权限为全体成员可见才可设置为推荐子频道。
-- **删除频道公告**推荐子频道请使用 [删除频道公告](./delete_channel_announce.md),并将 `messageId` 设置为 `all`。
-
-:::
-
-## 使用示例
-
-#### sync
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-def demo():
- announce_api = qqbot.AnnounceAPI(token, False)
- channel_list = [RecommendChannel(channel_id, "xxx")]
- request = RecommendChannelRequest(0, channel_list)
- announce = announce_api.post_recommended_channels(guild_id, request)
-```
-
-#### async
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-async def demo():
- announce_api = qqbot.AsyncAnnounceAPI(token, False)
- channel_list = [RecommendChannel(channel_id, "xxx")]
- request = RecommendChannelRequest(0, channel_list)
- announce = await announce_api.post_recommended_channels(guild_id, request)
-```
-
-## 参数说明
-
-| 字段名 | 必填 | 类型 | 描述 |
-| ------------ | ---- | ----------------------------- | ---------------------------- |
-| guildId | 是 | string | 频道 ID |
-| request | 是 | [RecommendChannelRequest](#RecommendChannelRequest) | 推荐子频道列表 |
-
-### RecommendChannelRequest
-
-| 字段名 | 必填 | 类型 | 描述 |
-| ------------------ | ---- | --------------------------------------- | ----------------------------------------------- |
-| announces_type | 否 | number | 公告类别 0:成员公告,1:欢迎公告,默认为成员公告 |
-| recommend_channels | 是 | RecommendChannel[](#recommendchannel) 列表 | 推荐子频道列表 |
-
-### RecommendChannel
-
-| 字段名 | 类型 | 描述 |
-| ---------- | ------ | ------------------------- |
-| channel_id | string | 子频道 ID |
-| introduce | string | 推荐语 |
-
-## 返回说明
-
-返回 [Announce](#announce) 对象。
-
-### Announce
-
-| 字段名 | 类型 | 描述 |
-| ------------------ | -------------------------------------------- | -------------------------------- |
-| guild_id | string | 频道 ID |
-| channel_id | string | 子频道 ID |
-| message_id | string | 消息 ID |
-| announce_type | number | 推荐类别 0:成员公告; 1:欢迎公告 |
-| recommend_channels | [RecommendChannel](#recommendchannel) 列表 | 推荐子频道详情列表 |
-
-## 返回示例
-
-`data`:
-
-```json
-{
- "guild_id": "xxxxxx",
- "channel_id": "xxxxx",
- "message_id": "",
- "announces_type": 0,
- "recommend_channels": [
- {
- "channel_id": "xxxx",
- "introduce": "推荐语"
- },
- {
- "channel_id": "xxxx",
- "introduce": "推荐语"
- }
- ]
-}
-```
diff --git a/docs/develop/pythonsdk/api/api_permissions/get_permissions.md b/docs/develop/pythonsdk/api/api_permissions/get_permissions.md
index c97c69bc..f9057629 100644
--- a/docs/develop/pythonsdk/api/api_permissions/get_permissions.md
+++ b/docs/develop/pythonsdk/api/api_permissions/get_permissions.md
@@ -4,28 +4,28 @@
## 使用示例
-#### sync
```python
-import qqbot
+import os
-token = qqbot.Token({appid}, {token})
+import botpy
+from botpy import logging
+from botpy.message import Message
-def demo():
- api = qqbot.APIPermissionAPI(token, False)
- permissions = api.get_permissions(guild_id)
-```
+_log = logging.get_logger()
-#### async
-```python
-import qqbot
+class MyClient(botpy.Client):
-token = qqbot.Token({appid}, {token})
+ async def on_at_message_create(self, message: Message):
+
+ apis = await self.api.get_permissions(message.guild_id)
+ for api in apis:
+ _log.info("api: %s" % api["desc"] + ", status: %d" % api["auth_status"])
-async def demo():
- api = qqbot.AsyncAPIPermissionAPI(token, False)
- permissions = await api.get_permissions(guild_id)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
diff --git a/docs/develop/pythonsdk/api/api_permissions/post_permission.md b/docs/develop/pythonsdk/api/api_permissions/post_permission.md
index 54d8ac39..a9e0e89f 100644
--- a/docs/develop/pythonsdk/api/api_permissions/post_permission.md
+++ b/docs/develop/pythonsdk/api/api_permissions/post_permission.md
@@ -12,29 +12,31 @@
## 使用示例
```python
-import qqbot
+import os
-token = qqbot.Token({appid}, {token})
+import botpy
+from botpy import logging
+from botpy.message import Message
-def demo():
- api = qqbot.APIPermissionAPI(token, False)
- identity = APIPermissionDemandIdentify(path, method)
- demand_to_create = PermissionDemandToCreate(channel_id, identity)
- demand = api.post_permission_demand(guild_id, demand_to_create)
-```
+_log = logging.get_logger()
-#### async
-```python
-import qqbot
+class MyClient(botpy.Client):
-token = qqbot.Token({appid}, {token})
+ async def on_at_message_create(self, message: Message):
+
+ demand_identity = APIPermissionDemandIdentify(path="/guilds/{guild_id}/members/{user_id}", method="GET")
+ demand = await self.api.post_permission_demand(
+ message.guild_id,
+ message.channel_id,
+ demand_identity,
+ '获取当前频道成员信息'
+ )
+ _log.info("api title: %s" % demand["title"] + ", desc: %s" % demand["desc"])
-async def demo():
- api = qqbot.AsyncAPIPermissionAPI(token, False)
- identity = APIPermissionDemandIdentify(path, method)
- demand_to_create = PermissionDemandToCreate(channel_id, identity)
- demand = await api.post_permission_demand(guild_id, demand_to_create)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
@@ -42,12 +44,6 @@ async def demo():
| 字段名 | 必填 | 类型 | 描述 |
| ------------------- | ---- | ----------------------------------------------------- | ---------------------------- |
| guild_id | 是 | string | [频道 ID](../../model/guild.md) |
-| permission_demand_to_create | 是 | [PermissionDemandToCreate](#PermissionDemandToCreate) | 授权链接对象 |
-
-### PermissionDemandToCreate
-
-| 字段名 | 必填 | 类型 | 描述 |
-| ------------ | ---- | ----------------------------------------------------------- | ------------------------------------------------- |
| channel_id | 是 | string | 授权链接发送的[子频道 ID](../../model/channel.md) |
| api_identify | 是 | [APIPermissionDemandIdentify](#apipermissiondemandidentify) | API 权限需求标识对象 |
| desc | 否 | string | 机器人申请对应的 API 接口权限后可以使用功能的描述 |
From 56aadaf962f9bdd5a1f997b78518a52934541ed4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E5=BF=B5=E5=90=8C=E5=AD=A6?= <2660422452@qq.com>
Date: Thu, 23 Jun 2022 19:00:56 +0800
Subject: [PATCH 07/21] =?UTF-8?q?feat:=20=E4=BF=AE=E6=AD=A3=E8=A1=A8?=
=?UTF-8?q?=E6=83=85=E8=A1=A8=E6=80=81=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docs/develop/pythonsdk/config.js | 5 +--
docs/develop/pythonsdk/model/reaction.md | 43 +++++++++++++++++++-----
2 files changed, 37 insertions(+), 11 deletions(-)
diff --git a/docs/develop/pythonsdk/config.js b/docs/develop/pythonsdk/config.js
index 2fc55530..f2dc9994 100644
--- a/docs/develop/pythonsdk/config.js
+++ b/docs/develop/pythonsdk/config.js
@@ -156,7 +156,6 @@ module.exports = {
'api/announce/delete_guild_announce',
'api/announce/create_channel_announce',
'api/announce/delete_channel_announce',
- 'api/announce/post_recommended_channels',
],
},
{
@@ -186,7 +185,9 @@ module.exports = {
collapsable: false,
sidebarDepth: 0,
children: [
- 'api/audio/post_audio'
+ 'api/audio/post_audio',
+ 'api/audio/audio_on_mic',
+ 'api/audio/audio_off_mic',
],
},
{
diff --git a/docs/develop/pythonsdk/model/reaction.md b/docs/develop/pythonsdk/model/reaction.md
index 42859451..43f3a478 100644
--- a/docs/develop/pythonsdk/model/reaction.md
+++ b/docs/develop/pythonsdk/model/reaction.md
@@ -57,20 +57,45 @@
### 代码示例
```python
-import qqbot
-from qqbot.core.util.yaml_util import YamlUtil
+from typing import List
-test_config = YamlUtil.read(os.path.join(os.path.dirname(__file__), "config.yaml"))
+import botpy
+from botpy.message import Message
+from botpy.types import reaction
+from botpy.types.user import User
-async def _reaction_handler(event, reaction: qqbot.Reaction):
- qqbot.logger.info("event %s" % event + ", reaction channel id %s" % reaction.channel_id)
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ users: List[User] = []
+ cookie = ""
+ while True:
+ reactionUsers: reaction.ReactionUsers = await self.api.get_reaction_users(
+ "2568610",
+ "088de19cbeb883e7e97110a2e39c0138d80d48acfc879406",
+ 1,
+ "4",
+ cookie=cookie,
+ )
+ if not reactionUsers:
+ break
+
+ users.extend(reactionUsers["users"])
+
+ if reactionUsers["is_end"]:
+ break
+ else:
+ cookie = reactionUsers["cookie"]
+
+ print(len(users))
+ for user in users:
+ print(user["username"])
+
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents)
+client.run(appid={appid}, token={token})
-if __name__ == "__main__":
- t_token = qqbot.Token(test_config["token"]["appid"], test_config["token"]["token"])
- handler = qqbot.Handler(qqbot.HandlerType.MESSAGE_REACTIONS_EVENT_HANDLER, _reaction_handler)
- qqbot.async_listen_events(t_token, False, handler)
```
在频道内,长按某条消息进行表情回复 `👍`,ws 收到消息并打印如下 log 信息:
From 2ec1c0195fea09dce8e226ccae683a44a3f787a6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E5=BF=B5=E5=90=8C=E5=AD=A6?= <2660422452@qq.com>
Date: Fri, 24 Jun 2022 00:54:50 +0800
Subject: [PATCH 08/21] =?UTF-8?q?feat:=20pythonsdk=E6=9B=B4=E6=96=B0?=
=?UTF-8?q?=E5=AD=90=E9=A2=91=E9=81=93API=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../pythonsdk/api/channel/create_channel.md | 49 +++++++++++--------
.../pythonsdk/api/channel/delete_channel.md | 45 ++++-------------
.../pythonsdk/api/channel/get_channel.md | 12 +++--
.../pythonsdk/api/channel/get_channels.md | 12 +++--
.../pythonsdk/api/channel/update_channel.md | 23 ++++++---
5 files changed, 71 insertions(+), 70 deletions(-)
diff --git a/docs/develop/pythonsdk/api/channel/create_channel.md b/docs/develop/pythonsdk/api/channel/create_channel.md
index cfb6e20e..30c5e9d2 100644
--- a/docs/develop/pythonsdk/api/channel/create_channel.md
+++ b/docs/develop/pythonsdk/api/channel/create_channel.md
@@ -6,12 +6,24 @@
## 使用示例
```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-api = qqbot.ChannelAPI(token, False)
-channel_res = api.create_channel(channel_id, channel)
+import botpy
+from botpy.message import Message
+from botpy.types.channel import ChannelSubType, ChannelType
+
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.create_channel(
+ guild_id=message.guild_id,
+ name="创建子频道",
+ type=ChannelType.TEXT_CHANNEL,
+ sub_type=ChannelSubType.TALK,
+ position=1,
+ parent_id=1,
+ )
+
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
::: warning 注意
@@ -29,17 +41,12 @@ channel_res = api.create_channel(channel_id, channel)
| 字段名 | 必填 | 类型 | 描述 |
| ------- | ---- | ------------------- | ---------- |
| guild_id | 是 | string | 频道 ID |
-| channel | 是 | [Channel](#channel) | 子频道对象 |
-
-### Channel
+| name | 是 | string | 子频道名 |
+| type | 是 | [ChannelType](#channeltype) | 子频道类型 |
+| sub_type | 是 | [ChannelSubType](#channelsubtype) | 子频道子类型 |
+| position | 否 | int | 排序,非必填 |
+| parent_id | 否 | int | 分组 ID |
-| 字段名 | 类型 | 必填 | 描述 |
-| --------- | ------ | ---- | ---------------------------------------------- |
-| name | string | 是 | 子频道名 |
-| type | number | 是 | 子频道类型 [ChannelType](#channeltype) |
-| sub_type | number | 是 | 子频道子类型 [ChannelSubType](#channelsubtype) |
-| position | number | 否 | 排序,非必填 |
-| parent_id | string | 否 | 分组 ID |
### ChannelType
@@ -76,9 +83,9 @@ channel_res = api.create_channel(channel_id, channel)
| id | string | 子频道 ID |
| guild_id | string | 频道 ID |
| name | string | 子频道名 |
-| type | number | 子频道类型 [ChannelType](#channeltype) |
-| sub_type | number | 子频道子类型 [ChannelSubType](#channelsubtype) |
-| position | number | 排序,必填,而且不能够和其他子频道的值重复 |
+| type | int | 子频道类型 [ChannelType](#channeltype) |
+| sub_type | int | 子频道子类型 [ChannelSubType](#channelsubtype) |
+| position | int | 排序,非必填 |
| owner_id | string | 创建者 ID |
## 返回示例
@@ -91,8 +98,8 @@ channel_res = api.create_channel(channel_id, channel)
"guild_id": "guild_id",
"name": "channel_test",
"type": 1,
+ "sub_type": 0,
"position": 1640240055,
- "owner_id": "2854198244",
- "sub_type": 0
+ "owner_id": "2854198244"
}
```
diff --git a/docs/develop/pythonsdk/api/channel/delete_channel.md b/docs/develop/pythonsdk/api/channel/delete_channel.md
index fa0c1140..1f3b427e 100644
--- a/docs/develop/pythonsdk/api/channel/delete_channel.md
+++ b/docs/develop/pythonsdk/api/channel/delete_channel.md
@@ -7,12 +7,16 @@
## 使用示例
```python
-import qqbot
+import botpy
+from botpy.message import Message
-token = qqbot.Token({appid}, {token})
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.delete_channel(channel_id="xxxx")
-api = qqbot.ChannelAPI(token, False)
-channel = api.delete_channel(channel_id)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
::: warning 注意
@@ -31,41 +35,12 @@ channel = api.delete_channel(channel_id)
## 返回说明
-字段参见 [ChannelRes](#channelres)
-
-### ChannelRes
-
-| 字段名 | 类型 | 描述 |
-| -------- | ------ | -------------------------------------- |
-| id | string | 子频道 ID |
-| guild_id | string | 频道 ID |
-| name | string | 子频道名 |
-| type | number | 子频道类型 [ChannelType](#channeltype) |
-
-### ChannelType
-
-| 值 | 描述 |
-| ----- | ------------ |
-| 0 | 文字子频道 |
-| 1 | 保留,不可用 |
-| 2 | 语音子频道 |
-| 3 | 保留,不可用 |
-| 4 | 子频道分组 |
-| 10005 | 直播子频道 |
-| 10006 | 应用子频道 |
-| 10007 | 论坛子频道 |
-
-注:由于 QQ 频道还在持续的迭代中,经常会有新的子频道类型增加,文档更新不一定及时,开发者识别 `ChannelType` 时,请注意相关的未知 ID 的处理。
+成功返回 HTTP 状态码 200
## 返回示例
`data`:
```json
-{
- "id":"channel_id",
- "type":0,
- "name":"update_channel",
- "guild_id":"2020131797974366736"
-}
+{}
```
diff --git a/docs/develop/pythonsdk/api/channel/get_channel.md b/docs/develop/pythonsdk/api/channel/get_channel.md
index 1d863a9d..1d89e8d7 100644
--- a/docs/develop/pythonsdk/api/channel/get_channel.md
+++ b/docs/develop/pythonsdk/api/channel/get_channel.md
@@ -5,12 +5,16 @@
## 使用示例
```py
-import qqbot
+import botpy
+from botpy.message import Message
-token = qqbot.Token({appid}, {token})
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.get_channel(channel_id="xxxx")
-api = qqbot.ChannelAPI(token, False)
-channel = api.get_channel(channel_id)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
diff --git a/docs/develop/pythonsdk/api/channel/get_channels.md b/docs/develop/pythonsdk/api/channel/get_channels.md
index ac1e5705..bd0412c0 100644
--- a/docs/develop/pythonsdk/api/channel/get_channels.md
+++ b/docs/develop/pythonsdk/api/channel/get_channels.md
@@ -5,12 +5,16 @@
## 使用示例
```python
-import qqbot
+import botpy
+from botpy.message import Message
-token = qqbot.Token({appid}, {token})
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.get_channels(guild_id="xxxx")
-api = qqbot.ChannelAPI(token, False)
-channel = api.get_channels(guild_id)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
diff --git a/docs/develop/pythonsdk/api/channel/update_channel.md b/docs/develop/pythonsdk/api/channel/update_channel.md
index e6150609..856c2973 100644
--- a/docs/develop/pythonsdk/api/channel/update_channel.md
+++ b/docs/develop/pythonsdk/api/channel/update_channel.md
@@ -7,12 +7,23 @@
## 使用示例
```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-api = qqbot.ChannelAPI(token, False)
-channel_res = api.update_channel(channel_id, channel)
+import botpy
+from botpy.message import Message
+
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ """
+ name string 子频道名
+ position int 排序
+ parent_id string 分组 id
+ private_type int 子频道私密类型 PrivateType
+ speak_permission int 子频道发言权限 SpeakPermission
+ """
+ await self.api.update_channel(channel_id="xxxx")
+
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
::: warning 注意
From ec480069d6b7b4c346cfdf4e7ce26accd479965b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E5=BF=B5=E5=90=8C=E5=AD=A6?= <2660422452@qq.com>
Date: Fri, 24 Jun 2022 01:06:53 +0800
Subject: [PATCH 09/21] =?UTF-8?q?feat:=20pythonsdk=E6=9B=B4=E6=96=B0?=
=?UTF-8?q?=E5=AD=90=E9=A2=91=E9=81=93=E6=9D=83=E9=99=90API=E6=96=87?=
=?UTF-8?q?=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../get_channel_permissions.md | 27 ++-----
.../get_channel_role_permissions.md | 27 ++-----
.../update_channel_permissions.md | 27 ++-----
.../update_channel_role_permissions.md | 74 +++++--------------
4 files changed, 44 insertions(+), 111 deletions(-)
diff --git a/docs/develop/pythonsdk/api/channel_permissions/get_channel_permissions.md b/docs/develop/pythonsdk/api/channel_permissions/get_channel_permissions.md
index 2740a340..04628780 100644
--- a/docs/develop/pythonsdk/api/channel_permissions/get_channel_permissions.md
+++ b/docs/develop/pythonsdk/api/channel_permissions/get_channel_permissions.md
@@ -7,27 +7,16 @@
#### sync
```python
-import qqbot
+import botpy
+from botpy.message import Message
-token = qqbot.Token({appid}, {token})
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.get_channel_user_permissions(channel_id="xxxx", user_id="xxxx")
-
-def demo():
- api = qqbot.ChannelPermissionsAPI(token, False)
- channel = api.get_channel_permissions(channel_id, user_id)
-```
-
-#### async
-
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-
-async def demo():
- api = qqbot.AsyncChannelPermissionsAPI(token, False)
- channel_permissions = await api.get_channel_permissions(channel_id, user_id)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
diff --git a/docs/develop/pythonsdk/api/channel_permissions/get_channel_role_permissions.md b/docs/develop/pythonsdk/api/channel_permissions/get_channel_role_permissions.md
index e0bd7db7..8ff96e8e 100644
--- a/docs/develop/pythonsdk/api/channel_permissions/get_channel_role_permissions.md
+++ b/docs/develop/pythonsdk/api/channel_permissions/get_channel_role_permissions.md
@@ -7,27 +7,16 @@
#### sync
```python
-import qqbot
+import botpy
+from botpy.message import Message
-token = qqbot.Token({appid}, {token})
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.get_channel_role_permissions(channel_id="xxxx", role_id="xxxx")
-
-def demo():
- api = qqbot.ChannelPermissionsAPI(token, False)
- channel_permissions = api.get_channel_role_permissions(channel_id, role_id)
-```
-
-#### async
-
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-
-async def demo():
- api = qqbot.AsyncChannelPermissionsAPI(token, False)
- channel_permissions = await api.get_channel_role_permissions(channel_id, role_id)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
diff --git a/docs/develop/pythonsdk/api/channel_permissions/update_channel_permissions.md b/docs/develop/pythonsdk/api/channel_permissions/update_channel_permissions.md
index cf1e634b..57cb8fc6 100644
--- a/docs/develop/pythonsdk/api/channel_permissions/update_channel_permissions.md
+++ b/docs/develop/pythonsdk/api/channel_permissions/update_channel_permissions.md
@@ -7,27 +7,16 @@
#### sync
```python
-import qqbot
+import botpy
+from botpy.message import Message
-token = qqbot.Token({appid}, {token})
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.get_channel_user_permissions(channel_id="xxxx", user_id="xxxx")
-
-def demo():
- api = qqbot.ChannelPermissionsAPI(token, False)
- is_succeeded = api.update_channel_permissions(channel_id, user_id, channel_permissions)
-```
-
-#### async
-
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-
-async def demo():
- api = qqbot.AsyncChannelPermissionsAPI(token, False)
- is_succeeded = await api.update_channel_permissions(channel_id, user_id, channel_permissions)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
::: warning 注意
diff --git a/docs/develop/pythonsdk/api/channel_permissions/update_channel_role_permissions.md b/docs/develop/pythonsdk/api/channel_permissions/update_channel_role_permissions.md
index 7c8658ce..520df432 100644
--- a/docs/develop/pythonsdk/api/channel_permissions/update_channel_role_permissions.md
+++ b/docs/develop/pythonsdk/api/channel_permissions/update_channel_role_permissions.md
@@ -7,27 +7,22 @@
#### sync
```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-
-def demo():
- api = qqbot.ChannelPermissionsAPI(token, False)
- is_success = api.update_channel_role_permissions(channel_id, role_id, channel_permissions)
-```
-
-#### async
-
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-
-async def demo():
- api = qqbot.AsyncChannelPermissionsAPI(token, False)
- is_success = await api.update_channel_role_permissions(channel_id, role_id, channel_permissions)
+import botpy
+from botpy import Permission
+from botpy.message import Message
+
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.update_channel_role_permissions(
+ channel_id="xxxx",
+ role_id="xxxx",
+ add=Permission(speak_permission=True), # 添加可发言子频道
+ remove=Permission(speak_permission=False), # 移除可发言子频道
+ )
+
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
::: warning 注意
@@ -41,18 +36,11 @@ async def demo():
| 字段名 | 必填 | 类型 | 描述 |
| ---------------- | ---- | ------------------------------------- | ----------------------------------------- |
-| channel_id | 是 | string | 子频道 ID |
-| role_id | 是 | string | 身份组 ID |
-| channel_permissions | 是 | [UpdatePermission](#updatepermission) | 权限参数 |
-
-### UpdatePermission
-
-参数包括`add`和`remove`两个字段,分别表示`授予`的权限以及`删除`的权限。要授予用户权限即把`add`对应位`置1`,删除用户权限即把`remove`对应位`置1`。当两个字段同一位`都为1`,表现为`删除`权限。
+| channel_id | 是 | string | 子频道 ID |
+| role_id | 是 | string | 身份组 ID |
+| add | 是 | string | **字符串**形式的**十进制**数表示**赋予**用户的权限,参考[Permissions](#permissions) |
+| remove | 是 | string | **字符串**形式的**十进制**数表示**删除**用户的权限,参考[Permissions](#permissions) |
-| 字段名 | 类型 | 描述 |
-| ------ | ------ | ----------------------------------------------------------------------------------- |
-| add | string | **字符串**形式的**十进制**数表示**赋予**用户的权限,参考[Permissions](#permissions) |
-| remove | string | **字符串**形式的**十进制**数表示**删除**用户的权限,参考[Permissions](#permissions) |
### Permissions
@@ -75,28 +63,6 @@ async def demo():
:::
-`SDK`中权限用`十进制字符串`描述,可参考如下提示:
-
-::: tip 提示
-
-以添加`可发言子频道`权限为例:
-
-```python
-async def demo():
- api = qqbot.AsyncChannelPermissionsAPI(token, False)
- update_permissions = qqbot.UpdatePermission(add="4")
- is_succeeded = await api.update_channel_role_permissions(channel_id, role_id, update_permissions)
-```
-
-同理,移除`可发言子频道`如下:
-
-```python
-async def demo():
- api = qqbot.AsyncChannelPermissionsAPI(token, False)
- update_permissions = qqbot.UpdatePermission(remove="4")
- is_succeeded = await api.update_channel_role_permissions(channel_id, role_id, update_permissions)
-```
-
## 返回示例
`data`:
From 903801bc5cf8b154643849575d03733c3a34eb59 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E5=BF=B5=E5=90=8C=E5=AD=A6?= <2660422452@qq.com>
Date: Fri, 24 Jun 2022 01:11:25 +0800
Subject: [PATCH 10/21] =?UTF-8?q?feat:=20pythonsdk=E6=9B=B4=E6=96=B0?=
=?UTF-8?q?=E7=A7=81=E4=BF=A1API=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../pythonsdk/api/channel/get_channel.md | 2 +-
.../get_channel_permissions.md | 2 -
.../get_channel_role_permissions.md | 2 -
.../update_channel_permissions.md | 2 -
.../update_channel_role_permissions.md | 2 -
docs/develop/pythonsdk/api/dms/create_dms.md | 41 +++++--------------
docs/develop/pythonsdk/api/dms/post_dms.md | 31 ++++----------
7 files changed, 19 insertions(+), 63 deletions(-)
diff --git a/docs/develop/pythonsdk/api/channel/get_channel.md b/docs/develop/pythonsdk/api/channel/get_channel.md
index 1d89e8d7..75955151 100644
--- a/docs/develop/pythonsdk/api/channel/get_channel.md
+++ b/docs/develop/pythonsdk/api/channel/get_channel.md
@@ -4,7 +4,7 @@
## 使用示例
-```py
+```python
import botpy
from botpy.message import Message
diff --git a/docs/develop/pythonsdk/api/channel_permissions/get_channel_permissions.md b/docs/develop/pythonsdk/api/channel_permissions/get_channel_permissions.md
index 04628780..bc3adbb0 100644
--- a/docs/develop/pythonsdk/api/channel_permissions/get_channel_permissions.md
+++ b/docs/develop/pythonsdk/api/channel_permissions/get_channel_permissions.md
@@ -4,8 +4,6 @@
## 使用示例
-#### sync
-
```python
import botpy
from botpy.message import Message
diff --git a/docs/develop/pythonsdk/api/channel_permissions/get_channel_role_permissions.md b/docs/develop/pythonsdk/api/channel_permissions/get_channel_role_permissions.md
index 8ff96e8e..5e4904ee 100644
--- a/docs/develop/pythonsdk/api/channel_permissions/get_channel_role_permissions.md
+++ b/docs/develop/pythonsdk/api/channel_permissions/get_channel_role_permissions.md
@@ -4,8 +4,6 @@
## 使用示例
-#### sync
-
```python
import botpy
from botpy.message import Message
diff --git a/docs/develop/pythonsdk/api/channel_permissions/update_channel_permissions.md b/docs/develop/pythonsdk/api/channel_permissions/update_channel_permissions.md
index 57cb8fc6..98d72e2b 100644
--- a/docs/develop/pythonsdk/api/channel_permissions/update_channel_permissions.md
+++ b/docs/develop/pythonsdk/api/channel_permissions/update_channel_permissions.md
@@ -4,8 +4,6 @@
## 使用示例
-#### sync
-
```python
import botpy
from botpy.message import Message
diff --git a/docs/develop/pythonsdk/api/channel_permissions/update_channel_role_permissions.md b/docs/develop/pythonsdk/api/channel_permissions/update_channel_role_permissions.md
index 520df432..65f4f0a5 100644
--- a/docs/develop/pythonsdk/api/channel_permissions/update_channel_role_permissions.md
+++ b/docs/develop/pythonsdk/api/channel_permissions/update_channel_role_permissions.md
@@ -4,8 +4,6 @@
## 使用示例
-#### sync
-
```python
import botpy
from botpy import Permission
diff --git a/docs/develop/pythonsdk/api/dms/create_dms.md b/docs/develop/pythonsdk/api/dms/create_dms.md
index b8186f76..624244ab 100644
--- a/docs/develop/pythonsdk/api/dms/create_dms.md
+++ b/docs/develop/pythonsdk/api/dms/create_dms.md
@@ -10,46 +10,25 @@
## 使用示例
-#### sync
-
```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
+import botpy
+from botpy.message import Message
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.create_dms(guild_id="xxxx", user_id="xxxx")
-def demo():
- api = qqbot.DmsAPI(token, False)
- request = qqbot.CreateDirectMessageRequest(source_guild_id, recipient_id)
- dms = api.create_direct_message(request)
-```
-
-#### async
-
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-
-async def demo():
- api = qqbot.AsyncDmsAPI(token, False)
- dms_request = qqbot.CreateDirectMessageRequest(source_guild_id, recipient_id)
- dms = await api.create_direct_message(request)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
| 字段名 | 必填 | 类型 | 描述 |
| ------ | ---- | --------------------------- | -------------- |
-| dms_request | 是 | [CreateDirectMessageRequest](#CreateDirectMessageRequest) | 创建私信结构体 |
-
-### CreateDirectMessageRequest
-
-| 字段名 | 必填 | 类型 | 描述 |
-| --------------- | ---- | ------ | ------------------------------ |
-| source_guild_id | 是 | string | [源频道 ID](../../model/guild.md) |
-| recipient_id | 是 | string | [接收者 ID](../../model/user.md) |
+| guild_id | 是 | string | [源频道 ID](../../model/guild.md) |
+| user_id | 是 | string | [接收者 ID](../../model/user.md) |
## 返回说明
diff --git a/docs/develop/pythonsdk/api/dms/post_dms.md b/docs/develop/pythonsdk/api/dms/post_dms.md
index 0d09dc9c..17053630 100644
--- a/docs/develop/pythonsdk/api/dms/post_dms.md
+++ b/docs/develop/pythonsdk/api/dms/post_dms.md
@@ -11,32 +11,17 @@
## 使用示例
-#### sync
-
```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-
-def demo():
- api = qqbot.DmsAPI(token, False)
- msg_request = qqbot.MessageSendRequest(content='ss', msg_id=message_id)
- msg = api.post_direct_message(guild_id, msg_request)
-```
-
-#### async
-
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
+import botpy
+from botpy.message import Message
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.post_dms(guild_id="xxxx", content="xx")
-async def demo():
- api = qqbot.AsyncDmsAPI(token, False)
- msg_request = qqbot.MessageSendRequest(content='ss', msg_id=message_id)
- msg = await api.post_direct_message(guild_id, msg_request)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
From c07df9817c69efafd9a38a4b1a6dff8a7fc8d6f5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E5=BF=B5=E5=90=8C=E5=AD=A6?= <2660422452@qq.com>
Date: Fri, 24 Jun 2022 01:21:18 +0800
Subject: [PATCH 11/21] =?UTF-8?q?feat:=20pythonsdk=E6=9B=B4=E6=96=B0?=
=?UTF-8?q?=E9=A2=91=E9=81=93=E8=BA=AB=E4=BB=BD=E7=BB=84API=E6=96=87?=
=?UTF-8?q?=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docs/develop/pythonsdk/api/guild/get_guild.md | 12 +++++---
.../api/guild/guild_role/create_guild_role.md | 27 ++++++++++--------
.../guild_role/create_guild_role_member.md | 22 ++++++++++-----
.../api/guild/guild_role/delete_guild_role.md | 12 +++++---
.../guild_role/delete_guild_role_member.md | 22 ++++++++++-----
.../api/guild/guild_role/get_guild_roles.md | 12 +++++---
.../api/guild/guild_role/update_guild_role.md | 28 +++++++++++--------
7 files changed, 85 insertions(+), 50 deletions(-)
diff --git a/docs/develop/pythonsdk/api/guild/get_guild.md b/docs/develop/pythonsdk/api/guild/get_guild.md
index bafb37cb..a01d21b8 100644
--- a/docs/develop/pythonsdk/api/guild/get_guild.md
+++ b/docs/develop/pythonsdk/api/guild/get_guild.md
@@ -5,12 +5,16 @@
## 使用示例
```python
-import qqbot
+import botpy
+from botpy.message import Message
-token = qqbot.Token({appid}, {token})
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.get_guild(guild_id="xxxx")
-api = qqbot.GuildAPI(token, False)
-guild = api.get_guild(guild_id)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
diff --git a/docs/develop/pythonsdk/api/guild/guild_role/create_guild_role.md b/docs/develop/pythonsdk/api/guild/guild_role/create_guild_role.md
index 330fec88..3e049790 100644
--- a/docs/develop/pythonsdk/api/guild/guild_role/create_guild_role.md
+++ b/docs/develop/pythonsdk/api/guild/guild_role/create_guild_role.md
@@ -5,12 +5,21 @@
## 使用示例
```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-api = qqbot.GuildRoleAPI(token, False)
-result = api.create_guild_role(guild_id, role_info)
+import botpy
+from botpy.message import Message
+
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.create_guild_role(
+ guild_id="xxxx",
+ name="xxxx",
+ color="10395294",
+ hoist=1,
+ )
+
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
::: warning 注意
@@ -22,12 +31,6 @@ result = api.create_guild_role(guild_id, role_info)
| 字段名 | 必填 | 类型 | 描述 |
| -------- | ---- | --------------------- | -------------- |
| guild_id | 是 | string | 频道 ID |
-| role_info | 是 | [RoleUpdateInfo](#roleupdateinfo) | 频道身份组参数 |
-
-### RoleUpdateInfo
-
-| 字段名 | 必填 | 类型 | 描述 |
-| ------ | ---- | ------ | -------------------------------------------------------------- |
| name | 是 | string | 名称 |
| color | 否 | number | ARGB 的 HEX 十六进制颜色值转换后的十进制数值(例:4294927682) |
| hoist | 否 | number | 在成员列表中单独展示: 0-否, 1-是 |
diff --git a/docs/develop/pythonsdk/api/guild/guild_role/create_guild_role_member.md b/docs/develop/pythonsdk/api/guild/guild_role/create_guild_role_member.md
index 1397446e..cd7c88e5 100644
--- a/docs/develop/pythonsdk/api/guild/guild_role/create_guild_role_member.md
+++ b/docs/develop/pythonsdk/api/guild/guild_role/create_guild_role_member.md
@@ -5,12 +5,21 @@
## 使用示例
```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-api = qqbot.GuildRoleAPI(token, False)
-result = api.create_guild_role_member(guild_id, role_id, user_id, channel)
+import botpy
+from botpy.message import Message
+
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.create_guild_role_member(
+ guild_id="xxxx",
+ role_id="xxxx",
+ user_id="xxxx",
+ channel_id="xxxx"
+ )
+
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
::: warning 注意
@@ -27,7 +36,6 @@ result = api.create_guild_role_member(guild_id, role_id, user_id, channel)
| guild_id | 是 | string | 频道 ID |
| role_id | 是 | string | 身份组 ID |
| user_id | 是 | string | 用户 ID |
-| ~~channel~~ | 否 | ~~Channel 对象~~ | ~~只填充 id 属性的 Channel 对象~~(**已弃用,请使用 channelId**) |
| channel_id | 否 | string | 子频道 ID |
## 返回说明
diff --git a/docs/develop/pythonsdk/api/guild/guild_role/delete_guild_role.md b/docs/develop/pythonsdk/api/guild/guild_role/delete_guild_role.md
index 2082e96f..8eae89d7 100644
--- a/docs/develop/pythonsdk/api/guild/guild_role/delete_guild_role.md
+++ b/docs/develop/pythonsdk/api/guild/guild_role/delete_guild_role.md
@@ -3,12 +3,16 @@
删除频道身份组。
```python
-import qqbot
+import botpy
+from botpy.message import Message
-token = qqbot.Token({appid}, {token})
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.delete_guild_role(guild_id="xxxx", role_id="xxxx")
-api = qqbot.GuildRoleAPI(token, False)
-result = api.delete_guild_role(guild_id, role_id)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
### 参数说明
diff --git a/docs/develop/pythonsdk/api/guild/guild_role/delete_guild_role_member.md b/docs/develop/pythonsdk/api/guild/guild_role/delete_guild_role_member.md
index c0e13288..1ad53148 100644
--- a/docs/develop/pythonsdk/api/guild/guild_role/delete_guild_role_member.md
+++ b/docs/develop/pythonsdk/api/guild/guild_role/delete_guild_role_member.md
@@ -5,12 +5,21 @@
## 使用示例
```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-api = qqbot.GuildRoleAPI(token, False)
-result = api.delete_guild_role_member(guild_id, role_id, user_id, channel)
+import botpy
+from botpy.message import Message
+
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.delete_guild_role_member(
+ guild_id="xxxx",
+ role_id="xxxx",
+ user_id="xxxx",
+ channel_id="xxxx"
+ )
+
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
::: warning 注意
@@ -26,7 +35,6 @@ result = api.delete_guild_role_member(guild_id, role_id, user_id, channel)
| guild_id | 是 | string | 频道 ID |
| role_id | 是 | string | 身份组 ID |
| user_id | 是 | string | 用户 ID |
-| ~~channel~~ | 否 | ~~Channel 对象~~ | ~~只填充 id 属性的 Channel 对象~~(**已弃用,请使用 channelId**) |
| channel_id | 否 | string | 子频道 ID
## 返回说明
diff --git a/docs/develop/pythonsdk/api/guild/guild_role/get_guild_roles.md b/docs/develop/pythonsdk/api/guild/guild_role/get_guild_roles.md
index ce760189..c12a6b97 100644
--- a/docs/develop/pythonsdk/api/guild/guild_role/get_guild_roles.md
+++ b/docs/develop/pythonsdk/api/guild/guild_role/get_guild_roles.md
@@ -5,12 +5,16 @@
## 使用示例
```python
-import qqbot
+import botpy
+from botpy.message import Message
-token = qqbot.Token({appid}, {token})
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.get_guild_roles(guild_id="xxxx")
-api = qqbot.GuildRoleAPI(token, False)
-guild_roles = api.get_guild_roles(guild_id)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
diff --git a/docs/develop/pythonsdk/api/guild/guild_role/update_guild_role.md b/docs/develop/pythonsdk/api/guild/guild_role/update_guild_role.md
index 582c585a..e6d32b41 100644
--- a/docs/develop/pythonsdk/api/guild/guild_role/update_guild_role.md
+++ b/docs/develop/pythonsdk/api/guild/guild_role/update_guild_role.md
@@ -5,12 +5,22 @@
## 使用示例
```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-api = qqbot.GuildRoleAPI(token, False)
-result = api.update_guild_role(guild_id, role_id, role_info)
+import botpy
+from botpy.message import Message
+
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.update_guild_role(
+ guild_id="xxxx",
+ role_id="xxxx',
+ name="xxxx",
+ color="10395294",
+ hoist=1,
+ )
+
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
:::warning 注意
@@ -23,12 +33,6 @@ result = api.update_guild_role(guild_id, role_id, role_info)
| --------- | ---- | --------------------- | -------------- |
| guild_id | 是 | string | 频道 ID |
| role_id | 是 | string | 身份组 ID |
-| role_info | 是 | [RoleUpdateInfo](#roleupdateinfo) | 频道身份组参数 |
-
-### RoleUpdateInfo
-
-| 字段名 | 必填 | 类型 | 描述 |
-| ------ | ---- | ------ | -------------------------------------------------------------- |
| name | 是 | string | 名称 |
| color | 否 | number | ARGB 的 HEX 十六进制颜色值转换后的十进制数值(例:4294927682) |
| hoist | 否 | number | 在成员列表中单独展示: 0-否, 1-是 |
From dc852f25bb3eab14248fbdad2296d81e1aa9a806 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E5=BF=B5=E5=90=8C=E5=AD=A6?= <2660422452@qq.com>
Date: Fri, 24 Jun 2022 01:31:17 +0800
Subject: [PATCH 12/21] =?UTF-8?q?feat:=20pythonsdk=E6=9B=B4=E6=96=B0?=
=?UTF-8?q?=E6=88=90=E5=91=98=E7=9B=B8=E5=85=B3API=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../api/member/delete_guild_member.md | 23 +++++++++++++++++--
.../pythonsdk/api/member/get_guild_member.md | 13 +++++++----
.../pythonsdk/api/member/get_guild_members.md | 14 ++++-------
3 files changed, 34 insertions(+), 16 deletions(-)
diff --git a/docs/develop/pythonsdk/api/member/delete_guild_member.md b/docs/develop/pythonsdk/api/member/delete_guild_member.md
index d054fa46..8a806ff8 100644
--- a/docs/develop/pythonsdk/api/member/delete_guild_member.md
+++ b/docs/develop/pythonsdk/api/member/delete_guild_member.md
@@ -7,7 +7,21 @@
## 使用示例
```python
-# TODO:施工中
+import botpy
+from botpy.message import Message
+
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.get_delete_member(
+ guild_id="xxxx",
+ user_id="xxx",
+ add_blacklist=True,
+ delete_history_msg_days=7
+ )
+
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
::: warning 注意
@@ -22,6 +36,11 @@
| ------- | ---- | ------ | ------- |
| guild_id | 是 | string | 频道 ID |
| user_id | 是 | string | 用户 ID |
+| add_blacklist | 是 | bool | 是否拉入黑名单 |
+| delete_history_msg_days | 是 | int | 撤回移除成员的消息,可指定撤回消息的时间范围 |
+
+> 注:消息撤回时间范围仅支持固定的天数:3,7,15,30。 特殊的时间范围:-1: 撤回全部消息。默认值为0不撤回任何消息。
+
## 返回说明
@@ -32,5 +51,5 @@
`data`:
```js
-'';
+{}
```
diff --git a/docs/develop/pythonsdk/api/member/get_guild_member.md b/docs/develop/pythonsdk/api/member/get_guild_member.md
index bd3c0556..0123fde8 100644
--- a/docs/develop/pythonsdk/api/member/get_guild_member.md
+++ b/docs/develop/pythonsdk/api/member/get_guild_member.md
@@ -5,11 +5,16 @@
## 使用示例
```python
-import qqbot
+import botpy
+from botpy.message import Message
-token = qqbot.Token({appid}, {token})
-api = qqbot.GuildMemberAPI(token, False)
-member = api.get_guild_member(guild_id, user_id)
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.get_guild_member(guild_id="xxxx", user_id="xxx")
+
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
diff --git a/docs/develop/pythonsdk/api/member/get_guild_members.md b/docs/develop/pythonsdk/api/member/get_guild_members.md
index d91b6a4f..231b17d5 100644
--- a/docs/develop/pythonsdk/api/member/get_guild_members.md
+++ b/docs/develop/pythonsdk/api/member/get_guild_members.md
@@ -19,12 +19,6 @@ members = api.get_guild_members(guild_id, query_params)
| 字段名 | 必填 | 类型 | 描述 |
| ----------- | ---- | --------------------------- | -------- |
| guild_id | 是 | string | 频道 ID |
-| query_params | 否 | [QueryParams](#queryparams) | 查询参数 |
-
-### QueryParams
-
-| 字段名 | 必填 | 类型 | 描述 |
-| ------ | ---- | ------ | ---------------------------------------------------------- |
| after | 否 | string | 上一次回包中最大的用户 ID, 如果是第一次请求填 0,默认为 0 |
| limit | 否 | number | 分页大小,1-1000,默认是 1 |
@@ -58,14 +52,14 @@ members = api.get_guild_members(guild_id, query_params)
[
{
"user": {
- "id": "USERID",
- "username": "机器人管家-ostwindli",
- "avatar": "http://thirdqq.qlogo.cn/g?b=oidb&k=oPicoPIg01ujpSr8oosudkQ&s=0&t=1637218059",
+ "id": "用户 ID",
+ "username": "用户名",
+ "avatar": "用户头像地址",
"bot": false,
"public_flags": 0,
"system": false
},
- "nick": "阿青",
+ "nick": "",
"roles": [
"4"
],
From 7ca1e3a9589c3def402d0bb07c2f86790a8a6a57 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E5=BF=B5=E5=90=8C=E5=AD=A6?= <2660422452@qq.com>
Date: Fri, 24 Jun 2022 02:09:35 +0800
Subject: [PATCH 13/21] =?UTF-8?q?feat:=20pythonsdk=E6=9B=B4=E6=96=B0?=
=?UTF-8?q?=E6=B6=88=E6=81=AFAPI=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../pythonsdk/api/message/get_message.md | 12 +-
.../pythonsdk/api/message/get_messages.md | 128 -----------------
.../pythonsdk/api/message/message_format.md | 57 +++++---
.../pythonsdk/api/message/post_ark_message.md | 48 +++----
.../api/message/post_keyboard_message.md | 135 ++++++++----------
.../pythonsdk/api/message/post_message.md | 18 ++-
.../api/message/post_reference_messages.md | 49 ++++---
.../pythonsdk/api/message/recall_message.md | 26 ++--
docs/develop/pythonsdk/config.js | 1 -
9 files changed, 181 insertions(+), 293 deletions(-)
delete mode 100644 docs/develop/pythonsdk/api/message/get_messages.md
diff --git a/docs/develop/pythonsdk/api/message/get_message.md b/docs/develop/pythonsdk/api/message/get_message.md
index fb56cbf7..cf93aae9 100644
--- a/docs/develop/pythonsdk/api/message/get_message.md
+++ b/docs/develop/pythonsdk/api/message/get_message.md
@@ -5,12 +5,16 @@
## 使用示例
```python
-import qqbot
+import botpy
+from botpy.message import Message
-token = qqbot.Token({appid}, {token})
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.get_message(channel_id="xxxx", message_id="xxxx")
-msg_api = qqbot.MessageAPI(token, False)
-message = msg_api.get_message(channel_id, message_id)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
diff --git a/docs/develop/pythonsdk/api/message/get_messages.md b/docs/develop/pythonsdk/api/message/get_messages.md
deleted file mode 100644
index cd0542f7..00000000
--- a/docs/develop/pythonsdk/api/message/get_messages.md
+++ /dev/null
@@ -1,128 +0,0 @@
-# 拉取消息列表
-
-获取消息列表。
-
-
-## 使用示例
-
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-msg_api = qqbot.MessageAPI(token, False)
-message_list = msg_api.get_messages(channel_id, pager)
-```
-
-## 参数说明
-
-| 参数 | 必填 | 类型 | 说明 |
-| --------- | ---- | ------------------------------- | --------- |
-| channel_id | 是 | string | 子频道 ID |
-| pager | 否 | [MessagesPager](#messagespager) | 分页信息 |
-
-### MessagesPager
-
-| 参数 | 必填 | 类型 | 说明 |
-| ----- | ---- | ----------------------- | ----------------------------- |
-| type | 是 | [TypesEnum](#typesenum) | 拉取类型 |
-| id | 是 | string | 消息 ID |
-| limit | 是 | string | 每次拉取多少条消息,最大 `20` |
-
-### TypesEnum
-
-| 字段名 | 类型 | 描述 |
-| -------- | ------ | ------------------ |
-| `around` | string | 读此 id 前后的消息 |
-| `before` | string | 读此 id 之前的消息 |
-| `after` | string | 读此 id 之后的消息 |
-| `latest` | string | 最新limit的消息 |
-
-如果 `around/before/after` 均为`空`,则拉取最新的 `limit` 条消息。
-
-## 返回说明
-
-返回 [Message](#message) 对象数组。
-
-### Message
-
-| 字段名 | 类型 | 描述 |
-| ---------- | ----------------- | ------------------------------------------------------------------------------- |
-| id | string | 消息 ID |
-| channel_id | string | 子频道 ID |
-| guild_id | string | 频道 ID |
-| content | string | 消息内容 |
-| timestamp | string | 消息创建时间,是个 `iISO8601 timestamp` 字符串,例:"2021-11-23T15:16:48+08:00" |
-| author | [User](#user) | 消息创建者 |
-| member | [Member](#member) | 消息创建者的 member 信息 |
-
-### User
-
-| 字段名 | 类型 | 描述 |
-| -------- | ------- | ------------ |
-| id | string | 用户 ID |
-| username | string | 用户名 |
-| bot | boolean | 是否是机器人 |
-
-### Member
-
-| 字段名 | 类型 | 描述 |
-| --------- | -------- | ------------------------------------------------------------------------------------ |
-| roles | string[] | 用户在频道内的身份组 ID,默认值可参考[DefaultRoleIDs](#defaultroleids) |
-| joined_at | string | 用户加入频道的时间,是个 `ISO8601 timestamp` 字符串,例:"2021-11-23T15:16:48+08:00" |
-
-### DefaultRoleIDs
-
-系统默认生成下列身份组 ID。
-
-| 身份组 ID 默认值 | 描述 |
-| ---------------- | ------------ |
-| 1 | 全体成员 |
-| 2 | 管理员 |
-| 4 | 群主/创建者 |
-| 5 | 子频道管理员 |
-
-## 返回示例
-
-`data`:
-
-```json
-[
- {
- "id": "xxx",
- "channel_id": "100001",
- "guild_id": "100000000001",
- "content": "hello",
- "timestamp": "2021-05-25T15:20:34+08:00",
- "author": {
- "id": "1000000001",
- "username": "az",
- "bot": false
- },
- "member": {
- "roles": [
- "1"
- ],
- "joined_at": "2021-04-12T16:34:42+08:00"
- }
- },
- {
- "id": "yyy",
- "channel_id": "100001",
- "guild_id": "1000000000001",
- "content": "world",
- "timestamp": "2021-05-25T15:20:32+08:00",
- "author": {
- "id": "10000001",
- "username": "az",
- "bot": false
- },
- "member": {
- "roles": [
- "1"
- ],
- "joined_at": "2021-04-12T16:34:42+08:00"
- }
- }
-]
-```
diff --git a/docs/develop/pythonsdk/api/message/message_format.md b/docs/develop/pythonsdk/api/message/message_format.md
index c536fef2..5606e7a3 100644
--- a/docs/develop/pythonsdk/api/message/message_format.md
+++ b/docs/develop/pythonsdk/api/message/message_format.md
@@ -10,12 +10,16 @@
## 使用示例
```python
-import qqbot
+import botpy
+from botpy.message import Message
-token = qqbot.Token({appid}, {token})
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.post_message(channel_id="xxxx", content="xxx", msg_id="xxxx", embed=embed)
-msg_api = qqbot.MessageAPI(token, False)
-message = msg_api.post_message(channel_id, message_send_request)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
@@ -23,19 +27,13 @@ message = msg_api.post_message(channel_id, message_send_request)
| 参数 | 必填 | 类型 | 说明 |
| --------- | ---- | ----------------------------------- | ---------- |
| channelID | 是 | string | 子频道 ID |
-| message_send_request | 是 | [MessageSendRequest](#MessageSendRequest) | 消息体结构 |
-
-## MessageSendRequest
-
-| 字段名 | 类型 | 描述 |
-| ------- | ----------------------------- | ----------------------------------------------------------------------- |
| content | string | 消息内容,参考[支持的格式](#支持的格式) |
-| embed | [MessageEmbed](#messageembed) | embed 消息,一种特殊的 ark |
-| ark | [MessageArk](#messageark) | ark 消息 |
+| embed | [Embed](#embed) | embed 消息,一种特殊的 ark |
+| ark | [Ark](#ark) | ark 消息 |
| image | string | 图片 url 地址 |
| msg_id | string | 要回复的消息 id。**带了 msg_id 视为被动回复消息,否则视为主动推送消息** |
-## MessageEmbed
+## Embed
| 字段名 | 类型 | 描述 |
| ----------- | ----------------------------------------- | ------------------------------------------------------------------------------ |
@@ -43,14 +41,41 @@ message = msg_api.post_message(channel_id, message_send_request)
| description | string | 描述 |
| prompt | string | 消息弹窗内容 |
| timestamp | string | 消息创建时间 |
-| fields | [MessageEmbedField[]](#messageembedfield) | 消息创建时间,是个 `ISO8601 timestamp` 字符串,例:"2021-11-23T15:16:48+08:00" |
+| fields | [EmbedField[]](#embedfield) | 消息创建时间,是个 `ISO8601 timestamp` 字符串,例:"2021-11-23T15:16:48+08:00" |
-## MessageEmbedField
+## EmbedField
| 字段名 | 类型 | 描述 |
| ------ | ------ | ------ |
| name | string | 字段名 |
-| value | string | 字段值 |
+
+### Ark
+
+| 字段名 | 类型 | 描述 |
+| :---------- | :------------------------------ | :------------------------ |
+| template_id | number | ark 模板 id(需要先申请) |
+| kv | [AkrKv[]](#arkkv) | kv 值列表 |
+
+### ArkKv
+
+| 字段名 | 类型 | 描述 |
+| :----- | :-------------------------------- | :----------------- |
+| key | string | key |
+| value | string | value |
+| obj | [ArkObj[]](#arkobj) | ark obj 类型的列表 |
+
+### ArkObj
+
+| 字段名 | 类型 | 描述 |
+| :----- | :--------------------------------- | :------------- |
+| obj_kv | [ArkObjKv[]](#arkobjkv) | ark objkv 列表 |
+
+### ArkObjKv
+
+| 字段名 | 类型 | 描述 |
+| :----- | :----- | :---- |
+| key | string | key |
+| value | string | value |
### 支持的格式
diff --git a/docs/develop/pythonsdk/api/message/post_ark_message.md b/docs/develop/pythonsdk/api/message/post_ark_message.md
index bd439ac5..a5056ab0 100644
--- a/docs/develop/pythonsdk/api/message/post_ark_message.md
+++ b/docs/develop/pythonsdk/api/message/post_ark_message.md
@@ -15,12 +15,16 @@
需要关注`ark`字段的使用。
```python
-import qqbot
+import botpy
+from botpy.message import Message
-token = qqbot.Token({appid}, {token})
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.post_message(channel_id="xxxx", content="xxx", msg_id="xxxx", embed=embed)
-msg_api = qqbot.MessageAPI(token, False)
-message = msg_api.post_message(channel_id, message_send_request)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
@@ -28,19 +32,13 @@ message = msg_api.post_message(channel_id, message_send_request)
| 参数 | 必填 | 类型 | 说明 |
| --------- | ---- | ----------------------------------- | ---------- |
| channelID | 是 | string | 子频道 ID |
-| message_send_request | 是 | [MessageSendRequest](#MessageSendRequest) | 消息体结构 |
+| content | 是 | string | 消息内容,文本内容,支持[内嵌格式](message_format.md) |
+| embed | 否 | [Embed](#embed) | embed 消息,一种特殊的 ark |
+| ark | 否 | [Ark](#ark) | ark 消息 |
+| image | 否 | string | 图片 url 地址 |
+| msg_id | 否 | string | 要回复的消息 id。**带了 msg_id 视为被动回复消息,否则视为主动推送消息** |
-## MessageSendRequest
-
-| 字段名 | 类型 | 描述 |
-| ------- | ----------------------------- | ----------------------------------------------------------------------- |
-| content | string | 消息内容,文本内容,支持[内嵌格式](message_format.md) |
-| embed | [MessageEmbed](#messageembed) | embed 消息,一种特殊的 ark |
-| ark | [MessageArk](#messageark) | ark 消息 |
-| image | string | 图片 url 地址 |
-| msg_id | string | 要回复的消息 id。**带了 msg_id 视为被动回复消息,否则视为主动推送消息** |
-
-## MessageEmbed
+## Embed
| 字段名 | 类型 | 描述 |
| ----------- | ----------------------------------------- | ------------------------------------------------------------------------------ |
@@ -48,37 +46,37 @@ message = msg_api.post_message(channel_id, message_send_request)
| description | string | 描述 |
| prompt | string | 消息弹窗内容 |
| timestamp | string | 消息创建时间 |
-| fields | [MessageEmbedField[]](#messageembedfield) | 消息创建时间,是个 `ISO8601 timestamp` 字符串,例:"2021-11-23T15:16:48+08:00" |
+| fields | [EmbedField[]](#embedfield) | 消息创建时间,是个 `ISO8601 timestamp` 字符串,例:"2021-11-23T15:16:48+08:00" |
-## MessageEmbedField
+## EmbedField
| 字段名 | 类型 | 描述 |
| ------ | ------ | ------ |
| name | string | 字段名 |
| value | string | 字段值 |
-### MessageArk
+### Ark
| 字段名 | 类型 | 描述 |
| :---------- | :------------------------------ | :------------------------ |
| template_id | number | ark 模板 id(需要先申请) |
-| kv | [MessageAkrKv[]](#messagearkkv) | kv 值列表 |
+| kv | [AkrKv[]](#arkkv) | kv 值列表 |
-### MessageArkKv
+### ArkKv
| 字段名 | 类型 | 描述 |
| :----- | :-------------------------------- | :----------------- |
| key | string | key |
| value | string | value |
-| obj | [MessageArkObj[]](#messagearkobj) | ark obj 类型的列表 |
+| obj | [ArkObj[]](#arkobj) | ark obj 类型的列表 |
-### MessageArkObj
+### ArkObj
| 字段名 | 类型 | 描述 |
| :----- | :--------------------------------- | :------------- |
-| obj_kv | [MessageArkObjKv[]](#messageobjkv) | ark objkv 列表 |
+| obj_kv | [ArkObjKv[]](#arkobjkv) | ark objkv 列表 |
-### MessageArkObjKv
+### ArkObjKv
| 字段名 | 类型 | 描述 |
| :----- | :----- | :---- |
diff --git a/docs/develop/pythonsdk/api/message/post_keyboard_message.md b/docs/develop/pythonsdk/api/message/post_keyboard_message.md
index f5d30e7b..dceb0006 100644
--- a/docs/develop/pythonsdk/api/message/post_keyboard_message.md
+++ b/docs/develop/pythonsdk/api/message/post_keyboard_message.md
@@ -15,96 +15,85 @@
### 1:使用 keyboard 模版
-#### sync
-
```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-def send_template_keyboard(channel_id, msg_id):
- msg_api = qqbot.MessageAPI(t_token, False)
-
- markdown = MessageMarkdown(content="# 123 \n hello")
- keyword = MessageKeyboard(id='62')
- send = qqbot.MessageSendRequest(markdown=markdown, msg_id=msg_id, keyboard=keyword)
- message = msg_api.post_message(channel_id, send)
-```
-
-#### async
-
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-async def send_template_keyboard(channel_id, msg_id):
- msg_api = qqbot.AsyncMessageAPI(t_token, False)
-
- markdown = MessageMarkdown(content="# 123 \n hello")
- keyword = MessageKeyboard(id='62')
- send = qqbot.MessageSendRequest(markdown=markdown, msg_id=msg_id, keyboard=keyword)
- message = await msg_api.post_message(channel_id, send)
+import botpy
+from botpy.message import Message
+from botpy.types.message import MarkdownPayload, MessageMarkdownParams
+
+class MyClient(botpy.Client):
+ async def handle_send_markdown_by_template(self, channel_id, msg_id):
+ params = [
+ MessageMarkdownParams(key="title", values=["标题"]),
+ MessageMarkdownParams(key="content", values=["为了成为一名合格的巫师,请务必阅读频道公告", "藏馆黑色魔法书"]),
+ ]
+ markdown = MarkdownPayload(template_id=65, params=params)
+
+ # 通过api发送回复消息
+ await self.api.post_message(channel_id, markdown=markdown, msg_id=msg_id)
+
+ async def handle_send_markdown_by_content(self, channel_id, msg_id):
+ markdown = MarkdownPayload(content="# 标题 \n## 简介很开心 \n内容")
+ # 通过api发送回复消息
+ await self.api.post_message(channel_id, markdown=markdown, msg_id=msg_id)
+
+ async def on_at_message_create(self, message: Message):
+ await message.reply(content=f"机器人{self.robot.name}收到你的@消息了: {message.content}")
+ await self.handle_send_markdown_by_template(message.channel_id, message.id)
+ await self.handle_send_markdown_by_content(message.channel_id, message.id)
+
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
### 2:使用自定义 keyboard
-#### sync
-
```python
-import qqbot
+import botpy
+from botpy import BotAPI
-token = qqbot.Token({appid}, {token})
+from botpy.message import Message
+from botpy.types.inline import Keyboard, Button, RenderData, Action, Permission, KeyboardRow
+from botpy.types.message import MarkdownPayload, KeyboardPayload
-def send_self_defined_keyboard(channel_id, msg_id):
- msg_api = qqbot.MessageAPI(t_token, False)
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await send_template_keyboard(self.api, message)
+ await send_self_defined_keyboard(self.api, message)
- markdown = MessageMarkdown(content="# 标题 \n## 简介 \n内容")
- keyboard: MessageKeyboard = build_a_demo_keyboard()
- send = qqbot.MessageSendRequest(markdown=markdown, msg_id=msg_id, keyboard=keyboard)
- message = msg_api.post_message(channel_id, send)
-```
-
-#### async
-
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-async def send_self_defined_keyboard(channel_id, msg_id):
- msg_api = qqbot.AsyncMessageAPI(t_token, False)
+async def send_template_keyboard(api: BotAPI, message: Message):
+ markdown = MarkdownPayload(content="# 123 \n 今天是个好天气")
+ keyboard = KeyboardPayload(id="62")
+ await api.post_keyboard_message(message.channel_id, markdown=markdown, keyboard=keyboard)
- markdown = MessageMarkdown(content="# 标题 \n## 简介 \n内容")
- keyboard: MessageKeyboard = build_a_demo_keyboard()
- send = qqbot.MessageSendRequest(markdown=markdown, msg_id=msg_id, keyboard=keyboard)
- message = await msg_api.post_message(channel_id, send)
-```
+async def send_self_defined_keyboard(api: BotAPI, message: Message):
+ markdown = MarkdownPayload(content="# 标题 \n## 简介 \n内容")
+ keyboard = KeyboardPayload(content=build_a_demo_keyboard())
+ await api.post_keyboard_message(message.channel_id, markdown=markdown, keyboard=keyboard)
-
-```python
-def build_a_demo_keyboard() -> MessageKeyboard:
+def build_a_demo_keyboard() -> Keyboard:
"""
创建一个只有一行且该行只有一个 button 的键盘
"""
button1 = Button(
- '1',
- RenderData(
- "button",
- "BUTTON",
- 0
+ id="1",
+ render_data=RenderData(label="button", visited_label="BUTTON", style=0),
+ action=Action(
+ type=2,
+ permission=Permission(type=2, specify_role_ids=["1"], specify_user_ids=["1"]),
+ click_limit=10,
+ data="/搜索",
+ at_bot_show_channel_list=True,
),
- Action(
- 2,
- Permission(2, specify_role_ids=["1"]),
- 10,
- "/搜索",
- True
- )
)
- row1 = InlineKeyboardRow([button1])
- inline_keyboard = InlineKeyboard([row1])
- return MessageKeyboard(content=inline_keyboard)
+
+ row1 = KeyboardRow(buttons=[button1])
+ return Keyboard(rows=[row1])
+
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
+
```
## 返回说明
diff --git a/docs/develop/pythonsdk/api/message/post_message.md b/docs/develop/pythonsdk/api/message/post_message.md
index fe3a3e73..c2054747 100644
--- a/docs/develop/pythonsdk/api/message/post_message.md
+++ b/docs/develop/pythonsdk/api/message/post_message.md
@@ -17,12 +17,16 @@
## 使用示例
```python
-import qqbot
+import botpy
+from botpy.message import Message
-token = qqbot.Token({appid}, {token})
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.post_message(channel_id="xxxx", content="xxx", msg_id="xxxx", embed=embed)
-msg_api = qqbot.MessageAPI(token, False)
-message = msg_api.post_message(channel_id, message_send_request)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
@@ -30,12 +34,6 @@ message = msg_api.post_message(channel_id, message_send_request)
| 参数 | 必填 | 类型 | 说明 |
| --------- | ---- | ----------------------------------- | ---------- |
| channel_id | 是 | string | 子频道 ID |
-| message_send_request | 是 | [MessageSendRequest](#MessageSendRequest) | 消息体结构 |
-
-## MessageSendRequest
-
-| 字段名 | 必填 | 类型 | 描述 |
-| ------- | ---- | ----------------------------- | ---------------------------------------------------------------------------------------- |
| content | 否 | string | 消息内容,文本内容,支持[内嵌格式](message_format.md),可以为空 |
| embed | 否 | [MessageEmbed](#messageembed) | embed 消息,一种特殊的 ark |
| ark | 否 | [MessageArk](#messageark) | ark 消息 |
diff --git a/docs/develop/pythonsdk/api/message/post_reference_messages.md b/docs/develop/pythonsdk/api/message/post_reference_messages.md
index 33232c07..431c05b4 100644
--- a/docs/develop/pythonsdk/api/message/post_reference_messages.md
+++ b/docs/develop/pythonsdk/api/message/post_reference_messages.md
@@ -12,33 +12,46 @@
使用方式同[发送消息](./post_message.md),在[MessageSendRequest](../../model/message.md#messagesendrequest)中设置[MessageReference](../../model/message.md#messagereference)即可发送引用消息。
```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-msg_api = qqbot.MessageAPI(token, False)
-
-message_reference = MessageReference()
-message_reference.message_id = message_id
-send = qqbot.MessageSendRequest(
- content="这是一条引用消息",
- msg_id=message_id,
- message_reference=message_reference
-)
-
-# 通过api发送回复消息
-message = await msg_api.post_message(channel_id, send)
+import botpy
+
+from botpy.message import Message
+from botpy.types.message import Reference
+
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ # 构造消息发送请求数据对象
+ message_reference = Reference(message_id=message.id)
+ # 通过api发送回复消息
+ await self.api.post_message(
+ channel_id=message.channel_id,
+ content="这是一条引用消息",
+ msg_id=message.id,
+ message_reference=message_reference,
+ )
+
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
| 参数 | 必填 | 类型 | 说明 |
| --------- | ---- | ----------------------------------- | ---------- |
-| channelID | 是 | string | 子频道 ID |
-| messsage | 是 | [MessageSendRequest](../../model/message.md#messagesendrequest) | 消息体结构 |
+| channel_id | 是 | string | 子频道 ID |
+| content | 是 | string | 消息内容 |
+| msg_id | 是 | string | 消息ID |
+| message_reference | 是 | [Reference](#reference) | 引用消息体 |
引用消息支持内嵌格式、消息模板及图片,设置相应参数即可。
+# Reference
+
+| 参数 | 必填 | 类型 | 说明 |
+| --------- | ---- | ----------------------------------- | ---------- |
+| message_id | 是 | string | 需要引用回复的消息 ID |
+| ignore_get_message_error | 是 | bool | 是否忽略获取引用消息详情错误,默认否 |
+
## 返回说明
返回[Message](#message) 对象。
diff --git a/docs/develop/pythonsdk/api/message/recall_message.md b/docs/develop/pythonsdk/api/message/recall_message.md
index 8e038244..2c80ba78 100644
--- a/docs/develop/pythonsdk/api/message/recall_message.md
+++ b/docs/develop/pythonsdk/api/message/recall_message.md
@@ -11,30 +11,20 @@
## 使用示例
-#### sync
-
```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-def demo():
- msg_api = qqbot.MessageAPI(token, False)
- is_success = msg_api.recall_message(channel_id, message_id, True)
-```
+import botpy
-#### async
-```python
-import qqbot
+from botpy.message import Message
-token = qqbot.Token({appid}, {token})
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.recall_message(channel_id=message.channel_id, message_id="xxx", hidetip=True)
-async def demo():
- msg_api = qqbot.AsyncMessageAPI(token, False)
- is_success = await msg_api.recall_message(channel_id, message_id, True)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
-
## 参数说明
| 参数 | 必填 | 类型 | 说明 |
diff --git a/docs/develop/pythonsdk/config.js b/docs/develop/pythonsdk/config.js
index f2dc9994..5e3a32c2 100644
--- a/docs/develop/pythonsdk/config.js
+++ b/docs/develop/pythonsdk/config.js
@@ -108,7 +108,6 @@ module.exports = {
sidebarDepth: 0,
children: [
'api/message/get_message',
- //'api/message/get_messages',
'api/message/post_message',
'api/message/recall_message',
'api/message/post_ark_message',
From 61797b6c7e214e97efa6b24c04af087510baf23c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E5=BF=B5=E5=90=8C=E5=AD=A6?= <2660422452@qq.com>
Date: Fri, 24 Jun 2022 02:14:54 +0800
Subject: [PATCH 14/21] =?UTF-8?q?feat:=20pythonsdk=E6=9B=B4=E6=96=B0?=
=?UTF-8?q?=E7=B2=BE=E5=8D=8E=E6=B6=88=E6=81=AFAPI=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../api/pins_message/delete_pins_message.md | 28 ++++++-------------
.../api/pins_message/get_pins_message.md | 28 ++++++-------------
.../api/pins_message/put_pins_message.md | 28 ++++++-------------
3 files changed, 24 insertions(+), 60 deletions(-)
diff --git a/docs/develop/pythonsdk/api/pins_message/delete_pins_message.md b/docs/develop/pythonsdk/api/pins_message/delete_pins_message.md
index 4f25098d..14be55d5 100644
--- a/docs/develop/pythonsdk/api/pins_message/delete_pins_message.md
+++ b/docs/develop/pythonsdk/api/pins_message/delete_pins_message.md
@@ -4,30 +4,18 @@
## 使用示例
-#### sync
-
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-
-def demo():
- api = qqbot.PinsAPI(token, IS_SANDBOX)
- result = api.delete_pin(channel_id, message_id)
-```
-
-#### async
-
```python
-import qqbot
+import botpy
-token = qqbot.Token({appid}, {token})
+from botpy.message import Message
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.delete_pin(channel_id=message.channel_id, message_id=message.id)
-async def demo():
- api = qqbot.AsyncPinsAPI(token, IS_SANDBOX)
- result = await api.delete_pin(channel_id, message_id)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
diff --git a/docs/develop/pythonsdk/api/pins_message/get_pins_message.md b/docs/develop/pythonsdk/api/pins_message/get_pins_message.md
index 4c187aad..63fe3aab 100644
--- a/docs/develop/pythonsdk/api/pins_message/get_pins_message.md
+++ b/docs/develop/pythonsdk/api/pins_message/get_pins_message.md
@@ -4,30 +4,18 @@
## 使用示例
-#### sync
-
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-
-def demo():
- api = qqbot.PinsAPI(token, IS_SANDBOX)
- result = api.get_pins(channel_id)
-```
-
-#### async
-
```python
-import qqbot
+import botpy
-token = qqbot.Token({appid}, {token})
+from botpy.message import Message
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.get_pins(channel_id=message.channel_id)
-async def demo():
- api = qqbot.AsyncPinsAPI(token, IS_SANDBOX)
- result = await api.get_pins(channel_id)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
diff --git a/docs/develop/pythonsdk/api/pins_message/put_pins_message.md b/docs/develop/pythonsdk/api/pins_message/put_pins_message.md
index 803a2019..64061c4d 100644
--- a/docs/develop/pythonsdk/api/pins_message/put_pins_message.md
+++ b/docs/develop/pythonsdk/api/pins_message/put_pins_message.md
@@ -12,30 +12,18 @@
## 使用示例
-#### sync
-
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-
-def demo():
- api = qqbot.PinsAPI(token, IS_SANDBOX)
- result = api.put_pin(channel_id, message_id)
-```
-
-#### async
-
```python
-import qqbot
+import botpy
-token = qqbot.Token({appid}, {token})
+from botpy.message import Message
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.put_pin(channel_id=message.channel_id, message_id=message.id)
-async def demo():
- api = qqbot.AsyncPinsAPI(token, IS_SANDBOX)
- result = await api.put_pin(channel_id, message_id)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
From 407ff43231017b0379d3210ad2cabadb0e9f796e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E5=BF=B5=E5=90=8C=E5=AD=A6?= <2660422452@qq.com>
Date: Fri, 24 Jun 2022 02:29:01 +0800
Subject: [PATCH 15/21] =?UTF-8?q?feat:=20pythonsdk=E6=9B=B4=E6=96=B0?=
=?UTF-8?q?=E6=97=A5=E7=A8=8BAPI=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../pythonsdk/api/schedule/delete_schedule.md | 30 ++++-------
.../pythonsdk/api/schedule/get_schedule.md | 30 ++++-------
.../pythonsdk/api/schedule/get_schedules.md | 27 +++-------
.../pythonsdk/api/schedule/post_schedule.md | 50 ++++++++----------
.../pythonsdk/api/schedule/update_schedule.md | 51 ++++++++-----------
5 files changed, 69 insertions(+), 119 deletions(-)
diff --git a/docs/develop/pythonsdk/api/schedule/delete_schedule.md b/docs/develop/pythonsdk/api/schedule/delete_schedule.md
index b65afd8d..7fd9d800 100644
--- a/docs/develop/pythonsdk/api/schedule/delete_schedule.md
+++ b/docs/develop/pythonsdk/api/schedule/delete_schedule.md
@@ -10,30 +10,18 @@
## 使用示例
-#### sync
-
```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-
-def demo():
- api = qqbot.ScheduleAPI(token, False)
- result = api.delete_schedule(channel_id, schedule_id)
-```
-
-#### async
-
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
+import botpy
+from botpy.message import Message
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.get_schedules(channel_id="日程ID")
+ await self.api.delete_schedule(channel_id="日程子频道ID", schedule_id="日程ID")
-async def demo():
- api = qqbot.AsyncScheduleAPI(token, False)
- result = await api.delete_schedule(channel_id, schedule_id)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
diff --git a/docs/develop/pythonsdk/api/schedule/get_schedule.md b/docs/develop/pythonsdk/api/schedule/get_schedule.md
index 1f2d2d9b..fee07dc3 100644
--- a/docs/develop/pythonsdk/api/schedule/get_schedule.md
+++ b/docs/develop/pythonsdk/api/schedule/get_schedule.md
@@ -4,30 +4,18 @@
## 使用示例
-#### sync
-
```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-
-def demo():
- api = qqbot.ScheduleAPI(token, False)
- schedule = api.get_schedule(channel_id, schedule_id)
-```
-
-#### async
-
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
+import time
+import botpy
+from botpy.message import Message
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.get_schedule(channel_id="日程子频道ID", schedule_id="日程ID")
-async def demo():
- api = qqbot.AsyncScheduleAPI(token, False)
- schedule = await api.get_schedule(channel_id, schedule_id)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
diff --git a/docs/develop/pythonsdk/api/schedule/get_schedules.md b/docs/develop/pythonsdk/api/schedule/get_schedules.md
index 6115dae4..f78a584e 100644
--- a/docs/develop/pythonsdk/api/schedule/get_schedules.md
+++ b/docs/develop/pythonsdk/api/schedule/get_schedules.md
@@ -7,27 +7,16 @@
#### sync
```python
-import qqbot
+import botpy
+from botpy.message import Message
-token = qqbot.Token({appid}, {token})
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.get_schedules(channel_id="日程ID", since="1656008891145")
-
-def demo():
- api = qqbot.ScheduleAPI(token, False)
- schedules = api.get_schedules(channel_id, since)
-```
-
-#### async
-
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-
-async def demo():
- api = qqbot.AsyncScheduleAPI(token, False)
- schedules = await api.get_schedules(channel_id, since)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token}
```
## 参数说明
diff --git a/docs/develop/pythonsdk/api/schedule/post_schedule.md b/docs/develop/pythonsdk/api/schedule/post_schedule.md
index 73590f23..533cb42d 100644
--- a/docs/develop/pythonsdk/api/schedule/post_schedule.md
+++ b/docs/develop/pythonsdk/api/schedule/post_schedule.md
@@ -10,30 +10,28 @@
## 使用示例
-#### sync
-
```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-
-def demo():
- api = qqbot.ScheduleAPI(token, False)
- schedule = api.create_schedule(channel_id, schedule_to_create)
-```
-
-#### async
-
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-
-async def demo():
- api = qqbot.AsyncScheduleAPI(token, False)
- schedule = await api.create_schedule(channel_id, schedule_to_create)
+import time
+import botpy
+from botpy.message import Message
+
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ delay = 1000 * 60
+ start_time = int(round(time.time() * 1000)) + delay
+ end_time = start_time + delay
+ await self.api.create_schedule(
+ channel_id="日程子频道ID",
+ name="test",
+ start_timestamp=str(start_time),
+ end_timestamp=str(end_time),
+ jump_channel_id="日程子频道ID",
+ remind_type="0",
+ )
+
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
@@ -41,12 +39,6 @@ async def demo():
| 字段名 | 必填 | 类型 | 描述 |
| --------- | ---- | ------------------------------------- | -------------------------------- |
| channel_id | 是 | string | [子频道 ID](../../model/channel.md) |
-| schedule_to_create | 是 | [ScheduleToCreate](#scheduletocreate) | 日程对象 |
-
-### ScheduleToCreate
-
-| 字段名 | 必填 | 类型 | 描述 |
-| --------------- | ---- | ----------------- | --------------------------------------------------------------- |
| name | 是 | string | 日程名称 |
| description | 否 | string | 日程描述 |
| start_timestamp | 是 | string | 日程开始时间戳(**`ms`**) ,**日程开始时间必须大于传当前时间** |
diff --git a/docs/develop/pythonsdk/api/schedule/update_schedule.md b/docs/develop/pythonsdk/api/schedule/update_schedule.md
index 1fcaed73..5f0e79ba 100644
--- a/docs/develop/pythonsdk/api/schedule/update_schedule.md
+++ b/docs/develop/pythonsdk/api/schedule/update_schedule.md
@@ -10,30 +10,29 @@
## 使用示例
-#### sync
-
```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-
-def demo():
- api = qqbot.ScheduleAPI(token, False)
- schedule = api.update_schedule(channel_id, schedule_id, schedule_to_patch)
-```
-
-#### async
-
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-
-async def demo():
- api = qqbot.AsyncScheduleAPI(token, False)
- schedule = await api.update_schedule(channel_id, schedule_id, schedule_to_patch)
+import time
+import botpy
+from botpy.message import Message
+
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ delay = 1000 * 60
+ start_time = int(round(time.time() * 1000)) + delay
+ end_time = start_time + delay
+ await self.api.update_schedule(
+ channel_id="日程子频道ID",
+ schedule_id="日程ID",
+ name="test",
+ start_timestamp=str(start_time),
+ end_timestamp=str(end_time),
+ jump_channel_id="日程子频道ID",
+ remind_type="0",
+ )
+
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
@@ -42,12 +41,6 @@ async def demo():
| ---------- | ---- | ----------------------------------- | --------- |
| channel_id | 是 | string | 子频道 ID |
| schedule_id | 是 | string | 日程 ID |
-| schedule_to_patch | 是 | [ScheduleToPatch](#scheduletopatch) | 日程对象 |
-
-### ScheduleToPatch
-
-| 字段名 | 必填 | 类型 | 描述 |
-| --------------- | ---- | ----------------- | ----------------------------------------------- |
| name | 否 | string | 日程名称 |
| description | 否 | string | 日程描述 |
| start_timestamp | 是 | string | 日程开始时间戳(**`ms`**) |
From 425fc123f66876b50da0068f76997c3374f562a5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E5=BF=B5=E5=90=8C=E5=AD=A6?= <2660422452@qq.com>
Date: Fri, 24 Jun 2022 02:31:08 +0800
Subject: [PATCH 16/21] =?UTF-8?q?fix:=20=E5=8E=BB=E9=99=A4pythonsdk?=
=?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A5=E7=A8=8BAPI=E6=96=87=E6=A1=A3?=
=?UTF-8?q?=E4=B8=80=E5=A4=84=E5=A4=9A=E4=BD=99=E7=9A=84=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docs/develop/pythonsdk/api/schedule/delete_schedule.md | 1 -
1 file changed, 1 deletion(-)
diff --git a/docs/develop/pythonsdk/api/schedule/delete_schedule.md b/docs/develop/pythonsdk/api/schedule/delete_schedule.md
index 7fd9d800..d455119c 100644
--- a/docs/develop/pythonsdk/api/schedule/delete_schedule.md
+++ b/docs/develop/pythonsdk/api/schedule/delete_schedule.md
@@ -16,7 +16,6 @@ from botpy.message import Message
class MyClient(botpy.Client):
async def on_at_message_create(self, message: Message):
- await self.api.get_schedules(channel_id="日程ID")
await self.api.delete_schedule(channel_id="日程子频道ID", schedule_id="日程ID")
intents = botpy.Intents(public_guild_messages=True)
From d4fd3be1016c224643899ccbce0a00df83caacef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E5=BF=B5=E5=90=8C=E5=AD=A6?= <2660422452@qq.com>
Date: Fri, 24 Jun 2022 02:38:49 +0800
Subject: [PATCH 17/21] =?UTF-8?q?feat:=20pythonsdk=E6=9B=B4=E6=96=B0?=
=?UTF-8?q?=E8=A1=A8=E6=83=85=E8=A1=A8=E6=80=81API=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../pythonsdk/api/reaction/delete_reaction.md | 31 +++------
.../api/reaction/get_reaction_users.md | 65 ++++++++++++-------
.../pythonsdk/api/reaction/post_reaction.md | 31 +++------
docs/develop/pythonsdk/model/reaction.md | 8 ---
4 files changed, 59 insertions(+), 76 deletions(-)
diff --git a/docs/develop/pythonsdk/api/reaction/delete_reaction.md b/docs/develop/pythonsdk/api/reaction/delete_reaction.md
index 08ae6980..5061dbc9 100644
--- a/docs/develop/pythonsdk/api/reaction/delete_reaction.md
+++ b/docs/develop/pythonsdk/api/reaction/delete_reaction.md
@@ -4,30 +4,17 @@
## 使用示例
-#### sync
-
```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-
-def demo():
- api = qqbot.ReactionAPI(token, False)
- result = api.delete_reaction(channel_id, message_id, EmojiType.system, "4")
-```
-
-#### async
-
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
+import botpy
+from botpy.message import Message
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.delete_reaction(channel_id="xxxx", message_id="xxxx", emoji_type=1, emoji_id="4")
-async def demo():
- api = qqbot.AsyncReactionAPI(token, False)
- result = await api.delete_reaction(channel_id, message_id, EmojiType.system, "4")
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
@@ -36,7 +23,7 @@ async def demo():
| ----------- | ---- | ------------------------------------- | -------------------------------- |
| channel_id | 是 | string | 子频道 ID |
| message_id | 是 | string | 消息 ID |
-| type | 是 | int | 表情类型,参考[EmojiType](../../model/emoji.md#EmojiType) |
+| emoji_type | 是 | int | 表情类型,参考[EmojiType](../../model/emoji.md#EmojiType) |
| emoji_id | 是 | string | 表情 ID,参考 [Emoji 列表](../../model/emoji.md#Emoji-列表) |
## 返回说明
diff --git a/docs/develop/pythonsdk/api/reaction/get_reaction_users.md b/docs/develop/pythonsdk/api/reaction/get_reaction_users.md
index e5e1ed3c..e4e1c8ed 100644
--- a/docs/develop/pythonsdk/api/reaction/get_reaction_users.md
+++ b/docs/develop/pythonsdk/api/reaction/get_reaction_users.md
@@ -4,30 +4,46 @@
## 使用示例
-#### sync
-
```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-
-def demo():
- api = qqbot.ReactionAPI(token, False)
- reaction_users = api.get_reaction_users(channel_id, message_id, EmojiType.system, "4", ReactionUsersPager())
-```
-
-#### async
-
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-
-async def demo():
- api = qqbot.AsyncReactionAPI(token, False)
- reaction_users = await api.get_reaction_users(channel_id, message_id, EmojiType.system, "4", ReactionUsersPager())
+from typing import List
+
+import botpy
+
+from botpy.message import Message
+from botpy.types import reaction
+from botpy.types.user import User
+
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ users: List[User] = []
+ cookie = ""
+ while True:
+ reactionUsers: reaction.ReactionUsers = await self.api.get_reaction_users(
+ channel_id="2568610",
+ message_id="088de19cbeb883e7e97110a2e39c0138d80d48acfc879406",
+ emoji_type=1,
+ emoji_id="4",
+ cookie=cookie,
+ limit=20
+ )
+
+ if not reactionUsers:
+ break
+
+ users.extend(reactionUsers["users"])
+
+ if reactionUsers["is_end"]:
+ break
+ else:
+ cookie = reactionUsers["cookie"]
+
+ print(len(users))
+ for user in users:
+ print(user["username"])
+
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
@@ -38,7 +54,8 @@ async def demo():
| message_id | 是 | string | 消息 ID |
| type | 是 | int | 表情类型,参考[EmojiType](../../model/emoji.md#EmojiType) |
| emoji_id | 是 | string | 表情 ID,参考 [Emoji 列表](../../model/emoji.md#Emoji-列表) |
-| pager | 是 | ReactionUsersPager 对象 | 拉取表情表态用户列表的分页对象,参考[ReactionUsersPager](../../model/reaction.md#ReactionUsersPager)|
+| cookie | 否 | string | cookie 上次请求返回的cookie,第一次请求无需填写 |
+| limit | 否 | int | 返回的最大用户数 (1-100), 默认20 |
## 返回说明
diff --git a/docs/develop/pythonsdk/api/reaction/post_reaction.md b/docs/develop/pythonsdk/api/reaction/post_reaction.md
index f7c84b1d..f18865be 100644
--- a/docs/develop/pythonsdk/api/reaction/post_reaction.md
+++ b/docs/develop/pythonsdk/api/reaction/post_reaction.md
@@ -4,30 +4,17 @@
## 使用示例
-#### sync
-
```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-
-def demo():
- api = qqbot.ReactionAPI(token, False)
- result = api.put_reaction(channel_id, message_id, EmojiType.system, "4")
-```
-
-#### async
-
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
+import botpy
+from botpy.message import Message
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.put_reaction(channel_id="xxxx", message_id="xxxx", emoji_type=1, emoji_id="4")
-async def demo():
- api = qqbot.AsyncReactionAPI(token, False)
- result = await api.put_reaction(channel_id, message_id, EmojiType.system, "4")
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
@@ -36,7 +23,7 @@ async def demo():
| ----------- | ---- | ------------------------------------- | -------------------------------- |
| channel_id | 是 | string | 子频道 ID |
| message_id | 是 | string | 消息 ID |
-| type | 是 | int | 表情类型,参考[EmojiType](../../model/emoji.md#EmojiType) |
+| emoji_type | 是 | int | 表情类型,参考[EmojiType](../../model/emoji.md#EmojiType) |
| emoji_id | 是 | string | 表情 ID,参考 [Emoji 列表](../../model/emoji.md#Emoji-列表)
## 返回说明
diff --git a/docs/develop/pythonsdk/model/reaction.md b/docs/develop/pythonsdk/model/reaction.md
index 43f3a478..cf6bf675 100644
--- a/docs/develop/pythonsdk/model/reaction.md
+++ b/docs/develop/pythonsdk/model/reaction.md
@@ -35,14 +35,6 @@
| is_end | bool | 是否已拉取完成到最后一页,true代表完成 |
-## ReactionUsersPager
-
-| 字段名 | 类型 | 描述 |
-| ------ | ------ | ------------------------------------ |
-| cookie | string | 上次请求返回的cookie,第一次请求无需填写 |
-| limit | int | 每次拉取数量,默认20,最多50,只须第一次请求时设置 |
-
-
## ReactionTargetType
| 值 | 描述 |
From 69bb5c302054883ab6da99bd5b73a087c2fcbcd1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E5=BF=B5=E5=90=8C=E5=AD=A6?= <2660422452@qq.com>
Date: Fri, 24 Jun 2022 02:49:01 +0800
Subject: [PATCH 18/21] =?UTF-8?q?feat:=20pythonsdk=E6=9B=B4=E6=96=B0?=
=?UTF-8?q?=E7=A6=81=E8=A8=80API=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docs/develop/pythonsdk/api/mute/mute_all.md | 34 ++++------------
.../develop/pythonsdk/api/mute/mute_member.md | 34 ++++------------
.../pythonsdk/api/mute/mute_multi_member.md | 39 +++++--------------
.../pythonsdk/api/reaction/post_reaction.md | 1 +
4 files changed, 27 insertions(+), 81 deletions(-)
diff --git a/docs/develop/pythonsdk/api/mute/mute_all.md b/docs/develop/pythonsdk/api/mute/mute_all.md
index 34b82d77..d567b292 100644
--- a/docs/develop/pythonsdk/api/mute/mute_all.md
+++ b/docs/develop/pythonsdk/api/mute/mute_all.md
@@ -4,30 +4,18 @@
## 使用示例
-#### sync
-
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-
-def demo():
- api = qqbot.MuteAPI(token, False)
- is_success = api.mute_all(guild_id, options)
-```
-
-#### async
-
```python
-import qqbot
+import botpy
-token = qqbot.Token({appid}, {token})
+from botpy.message import Message
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.mute_all(guild_id="xxxx", mute_end_timestamp="xxxx", mute_seconds="xxxx")
-async def demo():
- api = qqbot.AsyncMuteAPI(token, False)
- is_success = await api.mute_all(guild_id, options)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
@@ -35,12 +23,6 @@ async def demo():
| 字段名 | 必填 | 类型 | 描述 |
| ------- | ---- | ------------------------- | ---------------------------- |
| guild_id | 是 | string | [频道 ID](../../model/guild.md) |
-| options | 是 | [MuteOption](#muteoption) | 禁言时长控制参数 |
-
-### MuteOption
-
-| 字段名 | 类型 | 描述 |
-| ------- | ------ | --------------------------------------------------------------------------------------- |
| mute_end_timestamp | string | 禁言到期时间戳,`绝对时间戳`,单位:`秒`(与 `seconds` 字段同时赋值的话,以该字段为准) |
| mute_seconds | string | 禁言多少秒(两个字段二选一,**默认以 `mute_end_timstamp` 为准**) |
diff --git a/docs/develop/pythonsdk/api/mute/mute_member.md b/docs/develop/pythonsdk/api/mute/mute_member.md
index 18b7e3ca..c2a19acd 100644
--- a/docs/develop/pythonsdk/api/mute/mute_member.md
+++ b/docs/develop/pythonsdk/api/mute/mute_member.md
@@ -4,30 +4,18 @@
## 使用示例
-#### sync
-
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-
-def demo():
- api = qqbot.MuteAPI(token, False)
- is_success = api.mute_member(guild_id, user_id, channel_permissions)
-```
-
-#### async
-
```python
-import qqbot
+import botpy
-token = qqbot.Token({appid}, {token})
+from botpy.message import Message
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.mute_member(guild_id="xxxx", user_id="xxxx", mute_end_timestamp="xxxx", mute_seconds="xxxx")
-async def demo():
- api = qqbot.AsyncMuteAPI(token, False)
- is_success = await api.mute_member(guild_id,user_id, options)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
@@ -36,12 +24,6 @@ async def demo():
| ------- | ---- | ------------------------- | ---------------------------- |
| guild_id | 是 | string | [频道 ID](../../model/guild.md) |
| user_id | 是 | string | [成员 ID](../../model/user.md) |
-| options | 是 | [MuteOptions](#muteoption) | 禁言时长控制参数 |
-
-### MuteOption
-
-| 字段名 | 类型 | 描述 |
-| ------- | ------ | --------------------------------------------------------------------------------------- |
| mute_end_timestamp | string | 禁言到期时间戳,`绝对时间戳`,单位:`秒`(与 `seconds` 字段同时赋值的话,以该字段为准) |
| mute_seconds | string | 禁言多少秒(两个字段二选一,**默认以 `mute_end_timstamp` 为准**) |
diff --git a/docs/develop/pythonsdk/api/mute/mute_multi_member.md b/docs/develop/pythonsdk/api/mute/mute_multi_member.md
index b556cfe3..9287b29c 100644
--- a/docs/develop/pythonsdk/api/mute/mute_multi_member.md
+++ b/docs/develop/pythonsdk/api/mute/mute_multi_member.md
@@ -6,32 +6,19 @@
## 使用示例
-#### sync
-
-```python
-import qqbot
-
-token = qqbot.Token({appid}, {token})
-
-
-def demo():
- api = qqbot.MuteAPI(token, False)
- option = qqbot.MultiMuteOption(mute_seconds="120", user_ids=[GUILD_TEST_MEMBER_ID])
- succeed_user_ids = api.mute_multi_member(GUILD_ID, option)
-```
-
-#### async
-
```python
-import qqbot
+import botpy
-token = qqbot.Token({appid}, {token})
+from botpy.message import Message
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ user_ids = ["xxx", "xxx"]
+ await self.api.mute_multi_member(guild_id="xxxx", user_ids=user_ids, mute_end_timestamp="xxxx", mute_seconds="xxxx")
-async def demo():
- api = qqbot.AsyncMuteAPI(token, False)
- option = qqbot.MultiMuteOption(mute_seconds="120", user_ids=[GUILD_TEST_MEMBER_ID])
- succeed_user_ids = api.mute_multi_member(GUILD_ID, option)
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明
@@ -39,15 +26,9 @@ async def demo():
| 字段名 | 必填 | 类型 | 描述 |
| ------- | ---- | ------------------------- | ---------------------------- |
| guild_id | 是 | string | [频道 ID](../../model/guild.md) |
-| options | 是 | [MultiMuteOptions](#multimuteoption) | 批量禁言参数 |
-
-### MultiMuteOption
-
-| 字段名 | 类型 | 描述 |
-| ------- | ------ | --------------------------------------------------------------------------------------- |
+| user_ids | string 列表 | 禁言成员的 user_id 列表 |
| mute_end_timestamp | string | 禁言到期时间戳,`绝对时间戳`,单位:`秒`(与 `seconds` 字段同时赋值的话,以该字段为准) |
| mute_seconds | string | 禁言多少秒(两个字段二选一,**默认以 `mute_end_timstamp` 为准**) |
-| user_ids | string 列表 | 禁言成员的 user_id 列表 |
#### 批量解除禁言
diff --git a/docs/develop/pythonsdk/api/reaction/post_reaction.md b/docs/develop/pythonsdk/api/reaction/post_reaction.md
index f18865be..6fb92532 100644
--- a/docs/develop/pythonsdk/api/reaction/post_reaction.md
+++ b/docs/develop/pythonsdk/api/reaction/post_reaction.md
@@ -8,6 +8,7 @@
import botpy
from botpy.message import Message
+
class MyClient(botpy.Client):
async def on_at_message_create(self, message: Message):
await self.api.put_reaction(channel_id="xxxx", message_id="xxxx", emoji_type=1, emoji_id="4")
From a76932bb31107052e9b877eb13a8cb41e7cc6ea8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E5=BF=B5=E5=90=8C=E5=AD=A6?= <2660422452@qq.com>
Date: Fri, 24 Jun 2022 02:57:52 +0800
Subject: [PATCH 19/21] =?UTF-8?q?feat:=20=E4=BF=AE=E5=A4=8Dpythonsdk?=
=?UTF-8?q?=E6=9E=84=E5=BB=BA=E6=97=B6=E4=BA=A7=E7=94=9F=E7=9A=84=E6=8A=A5?=
=?UTF-8?q?=E9=94=99=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docs/develop/pythonsdk/README.md | 5 ++-
.../api/announce/create_guild_announce.md | 2 +-
.../pythonsdk/api/audio/audio_off_mic.md | 2 +-
.../pythonsdk/websocket/listen_events.md | 32 +++++++++----------
4 files changed, 20 insertions(+), 21 deletions(-)
diff --git a/docs/develop/pythonsdk/README.md b/docs/develop/pythonsdk/README.md
index 4aecc0c5..f3cc8a69 100644
--- a/docs/develop/pythonsdk/README.md
+++ b/docs/develop/pythonsdk/README.md
@@ -90,13 +90,13 @@ intents.guilds=True
方法二对应的快捷订阅方式为
-1. 订阅所有事件
+1. 订阅所有事件
```python
intents = botpy.Intents.all()
```
-2. 订阅所有的公域事件
+2. 订阅所有的公域事件
```python
intents = botpy.Intents.default()
@@ -128,7 +128,6 @@ intents.public_guild_messages=True
| forums | 论坛事件 **(仅 `私域` 机器人能够设置此 intents)** |
| audio_action | 音频事件 |
-
## 日志打印
基于自带的 logging 模块封装的日志模块,提供了日志写入以及美化了打印格式,并支持调整打印级别(默认打印级别为 `INFO`)。
diff --git a/docs/develop/pythonsdk/api/announce/create_guild_announce.md b/docs/develop/pythonsdk/api/announce/create_guild_announce.md
index 1d49610d..138fa656 100644
--- a/docs/develop/pythonsdk/api/announce/create_guild_announce.md
+++ b/docs/develop/pythonsdk/api/announce/create_guild_announce.md
@@ -45,4 +45,4 @@ client.run(appid={appid}, token={token})
"channel_id":"channel_id",
"message_id":"message_id"
}
-```
\ No newline at end of file
+```
diff --git a/docs/develop/pythonsdk/api/audio/audio_off_mic.md b/docs/develop/pythonsdk/api/audio/audio_off_mic.md
index 20049ac6..1bf2f3a3 100644
--- a/docs/develop/pythonsdk/api/audio/audio_off_mic.md
+++ b/docs/develop/pythonsdk/api/audio/audio_off_mic.md
@@ -26,4 +26,4 @@ client.run(appid={appid}, token={token})
```json
{}
-```
\ No newline at end of file
+```
diff --git a/docs/develop/pythonsdk/websocket/listen_events.md b/docs/develop/pythonsdk/websocket/listen_events.md
index a0c1216c..9d585cb2 100644
--- a/docs/develop/pythonsdk/websocket/listen_events.md
+++ b/docs/develop/pythonsdk/websocket/listen_events.md
@@ -34,7 +34,7 @@ client = MyClient(intents=intents)
| on_at_message_create(self, message: Message) | 当收到@机器人的消息时 |
| on_public_message_delete(self, message: Message) | 当频道的消息被删除时 |
-- **注:需要引入`Message`**
+- **注:需要引入`Message`**
```python
from botpy.message import Message
@@ -54,7 +54,7 @@ class MyClient(botpy.Client):
### 消息事件的监听
-- **仅 私域 机器人能够设置此 intents**
+- **仅 私域 机器人能够设置此 intents**
首先需要订阅事件`guild_messages`
@@ -68,7 +68,7 @@ client = MyClient(intents=intents)
| on_message_create(self, message: Message) | 发送消息事件,代表频道内的全部消息,而不只是 at 机器人的消息。内容与 AT_MESSAGE_CREATE 相同 |
| on_message_delete(self, message: Message) | 删除(撤回)消息事件 |
-- **注:需要引入`Message`**
+- **注:需要引入`Message`**
```python
from botpy.message import Message
@@ -100,7 +100,7 @@ client = MyClient(intents=intents)
| on_direct_message_create(self, message: DirectMessage) | 当收到用户发给机器人的私信消息时 |
| on_direct_message_delete(self, message: DirectMessage) | 删除(撤回)消息事件 |
-- **注:需要引入`DirectMessage`**
+- **注:需要引入`DirectMessage`**
```python
from botpy.message import DirectMessage
@@ -132,7 +132,7 @@ client = MyClient(intents=intents)
| on_message_reaction_add(self, reaction: Reaction) | 为消息添加表情表态 |
| on_message_reaction_remove(self, reaction: Reaction) | 为消息删除表情表态 |
-- **注:需要引入`Reaction`**
+- **注:需要引入`Reaction`**
```python
from botpy.reaction import Reaction
@@ -168,7 +168,7 @@ client = MyClient(intents=intents)
| on_channel_update(self, channel: Channel) | 当channel被更新时 |
| on_channel_delete(self, channel: Channel) | 当channel被删除时 |
-- **注:需要引入`Guild`和`Channel`**
+- **注:需要引入`Guild`和`Channel`**
```python
from botpy.guild import Guild
@@ -218,7 +218,7 @@ client = MyClient(intents=intents)
| on_guild_member_update(self, member: Member) | 当成员资料变更时 |
| on_guild_member_remove(self, member: Member) | 当成员被移除时 |
-- **注:需要引入`GuildMember`**
+- **注:需要引入`GuildMember`**
```python
from botpy.user import Member
@@ -253,7 +253,7 @@ client = MyClient(intents=intents)
| ----------------------------------------------------- | ---------------- |
| on_interaction_create(self, interaction: Interaction) | 当收到用户发给机器人的私信消息时 |
-- **注:需要引入`Interaction`**
+- **注:需要引入`Interaction`**
```python
from botpy.interaction import Interaction
@@ -281,7 +281,7 @@ client = MyClient(intents=intents)
| on_message_audit_pass(self, message: MessageAudit) | 消息审核通过 |
| on_message_audit_reject(self, message: MessageAudit) | 消息审核不通过 |
-- **注:需要引入`MessageAudit`**
+- **注:需要引入`MessageAudit`**
```python
from botpy.message import MessageAudit
@@ -301,7 +301,7 @@ class MyClient(botpy.Client):
### 论坛事件的监听
-- **仅 私域 机器人能够设置此 intents**
+- **仅 私域 机器人能够设置此 intents**
首先需要订阅事件`forums`
@@ -321,7 +321,7 @@ client = MyClient(intents=intents)
| on_forum_reply_delete(self, reply: Reply) | 当用户删除评论时 |
| on_forum_publish_audit_result(self, auditresult: AuditResult) | 当用户发表审核通过时 |
-- **注:需要引入`Thread`、`Post`、`Reply`和`AuditResult`**
+- **注:需要引入`Thread`、`Post`、`Reply`和`AuditResult`**
```python
from botpy.forum import Thread
@@ -380,7 +380,7 @@ client = MyClient(intents=intents)
| on_audio_on_mic(self, audio: Audio) | 上麦时 |
| on_audio_off_mic(self, audio: Audio) | 下麦时 |
-- **注:需要引入`Audio`**
+- **注:需要引入`Audio`**
```python
from botpy.audio import Audio
@@ -437,17 +437,17 @@ intents.direct_message=True
intents.guilds=True
```
-- **说明**
+- **说明**
方法二对应的快捷订阅方式为
-1. 订阅所有事件
+1. 订阅所有事件
```python
intents = botpy.Intents.all()
```
-2. 订阅所有的公域事件
+2. 订阅所有的公域事件
```python
intents = botpy.Intents.default()
@@ -466,4 +466,4 @@ intents = botpy.Intents.default()
| interaction | 互动事件 |
| message_audit | 消息审核事件 |
| forums | 论坛事件 **(仅 `私域` 机器人能够设置此 intents)** |
-| audio_action | 音频事件 |
\ No newline at end of file
+| audio_action | 音频事件 |
From 2f8bb9ba8a82ca9af8f76e60eddd19d9132c01d5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E5=BF=B5=E5=90=8C=E5=AD=A6?= <2660422452@qq.com>
Date: Fri, 24 Jun 2022 17:24:26 +0800
Subject: [PATCH 20/21] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9botpy=E6=96=87?=
=?UTF-8?q?=E6=A1=A3=E9=83=A8=E5=88=86=E4=BB=A3=E7=A0=81=E9=A3=8E=E6=A0=BC?=
=?UTF-8?q?=E8=A7=84=E8=8C=83?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docs/changelog/README.md | 27 +++++++++++++++++++
docs/develop/pythonsdk/README.md | 3 ---
.../pythonsdk/websocket/listen_events.md | 22 +--------------
3 files changed, 28 insertions(+), 24 deletions(-)
diff --git a/docs/changelog/README.md b/docs/changelog/README.md
index 5a610d10..ee9e6365 100644
--- a/docs/changelog/README.md
+++ b/docs/changelog/README.md
@@ -4,6 +4,33 @@ sidebar: auto
# 文档更新日志
+## 2022-06-17
+
+* feat: 完善ws事件中Message数据的构建 ([9564cb2](https://github.com/tencent-connect/botpy/pull/103/commits/9564cb2858833fb8de442123226fe7a46f743fe6))
+* feat: 完善ws事件中User-Member数据的构建 ([109c74e](https://github.com/tencent-connect/botpy/pull/103/commits/109c74e8845ee0c91b0237a7bf427e9f4587cf47))
+* feat: 完善ws事件中Reaction、Audio、DirectMessage 以及 Forum(Thread类)数据的构建
+ ([26af7ad](https://github.com/tencent-connect/botpy/pull/103/commits/26af7adc5fb193707023f3d6ebdc4f6b36936cff))
+
+## 2022-06-15
+
+* feat: 优化gateway, api, flags, http中的部分逻辑构建与冗余代码 ([727ed73](https://github.com/tencent-connect/botpy/commit/727ed73823a3d4e7a9a5f507edb5a3ff0f9a5222))
+* docs: 更新文档中的部分demo ([a24bf94](https://github.com/tencent-connect/botpy/commit/a24bf94557a06cf5cfabeefc81de5376a8578346))
+* feat: 优化撤回消息api的用法&优化handle消息参数的返回值 ([166496e](https://github.com/tencent-connect/botpy/commit/166496e8b6615b7797b71b004ec394e1876611cb))
+
+## 2022-06-14
+
+* fix: 修复撤回消息隐藏小灰条没有生效的问题 ([6c37dd6](https://github.com/tencent-connect/botpy/commit/06afb5361b05ac05981b1453453c99b1f10faf87))
+
+## 2022-06-13
+
+* feat: 优化指令装饰器并新增指令装饰器demo ([40576451](https://github.com/ReadSmall/botpy/commit/405764517c32bf55b168bd217934d4d452655fb8))
+* feat: botpy 1.0 版本合入 ([8a30abe2](https://github.com/ReadSmall/botpy/commit/8a30abe28fc9daed122c60f517c1fbbd3198c8c0))
+* feat: 优化http模块&新增频道成员事件的Member构建&优化代码逻辑统一性,去除部分冗余代码 ([0add0b9](https://github.com/tencent-connect/botpy/commit/0add0b9dd761b12e98f66db91c34e0939c270c60))
+
+## 2022-06-11
+
+* fix: 优化logging模块 ([9162c24](https://github.com/tencent-connect/botpy/commit/9162c2452b71778a15dadbc088b76405e53fd68b))
+
## 2022-01-13
* docs(changlog): 同步changlog ([46f5921](https://github.com/tencent-connect/bot-docs/commit/46f59210f4f5f7efd72f47c447eefb93ea9ad288))
diff --git a/docs/develop/pythonsdk/README.md b/docs/develop/pythonsdk/README.md
index f3cc8a69..f5390ccc 100644
--- a/docs/develop/pythonsdk/README.md
+++ b/docs/develop/pythonsdk/README.md
@@ -138,7 +138,6 @@ intents.public_guild_messages=True
```python
from botpy import logging
-
```
或者通过`botpy.logger`也可以获取logger对象
@@ -149,7 +148,6 @@ from botpy import logging
from botpy import logger
logger.info("hello world!")
-
```
### 日志设置
@@ -167,7 +165,6 @@ botpy.Client(
ext_handlers=False,
log_config="log_config.json"
)
-
```
### log_level
diff --git a/docs/develop/pythonsdk/websocket/listen_events.md b/docs/develop/pythonsdk/websocket/listen_events.md
index 9d585cb2..abc365ea 100644
--- a/docs/develop/pythonsdk/websocket/listen_events.md
+++ b/docs/develop/pythonsdk/websocket/listen_events.md
@@ -38,9 +38,7 @@ client = MyClient(intents=intents)
```python
from botpy.message import Message
-```
-```python
class MyClient(botpy.Client):
async def on_at_message_create(self, message: Message):
"""
@@ -72,9 +70,7 @@ client = MyClient(intents=intents)
```python
from botpy.message import Message
-```
-```python
class MyClient(botpy.Client):
async def on_message_create(self, message: Message):
"""
@@ -104,9 +100,7 @@ client = MyClient(intents=intents)
```python
from botpy.message import DirectMessage
-```
-```python
class MyClient(botpy.Client):
async def on_direct_message_create(self, message: DirectMessage):
"""
@@ -136,9 +130,7 @@ client = MyClient(intents=intents)
```python
from botpy.reaction import Reaction
-```
-```python
class MyClient(botpy.Client):
async def on_message_reaction_add(self, reaction: Reaction):
"""
@@ -173,9 +165,7 @@ client = MyClient(intents=intents)
```python
from botpy.guild import Guild
from botpy.channel import Channel
-```
-```python
class MyClient(botpy.Client):
async def on_guild_create(self, guild: Guild):
"""
@@ -222,9 +212,7 @@ client = MyClient(intents=intents)
```python
from botpy.user import Member
-```
-```python
class MyClient(botpy.Client):
async def on_guild_member_add(self, member: Member):
"""
@@ -257,9 +245,7 @@ client = MyClient(intents=intents)
```python
from botpy.interaction import Interaction
-```
-```python
class MyClient(botpy.Client):
async def on_interaction_create(self, interaction: Interaction):
"""
@@ -285,9 +271,7 @@ client = MyClient(intents=intents)
```python
from botpy.message import MessageAudit
-```
-```python
class MyClient(botpy.Client):
async def on_message_audit_pass(self, message: MessageAudit):
"""
@@ -326,9 +310,7 @@ client = MyClient(intents=intents)
```python
from botpy.forum import Thread
from botpy.types.forum import Post, Reply, AuditResult
-```
-```python
class MyClient(botpy.Client):
async def on_forum_thread_create(self, thread: Thread):
"""
@@ -384,9 +366,7 @@ client = MyClient(intents=intents)
```python
from botpy.audio import Audio
-```
-```python
class MyClient(botpy.Client):
async def on_audio_start(self, audio: Audio):
"""
@@ -451,7 +431,7 @@ intents = botpy.Intents.all()
```python
intents = botpy.Intents.default()
-```
+```
#### 参数列表
From eb29e12a6a17899b1c61c940b1fc2bab9a98406a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E5=BF=B5=E5=90=8C=E5=AD=A6?= <2660422452@qq.com>
Date: Fri, 24 Jun 2022 20:55:58 +0800
Subject: [PATCH 21/21] =?UTF-8?q?feat:=20pythonsdk=E8=A1=A5=E5=85=85?=
=?UTF-8?q?=E8=8E=B7=E5=8F=96=E9=A2=91=E9=81=93=E6=88=90=E5=91=98=E5=88=97?=
=?UTF-8?q?=E8=A1=A8API=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../pythonsdk/api/member/get_guild_members.md | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/docs/develop/pythonsdk/api/member/get_guild_members.md b/docs/develop/pythonsdk/api/member/get_guild_members.md
index 231b17d5..3a334b14 100644
--- a/docs/develop/pythonsdk/api/member/get_guild_members.md
+++ b/docs/develop/pythonsdk/api/member/get_guild_members.md
@@ -7,11 +7,17 @@
## 使用示例
```python
-import qqbot
+import botpy
-token = qqbot.Token({appid}, {token})
-api = qqbot.GuildMemberAPI(token, False)
-members = api.get_guild_members(guild_id, query_params)
+from botpy.message import Message
+
+class MyClient(botpy.Client):
+ async def on_at_message_create(self, message: Message):
+ await self.api.get_guild_members(guild_id="xxxx", after="0", limit=1)
+
+intents = botpy.Intents(public_guild_messages=True)
+client = MyClient(intents=intents)
+client.run(appid={appid}, token={token})
```
## 参数说明