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}) ``` ## 参数说明