2023年最新 Nonobot2 制作QQ聊天机器人详细教程(每周更新中)

发布于:2023-09-14 ⋅ 阅读:(159) ⋅ 点赞:(0)

协议端 go-cqhttp 安装

使用 mirai 以及 MiraiGo 开发的 cqhttp golang 原生实现,并在 cqhttp 原版 的基础上做了部分修改和拓展。

测试版下载地址:https://github.com/Mrs4s/go-cqhttp/releases

正式版下载地址:https://github.com/Mrs4s/go-cqhttp/releases

例如:宝塔 centos 系统服务器 Linux 版本

go-cqhttp_linux_amd64.tar.gz	4.8 MB	Jun 27

window 版本 zip 解压
在这里插入图片描述
go-cqhttp 接口

在 PowerShell 窗口进行运行:shift + 右击 进入 PowerShell 窗口运行

Windows 标准启动方法
双击 go-cqhttp_*.exe,根据提示生成运行脚本
双击运行脚本
PS C:\Users\Administrator\Desktop\go-cqhttp_windows_amd64> .\go-cqhttp.exe
未找到配置文件,正在为您生成配置文件中!
请选择你需要的通信方式:
> 0: HTTP通信
> 1: 云函数服务
> 2: 正向 Websocket 通信
> 3: 反向 Websocket 通信
请输入你需要的编号(0-9),可输入多个,同一编号也可输入多个(: 233)
您的选择是: 3
默认配置文件已生成,请修改 config.yml 后重新启动!

在当前目录生成 config.yml 配置文件

HTTP API 反向 HTTP POST 正向 WebSocket 反向 WebSocket

go-cqhttp 性能

在关闭数据库的情况下, 加载 25 个好友 128 个群运行 24 小时后内存使用为 10MB 左右. 开启数据库后内存使用将根据消息量增加 10-20MB , 如果系统内存小于 128M 建议关闭数据库使用。

go-cqhttp 交互

在 go-cqhttp 成功运行之后, 你就可以通过自己写的程序, 使用 HTTP 或者 WebSocket 与 go-cqhttp 进行通讯, 实现 QQ 机器人. 在这个过程中, 你的程序只需要把一些数据发送给 go-cqhttp, 关于 QQ 的通信协议, go-cqhttp 会帮你解决.

你也可以将 go-cqhttp 部署在你的服务器上, 并加上验证, 这样, 你就可以在各个地方使用自己的程序连接到远程的 go-cqhttp.

想要与 go-cqhttp 进行通信, 你可以使用专门为 go-cqhttp 开发的开源 SDK, 这是最好的选择. 不过你也可以直接使用实现 OneBot 协议的开源 SDK, 只是他们可能并不包含 go-cqhttp 中的某些 API 或者消息类型, 这或许会影响你的使用体验。

跳过启动 5s 延时

使用命令行参数 faststart即可跳过启动的五秒钟延时,例如

# Windows
.\go-cqhttp.exe -faststart

go-cqhttp config.yml 配置文件

CQ Code CQ 码

CQ 码是指 CQ 中特殊消息类型的文本格式, 这是它的基本语法:

CQ 码文档地址:https://docs.go-cqhttp.org/cqcode

[CQ:类型,参数=,参数=]

在 QQ 中, 一个消息由多个部分构成, 例如一段文本, 一个图片, at 某人的一个部分. CQ 中定义了与这些消息相符的 CQ 码, 以方便用户使用.

ffmpeg 安装

安装 ffmpeg

为了支持任意格式的语音发送, 你需要安装 ffmpeg

安装 nonebot 环境

NoneBot2 是一个现代、跨平台、可扩展的 Python 聊天机器人框架(下称 NoneBot),它基于 Python 的类型注解和异步优先特性(兼容同步),能够为你的需求实现提供便捷灵活的支持。同时,NoneBot 拥有大量的开发者为其开发插件,用户无需编写任何代码,仅需完成环境配置及插件安装,就可以正常使用 NoneBot。
在这里插入图片描述

脚手架安装(官方推荐)

pip install nb-cli

NoneBot 基于 Python asyncio 编写,并在异步机制的基础上进行了一定程度的同步函数兼容。

插件系统

插件系统是 NoneBot 的核心,通过它可以实现机器人的模块化以及功能扩展,便于维护和管理。

nonebot 撤回消息

在 NoneBot 中,你可以使用 bot.finish() 方法来撤回发送的消息。该方法可以用在任何消息处理函数中。以下是一个示例代码:

from nonebot import on_command, CommandSession, get_bot

@on_command('撤回', aliases=['recall'])
async def recall_message(session: CommandSession):
    # 获取 bot 对象
    bot = get_bot()

    # 获取原始消息
    message = session.ctx['message']

    # 撤回消息
    await bot.delete_msg(message['message_id'])

在上述代码中,我们定义了一个名为 recall_message 的命令处理函数,并将其绑定到了 撤回 和 recall 这两个命令别名。当用户发送这两个命令时,NoneBot 将会调用这个处理函数。

在函数中,我们通过 get_bot() 方法获取了 bot 对象,在这个对象上调用 delete_msg() 方法来撤回消息。message['message_id'] 是原始消息的消息 ID,通过这个 ID 来指定要撤回的消息。

需要注意的是,撤回消息的功能需要满足一些条件,比如消息必须是机器人自己发送的,并且距离发送时间不能超过一定的时限。具体的限制条件可以参考对应的聊天机器人平台文档。

APScheduler 定时任务

APScheduler (Advanced Python Scheduler) 是一个 Python 第三方库,其强大的定时任务功能被广泛应用于各个场景。在 NoneBot 中,定时任务作为一个额外功能,依赖于基于 APScheduler 开发的 nonebot-plugin-apscheduler 插件进行支持。

安装插件

nb plugin install nonebot-plugin-apscheduler

使用插件

nonebot-plugin-apscheduler 本质上是对 APScheduler 进行了封装以适用于 NoneBot 开发,因此其使用方式与 APScheduler 本身并无显著区别。

调度器

由于 nonebot_plugin_apscheduler 作为插件,因此需要在使用前对其进行加载并导入其中的 scheduler 调度器来创建定时任务。

from nonebot import require

require("nonebot_plugin_apscheduler")

from nonebot_plugin_apscheduler import scheduler

@scheduler.scheduled_job("cron", hour=18, minute=35, second=40)
async def timer_task():
    # 获取 bot 信息
    (bot, ) = nonebot.get_bots().values()
    msg = f"测试消息"
    await bot.send_group_msg(group_id=642122283, message=msg)

读取 env 环境变量

nonebot 项目目录有 .env 文件配置环境变量

ENVIRONMENT=dev
APSCHEDULER_AUTOSTART=true
APSCHEDULER_CONFIG={"apscheduler.timezone": "Asia/Shanghai"}

加载环境变量

import os
from dotenv import load_dotenv
load_dotenv()
os.getenv("APSCHEDULER_AUTOSTART")

读取 sender 群昵称

通过 event 事件对象进行读取 sender 发送者信息

@chat.handle()
async def listen_chat(bot: Bot, event: GroupMessageEvent, state: T_State):
    sender = event.sender
    print(sender.nickname)
    await bot.call_api("send_group_message", group_id=642122283, message="测试信息")

sender:user_id=1620444902 nickname=‘唤醒手腕’ sex=‘unknown’ age=0 card=‘’ area=‘’ level=‘’ role=‘member’ title=‘’

发送 img 图片资源

待更新 ···


网站公告

今日签到

点亮在社区的每一天
去签到