知方号

知方号

手把手QQ机器人制作教程,根据官方接口进行开发,基于Python语言制作的详细教程(更新中)

手把手QQ机器人制作教程,根据官方接口进行开发,基于Python语言制作的详细教程(更新中)

第 1 课、注册 QQ 开放平台账户

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 课、腾讯云官方案例:天气

代码说明

上面

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。