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

news2024/12/22 19:25:51

协议端 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 图片资源

待更新 ···

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1010334.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

广义表基础知识

广义表 (又称列表 Lists)是 n > 0个元素 . a0,a1....an-1的有限序列,其中每一个 ai 或者是原子,或者是一个广义表 广义表通常记作: LS (a1,a2,.....,an), LS为表名,n为表的长度&…

使用 LoRA 和 QLoRA 对大型语言模型进行参数高效的微调

概述 随着我们深入研究参数高效微调 (PEFT) 的世界,了解这种变革性方法背后的驱动力和方法变得至关重要。在本文中,我们将探讨 PEFT 方法如何优化大型语言模型 (LLM) 对特定任务的适应。我们将揭开 PEFT 的优点和缺点,深入研究 PEFT 技术的复杂类别,并破译两种卓越技术的内…

SpingMyc项目如何搭建

目录 一、创建项目 二、环境搭建 (1)引入相关依赖 (2)在web.xml中配置前端控制器DispatcherServlet (3)编写SpringMVC核心配置文件springmvc.xml 三、测试是否成功 (1)编写控…

Java反射机制简单入门

标题 反射能干嘛获取Class对象的三种方式下面开始重点,需要掌握获取类的构造器并进行操作获取成员变量获取成员方法 这块建议先听第一个视频入门,第二个视频深入了解 视频学习地址1 视频学习地址1 正射:知道某个类,类的地址,通过…

在Linux和Windows上安装分布式事务seata

1 前言 官网地址:https://seata.io/ 源码地址:https://github.com/seata/seata 官网手册:https://seata.io/zh-cn/docs/ops/deploy-guide-beginner.html Seata,一款开源的分布式事务解决方案,致力于提供高性能和简…

软件设计模式系列之五——建造者模式

1 模式的定义 建造者模式是一种对象创建型设计模式,它将一个复杂对象的构建过程与其表示分离。这意味着你可以使用相同的构建过程来创建不同类型的对象,而不必关心每个对象的内部细节。这种模式适用于构建具有复杂配置的对象,例如具有多个可…

查看selenium具体版本的方法

1、 查看自己selenium版本 方法一: 本机进入CMD 在cmd窗口中输入 pip show selenium如果是在Pycharm中直接安装的selenium。则有可能会有如下提示。那么请尝试方法二。 方法二: 在pycharm中查看selenium版本 步骤一:在pycharm里打开命…

SpringMVC系列(五)之JSR303和拦截器

目录 一. JSR303 1.1 JSR303是什么 1.2 为什么要使用JSR303 1.3 JSR303常用注解 1.4 JSR303快速入门 1. 导入相关pom依赖 2. 配置校验规则 3. 入门示例 二. SpringMVC的拦截器 2.1 什么是拦截器 2.2 拦截器与过滤器的区别 2.3 拦截器工作原理 2.4 入门示例 1. 创建…

Gin路由中间件详解

