Published on

【QQ机器人】简易部署教程

Authors

一、使用条件

QQ机器人是基于QQ自身环境,部署在QQ群聊,QQ频道中,可以主动/被动回复人类的机器人。由于QQ机器人需要随叫随到,这里建议部署在服务器中。

下面是制作QQ机器人所需要的步骤:

(一)申请QQ机器人:

进入 q.qq.com,输入自己的信息,创建一个新的机器人。

  1. 沙盒配置 取决于你的使用环境,如果希望在QQ群聊中使用,请务必成为群主/管理员才可以启动沙盒环境;如希望在频道中使用请选择相应的频道。本教程主要面向在群聊中开发QQ机器人。
  2. 开发设置 这里最重要的是 AppIDAppSecret,分别填入ID和Secret从而让服务器绑定此机器人。下方IP白名单则需要输入你服务器(无论本地/网络)的ip地址。
  3. 指令设置 如需要参数传递,可以选择指令设置,当然本教程不包含指令设置,如需要请到QQ机器人官方Github的文档中查看:tencent-connect/botpybot.q.qq.com/wiki

(二)配置环境

  1. 选择合适的语言 QQ机器人提供了三种可用于编写机器人的语言,这里推荐使用 python
  2. 服务端配置环境(本文是在windows环境下、其它系统如linux也一致)
    • (1) 安装python——可以使用搜索引擎,这里不再叙述
    • (2) 设置环境变量,去cmd中测试python,如果没有报错则安装成功
    • (3) 安装官方的botpy包:pip install qq-botpy
    • (4) 在有需要的地方使用 import botpy
  3. 配置 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"",有需要的开发者可以根据相关代码开发自己需要的功能。

(四)扩展功能

  1. 调整 botpy 中 client.py, api.py 在安装目录(Python/Lib)中找到已安装的botpy文件夹,可以根据自己的需求修改api.py,client.py,具体的修改方法在文档中都有提到,api.py中也有相关的注释。
  2. 增加插件 与正常的python一样,通过 pip install 以及安装包可以实现python的扩展功能。

(五)需要关注的点

  1. 注意是在QQ频道还是在QQ群聊中使用,群聊请下载demo中的 _group_ 文件。
  2. 关于上传文件:需要富媒体支持,并且:
  • ①不支持过大的图片上传
  • ②不支持文件(如pdf)上传
  1. 建议通过命令行部署,在性能不佳的服务器上有崩溃的概率。