QQ开放平台官方地址:https://q.qq.com/#/app/bot
QQ开放平台包含:QQ机器人、QQ小程序、QQ小游戏,我们这边选择QQ机器人。
机器人类型:设置私域机器人或者公域机器人,当然公域机器人对于服务器的要求过高,我们这边选择私域机器人进行开发。
特别注意在选择沙箱频道的时候,你必须提前创建个测试频道,必须<20人的频道。 例如我这边创建了迷你小唤QQ机器人的测试频道。
创建完成后就能够进入你刚刚创建QQ机器人的后台,展示如下所示:
然后点击发布流程中的代码开发即可查看API文档,进行编写我们服务器端的程序代码。
点击开发设置能够查看 BotAppID、机器人令牌、机器人密钥,后续服务器端开发需要。
第 2 课、QQ 频道机器人接口说明QQ频道机器人提供两类接口:
第一种:基于 REST 风格的 OPENAPI。
传统风格 描述形式:http://localhost/user/getById?id=1Rest 风格 描述形式:http://localhost/user/1显而易见,Rest风格优点:隐藏资源的访问行为,无法通过地址得知对资源是哪种操作;简化书写。
第二种:基于 WebSocket 提供实时事件通知的事件中心。
这种的话,和野生的nonebot框架采用的类似,都是基于协议端与服务器端的长连接模式。
博客推荐:Python基于cq-http协议端,使用nonebot2框架制作属于自己的智能机器人
第 3 课、SDK 开发基础库安装QQ 小程序的开发 SDK 官方提供了三种语言,分别是:GO语言、JS语言、Python语言,分别对应如下 3 基础库:
golang: https://github.com/tencent-connect/botgo(opens new window)nodejs: https://github.com/tencent-connect/bot-node-sdk(opens new window)python: https://github.com/tencent-connect/botpy我们选择 Python 语言进行开发:
GITHUB:https://github.com/tencent-connect/botpy
安装 qq-botpy 第三方库
pip install qq-botpy使用方法:需要使用的地方import botpy
import botpy兼容提示:原机器人的老版本qq-bot仍然可以使用,但新接口的支持上会逐渐暂停,此次升级不会影响线上使用的机器人
第 4 课、botpy 快速入门案例测试版本介绍:
首先介绍下版本问题,老版本是 qq-bot,新版本是 botpy,当然随着新版本迭代升级,老版本将会陆续的停用相关api,但是腾讯云的案例是 基于 老版本 qq-bot。
第 ① 步:通过继承实现 bot.Client,实现自己的机器人 Client
第 ② 步:实现机器人相关事件的处理方法,如 on_at_message_create, 详细的事件监听列表,请参考 事件监听.md
如下,是定义机器人被@的后自动回复:
import botpyfrom botpy.message import Messageclass MyClient(botpy.Client): async def on_at_message_create(self, message: Message): await message.reply(content=f"机器人{self.robot.name}收到你的@消息了: {message.content}")注意:每个事件会下发具体的数据对象,如message相关事件是message.Message的对象 (部分事件透传了后台数据,暂未实现对象缓存)
第 ③ 步:设置机器人需要监听的事件通道,并启动 client
import botpyfrom botpy.message import Messageclass MyClient(botpy.Client): async def on_at_message_create(self, message: Message): await self.api.post_message(channel_id=message.channel_id, content="content")intents = botpy.Intents(public_guild_messages=True) client = MyClient(intents=intents)client.run(appid="12345", token="xxxx")也可以通过预设置的类型,设置需要监听的事件通道
import botpyintents = botpy.Intents.none()intents.public_guild_messages=True 第 5 课、腾讯云官方模拟实验环境搭建
安装Python3,推荐使用Python3,实验环境已经预安装,可执行下面命令,进行Python版本验证。
python3 --version安装机器人SDK
在终端执行下面命令安装机器人PythonSDK:
pip install qq-bot同时,由于需要读取 yaml 文件的内容,我们也需要安装 pyyaml
pip install pyyaml创建项目文件
创建一个 demo 项目文件夹
mkdir /home/demo && cd /home/demo在 demo 文件夹下创建名为 config.yaml 的配置文件
touch config.yaml接着,在 demo 文件夹下创建一个名为 robot.py 的文件:
touch robot.py导入Token 和 AppID
请点击打开 config.yaml 文件,并填入自己机器人的 AppID 和 Token ,注意保存:
token: appid: "自己QQ小程序AppID" token: "自己QQ小程序token"导入依赖包
请点击打开 robot.py ,并在文件中复制导入相关依赖包的代码,注意保存:
import asyncioimport jsonimport os.pathimport threadingfrom typing import Dict, Listimport aiohttpimport qqbotfrom qqbot.core.util.yaml_util import YamlUtilfrom qqbot.model.message import MessageEmbed, MessageEmbedField, MessageEmbedThumbnail, CreateDirectMessageRequest, MessageArk, MessageArkKv, MessageArkObj, MessageArkObjKvtest_config = YamlUtil.read(os.path.join(os.path.dirname(__file__), "config.yaml"))设置机器人自动回复普通消息
在 robot.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) # 发送消息告知用户 message_to_send = qqbot.MessageSendRequest(content="你好", msg_id=message.id) await msg_api.post_message(message.channel_id, message_to_send)# async的异步接口的使用示例if __name__ == "__main__": 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)代码运行
在终端命令行输入并执行下列命令,运行机器人
python3 /home/demo/robot.py这时在频道内 @机器人 hello 指令就可以收到回复了
第 6 课、腾讯云官方案例:天气代码说明
上面