什么是中间件 Gin 中的中间件必须是一个 gin.HandlerFunc 类型,配置路由的时候可以传递多个 func 回调函 数, 最后一个 func 回调函数前面触发的方法 都可以称为中间件。 中间件操作演示 方法一: 直接写在func,回调函数内 r.GET("/middle",func(ctx *gin.Cont…

Pytorch中张量矩阵乘法函数(mm, bmm, matmul)使用说明,含高维张量实例及运行结果

Pytorch中张量矩阵乘法函数使用说明 1 torch.mm() 函数1.1 torch.mm() 函数定义及参数1.2 torch.bmm() 官方示例 2 torch.bmm() 函数2.1 torch.bmm() 函数定义及参数2.2 torch.bmm() 官方示例 3 torch.matmul() 函数3.1 torch.matmul() 函数定义及参数3.2 torch.matmul() 规则约…

黑马头条 热点文章实时计算、kafkaStream

热点文章-实时计算 1 今日内容 1.1 定时计算与实时计算 1.2 今日内容 kafkaStream 什么是流式计算kafkaStream概述kafkaStream入门案例Springboot集成kafkaStream 实时计算 用户行为发送消息kafkaStream聚合处理消息更新文章行为数量替换热点文章数据 2 实时流式计算 2…

【C++】哈希思想的应用——位图、布隆过滤器和哈希切割

前言: 前面我们学习了unordered_map和unordered_set和哈希表哈希桶等,并且我们自己用哈希桶封装了unordered_map和unordered_set。我们知道哈希的查找效率非常高为O(1),本章我们将延续哈希的思想,共同学习哈希的应用。 目录 &am…

sh脚本工具集锦(文件批量操作、音视频相关)持续更新

1 文件夹目录下所有图片转换成视频文件 pic_2_videos.sh: #!/bin/bash # 放到图片文件夹目录下,把所有jpeg图片推成视频文件 # sh pic_2_videos.sh 0 # 0: pad to 1920*1080 ; 1 or other no pad pad_1920$1if [[ $pad_1920 0 ]] thenfilesls|grep jp…

【Flink】 FlinkCDC读取Mysql( DataStream 方式)(带完整源码,直接可使用)

简介: FlinkCDC读取Mysql数据源,程序中使用了自定义反序列化器,完整的Flink结构,开箱即用。 本工程提供 1、项目源码及详细注释,简单修改即可用在实际生产代码 2、成功编译截图 3、自己编译过程中可能出现的问题 4、mysql建表语句及测试数据 5、修复FlinkCDC读取Mys…

【C++】匿名对象 ① ( 匿名对象引入 | 匿名对象简介 | 匿名对象概念 | 匿名对象作用域 - 对象创建与销毁 )

文章目录 一、匿名对象引入二、匿名对象简介1、匿名对象概念2、匿名对象作用域 - 对象创建与销毁3、代码示例 - 创建并使用匿名对象 一、匿名对象引入 匿名对象引入 : 在上一篇博客 【C】拷贝构造函数调用时机 ② ( 对象值作为函数参数 | 对象值作为函数返回值 ) 中 , 讲到了 如…

【Java基础】- RMI原理和使用详解

【Java基础】- RMI原理和使用详解 文章目录 【Java基础】- RMI原理和使用详解一、什么RMI二、RMI原理2.1 工作原理图2.2 工作原理 三、RMI远程调用步骤3.1 RMI远程调用运行流程图3.2 RMI 远程调用步骤 四、JAVA RMI简单实现4.1 如何实现一个RMI程序4.2 JAVA实现RMI程序 一、什么…

小程序中如何查看指定会员的所有订单?

在小程序中,查看指定会员的所有订单可以通过如下方式实现。 1. 找到指定的会员卡。在管理员后台->会员管理处,找到需要查看订单记录的会员卡。也支持对会员卡按卡号、手机号和等级进行搜索。 2. 查看会员卡详情。点击查看详情进入该会员卡的详情页面…

GTS 中testPersistentProcessMemory fail 详解

0. 前言 GTS 在测试 case armeabi-v7a GtsMemoryTestCases 的时候出现下面异常,本文总结一下。 com.google.android.memory.gts.MemoryTest#testPersistentProcessMemory 1. error log 09-14 09:41:40.523 10182 13340 13359 E TestRunner: failed: testPersiste…

网攻西北工业大学的美国安局人员真实身份锁定!

14日,《环球时报》从国家计算机病毒应急处理中心和360获悉,在侦办西北工业大学网络攻击案过程中,我方成功提取了名为“二次约会”(Second Date)“间谍”软件的多个样本。在多国业内伙伴通力合作下,现已成功…

【ELK】日志分析系统概述及部署

目录 一、ELK概述 1、ELK是什么? 2、ELK的组成部分 2.1 ElasticSearch (1)分片和副本 (2)es和传统数据库的区别 2.2 Kiabana 2.3 Logstash (1)Log Stash主要组件 2.4 可添加的其它组件 …