- Published on
【QQ机器人】简易部署教程
- Authors

- Name
- E2hang
- https://info.huajishe.fun/
一、使用条件
QQ机器人是基于QQ自身环境,部署在QQ群聊,QQ频道中,可以主动/被动回复人类的机器人。由于QQ机器人需要随叫随到,这里建议部署在服务器中。
下面是制作QQ机器人所需要的步骤:
(一)申请QQ机器人:
进入 q.qq.com,输入自己的信息,创建一个新的机器人。
- 沙盒配置 取决于你的使用环境,如果希望在QQ群聊中使用,请务必成为群主/管理员才可以启动沙盒环境;如希望在频道中使用请选择相应的频道。本教程主要面向在群聊中开发QQ机器人。
- 开发设置 这里最重要的是 AppID 和 AppSecret,分别填入ID和Secret从而让服务器绑定此机器人。下方IP白名单则需要输入你服务器(无论本地/网络)的ip地址。
- 指令设置 如需要参数传递,可以选择指令设置,当然本教程不包含指令设置,如需要请到QQ机器人官方Github的文档中查看:tencent-connect/botpy、bot.q.qq.com/wiki
(二)配置环境
- 选择合适的语言 QQ机器人提供了三种可用于编写机器人的语言,这里推荐使用 python。
- 服务端配置环境(本文是在windows环境下、其它系统如linux也一致)
- (1) 安装python——可以使用搜索引擎,这里不再叙述
- (2) 设置环境变量,去cmd中测试python,如果没有报错则安装成功
- (3) 安装官方的botpy包:
pip install qq-botpy - (4) 在有需要的地方使用
import botpy
- 配置 config.yaml example中给出了原版的
config.example.yaml,若使用请把名称变为config.yaml,其中需要配置(重点)的是机器人ID以及Secret(自动分配的密码)。
(三)机器人代码
这是官方给出的机器人被@后所做出的反应示例:
# -*- coding: utf-8 -*-
import os
import botpy
from botpy import logging, BotAPI
from botpy.ext.command_util import Commands
from botpy.message import Message
from botpy.ext.cog_yaml import read
test_config = read(os.path.join(os.path.dirname(__file__), "config.yaml"))
_log = logging.get_logger()
@Commands("你好", "hello")
async def hello(api: BotAPI, message: Message, params=None):
_log.info(params)
# 第一种用reply发送消息
await message.reply(content=params)
# 第二种用api.post_message发送消息
await api.post_message(channel_id=message.channel_id, content=params, msg_id=message.id)
return True
@Commands("晚安")
async def good_night(api: BotAPI, message: Message, params=None):
_log.info(params)
# 第一种用reply发送消息
await message.reply(content=params)
# 第二种用api.post_message发送消息
await api.post_message(channel_id=message.channel_id, content=params, msg_id=message.id)
return True
class MyClient(botpy.Client):
async def on_at_message_create(self, message: Message):
# 注册指令handler
handlers = [
hello,
good_night,
]
for handler in handlers:
if await handler(api=self.api, message=message):
return
if __name__ == "__main__":
# 通过kwargs,设置需要监听的事件通道
intents = botpy.Intents(public_guild_messages=True)
client = MyClient(intents=intents)
client.run(appid=test_config["appid"], secret=test_config["secret"])
被 @ 后的核心响应逻辑:
async def on_at_message_create(self, message: Message):
_log.info(message.author.avatar)
if "sleep" in message.content:
await asyncio.sleep(10)
_log.info(message.author.username)
await message.reply(content=f"机器人{self.robot.name}收到你的@消息了: {message.content}")
这里给出了 {message.content} 以及 f"",有需要的开发者可以根据相关代码开发自己需要的功能。
(四)扩展功能
- 调整 botpy 中 client.py, api.py 在安装目录(Python/Lib)中找到已安装的botpy文件夹,可以根据自己的需求修改api.py,client.py,具体的修改方法在文档中都有提到,api.py中也有相关的注释。
- 增加插件 与正常的python一样,通过
pip install以及安装包可以实现python的扩展功能。
(五)需要关注的点
- 注意是在QQ频道还是在QQ群聊中使用,群聊请下载demo中的
_group_文件。 - 关于上传文件:需要富媒体支持,并且:
- ①不支持过大的图片上传
- ②不支持文件(如pdf)上传
- 建议通过命令行部署,在性能不佳的服务器上有崩溃的概率。