协议端 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 图片资源
待更新 ···