使用Nonebot编写QQ机器人

使用 NoneBot 这个工具,来编写 QQ 机器人。

安装基础软件

一、安装 NoneBot 库

直接使用 pip 安装即可

pip install nonebot

二、安装酷Q 软件和 HTTP API 插件

酷Q 软件可以直接到官网下载,https://cqp.cc/b/news,或者可以到网盘下载,链接: https://pan.baidu.com/s/19l4IdTLi9__BhkboOcYP-g 提取码: b6er
HTTP API 插件,同样可以到官网下载,https://cqhttp.cc/docs/4.8/,如果下载有问题,可以到这个网盘下载,链接: https://pan.baidu.com/s/1h4oROjCu88HSbDloKSUGSw 提取码: cccf

下载好酷Q 软件后,解压缩,目录如下图:

首先将下载好的 HTTP API 插件放到 app 目录下,然后双击 CQA.exe 文件,输入机器人对应的 QQ 号和密码,登陆之后,在应用管理中,启动 HTTP API 插件。

三、配置 HTTP API 插件

进入酷Q 的 data/app/io.github.richardchien.coolqhttpapi/config/ 目录,有一个.json 的文件,user-id 为刚刚登陆的 QQ 号。修改这个文件的如下配置

{
    "ws_reverse_api_url": "ws://127.0.0.1:8080/ws/api/",
    "ws_reverse_event_url": "ws://127.0.0.1:8080/ws/event/",
    "use_ws_reverse": true
}

开始历史性的对话

先给出 nonebot 的官方文档地址:https://none.rclab.tk/guide/getting-started.html,感兴趣的同学也可以去官网查看。
下面我们先跑一下官网上的基础例子

import nonebot


if __name__ == "__main__":
    nonebot.init()
    nonebot.load_builtin_plugins()
    nonebot.run(host='127.0.0.1', port=8080)

运行该程序,我们可以在控制台看到如下日志:

[2019-04-05 19:31:18,281 nonebot] INFO: Succeeded to import "nonebot.plugins.base"
[2019-04-05 19:31:18,281 nonebot] INFO: Running on 127.0.0.1:8080
Running on https://127.0.0.1:8080 (CTRL + C to quit)
[2019-04-05 19:31:18,282] ASGI Framework Lifespan error, continuing without Lifespan support
[2019-04-05 19:31:18,283 nonebot] INFO: Scheduler started
[2019-04-05 19:31:20,490] 127.0.0.1:6568 GET /ws/api/ 1.1 101 - 2987
[2019-04-05 19:31:20,493] 127.0.0.1:6569 GET /ws/event/ 1.1 101 - 1154

可以看到现在程序运行在了本地的 8080 端口,而且本地的 6568 和 6569 端口也连接到了本服务,就是我们在 HTTP API 插件的配置文件中做的配置

  "ws_reverse_api_url": "ws://127.0.0.1:8080/ws/api/",
    "ws_reverse_event_url": "ws://127.0.0.1:8080/ws/event/",

现在我们向这个机器人账号发送下消息

/echo 你好

在控制台可以看到日志如下:

[2019-04-05 19:37:59,614 nonebot] INFO: Self: 3412355667, Message 56 from 736552883: /echo 你好
[2019-04-05 19:37:59,614 nonebot] DEBUG: Parsing command: /echo 你好
[2019-04-05 19:37:59,614 nonebot] DEBUG: Matched command start: /
[2019-04-05 19:37:59,614 nonebot] DEBUG: Split command name: ('echo',)
[2019-04-05 19:37:59,614 nonebot] DEBUG: Command ('echo',) found, function: <function echo at 0x040DB2B8>
[2019-04-05 19:37:59,614 nonebot] DEBUG: New session of command ('echo',) created
[2019-04-05 19:37:59,615 nonebot] DEBUG: Running command ('echo',)
[2019-04-05 19:37:59,738 nonebot] DEBUG: Session of command ('echo',) finished
[2019-04-05 19:37:59,739 nonebot] INFO: Message 56 is handled as a command

同时我们的机器人账号也自动回复了“你好”给我们。
真实“历史性”的时刻!!

增强机器人功能之配置文件

增加 config.py 文件,输入内容如下:

from nonebot.default_config import *


SUPERUSERS = {123456}
COMMAND_START = {'', '/', '!', '/', '!'}
HOST = '0.0.0.0'
PORT = 8080

SUPERUSERS:是配置一个超级 QQ 用户,我们可以为这个超级用户配置一些特殊的操作;

COMMAND_START:是配置命令起始字符,我们增加了空字符串,所以不需要任何起始字符也能调用命令;

另外就是配置了 host 和 端口 port。

然后我们就可以修改原来的文件为:

import nonebot
import config


if __name__ == "__main__":
    nonebot.init(config)
    nonebot.load_builtin_plugins()
    nonebot.run()

下面我们就可以编写自己的命令了。

增强机器人功能之编写命令

这里要注意的是,所有的语法都是 asyncio 异步编程,需要了解简介的,可以查看这里。

获取每日一句

我们使用金山词霸的 API 获取每日一句内容,http://open.iciba.com/dsapi/

def get_content():
    url = 'http://open.iciba.com/dsapi/'
    res = requests.get(url)
    content_e = res.json()['content']
    content_c = res.json()['note']
    return [content_c, content_e]

这样就获取到一个”每日一句“的列表了。

编写自己的插件

创建一个 plugins 文件夹,在里面创建 daily.py 文件,编写如下代码

 from nonebot import on_command, CommandSession
 from utils import getdata
 
 
 @on_command('daily', aliases=('每日一句',))
 async def daily(session: CommandSession):
     daily_send = await get_daily()
     await session.send(daily_send[0])
     await session.send(daily_send[1])


async def get_daily():
    daily_sentence = getdata.get_content()
    return daily_sentence

使用 on_command 装饰器声明一个命令处理器,声明两个命令,分别是 ”daily“ 和 ”每日一句“,当用户向本机器人发送这两个命令时,就会自动调用 daily 这个函数,并且发送对应的消息。

而 get_daily 函数,就是调用金山词霸的 API 函数,来获取内容。

最后修改主文件内容,加载自己编写的插件

import nonebot
import config
from os import path


if __name__ == "__main__":
    nonebot.init(config)
    nonebot.load_plugins(path.join(path.dirname(__file__), 'plugins'), 'plugins')
    nonebot.run()

接下来我们测试一下这个简单的机器人效果如何

看起来效果还不错,哈哈哈,以后再慢慢增加更加强大的功能吧。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

理解接雨水算法

一、IDEA注释显示图片 在做题时&#xff0c;需要对照这图片&#xff0c;才能更好的梳理思路。 首先&#xff0c;注释里添加<img/>标签 之后&#xff0c;将鼠标光标放置在需要以阅读模式预览注释的地方&#xff0c;然后按快捷键CtrlAltQ即可 二、接雨水算法 先看接雨水…

nRF 5340环境搭建和工具下载(采用vscode最新搭建教程)

1. nRF 5340环境搭建和工具下载 1. 1 软件安装 nRF Connect for Desktop https://www.nordicsemi.com/Products/Development-tools/nrf-connect-for-desktop nRF Command Line Tools https://www.nordicsemi.com/Products/Development-tools/nrf-command-line-tools/downl…

使用Flask快速部署PyTorch模型

对于数据科学项目来说&#xff0c;我们一直都很关注模型的训练和表现&#xff0c;但是在实际工作中如何启动和运行我们的模型是模型上线的最后一步也是最重要的工作。 今天我将通过一个简单的案例&#xff1a;部署一个PyTorch图像分类模型&#xff0c;介绍这个最重要的步骤。 …

第三代量子计算机交付,中国芯片开辟新道路,光刻机难挡中国芯

日前安徽本源量子宣布第三代超导量子计算系统正式上线&#xff0c;这是中国最先进的量子计算机&#xff0c;计算量子比特已达到72个&#xff0c;在全球已居于较为领先的水平&#xff0c;这对于中国芯片在原来的硅基芯片受到光刻机阻碍无疑是巨大的鼓舞。 据悉本源量子的第一代、…

一个小巧、快速、轻量级的 .NET NoSQL 嵌入式数据库

前言 今天给大家分享一个小巧、快速、轻量级的 .NET NoSQL 嵌入式数据库&#xff1a;LiteDB。本篇文章主要是介绍LiteDB和在.NET中如何使用。 LiteDB介绍 LiteDB 是一个小巧、快速和轻量级的 .NET NoSQL 嵌入式数据库。 无服务器的 NoSQL 文档存储简单的 API&#xff0c;类似…

【研究僧毕业总结】第1024个创作日

目录 前言1. 机缘2. 收获3. 憧憬 前言 收到这封来信&#xff0c;代表从创作至今刚好满足1024天 1024&#xff0c;程序员的记忆 1. 机缘 从学生到社会&#xff0c;都在需求一个记录笔记的软件&#xff0c;而作为程序员&#xff0c;CSDN可云同步又可直接在云平台上看到 选择了…

高性价比蓝牙耳机有哪些?五款热门高性价比开放式蓝牙耳机推荐

想要一款音质超赞、佩戴舒适、价格又亲民的高性价比蓝牙耳机吗&#xff0c;在这那可就找对地方了&#xff0c;开放式蓝牙耳机就是那种让你在听音乐的同时&#xff0c;还能听到周围环境音的耳机&#xff0c;这种设计让你的听音体验更加舒适&#xff0c;那么哪款开放式蓝牙耳机最…

一款上传图片压缩工具及压缩图片的时机说明

某些图片需作下压缩处理&#xff0c;以便某些页面图片列表使用压缩图&#xff0c;从而提高页面图片的加载速度,图片压缩的时机可选在上传图片的时候&#xff08;新增时&#xff09;或者读取图片的时候。&#xff08;对已有图片作压缩&#xff0c;历史数据&#xff09;。访问图片…

Java--业务场景:获取请求的ip属地信息

文章目录 前言步骤在pom文件中引入下列依赖IpUtil工具类在Controller层编写接口&#xff0c;获取请求的IP属地测试接口 IpInfo类中的方法 前言 很多时候&#xff0c;项目里需要展示用户的IP属地信息&#xff0c;所以这篇文章就记录一下如何在Java Spring boot项目里获取请求的…

灵活使用Redis高可用

1 Redis高可用 1.1 Redis的高可用方式 主从复制&#xff1a; 主从复制时高可用Redis的基础&#xff0c;哨兵和集群都是在主从复制的基础上实现高可用。主从复制主要实现了数据的多机备份&#xff0c;以及对于读操作的负载均衡和简单的故障恢复。缺陷&#xff1a;复制恢复无法…

回首2023,厉兵秣马,启航2024

目录 回首风波的20232023&#xff0c;感恩相遇暂停发文发文狂潮感恩有你备战2024学习之余跆拳道比赛做手工diy 学习心路年初学习伊始心路其后学习后来心路 必须看配图说明 未知的2024Flag 回首风波的2023 2023&#xff0c;感恩相遇 还记得&#xff0c;22年末&#xff0c;23年…

idea右上角浏览器图标没有idea内部浏览器怎么显示

idea右上角浏览器图标没有idea内部浏览器怎么显示 file -> settings -> tools -> web brosers 选择需要的浏览器&#xff0c;勾选上展示到编辑器中 打开上图的Built-in Preview&#xff0c;就会显示idea标志的内部显示了&#xff01;&#xff01;&#xff01;

第二证券:如何判断主力是在洗盘还是出货?

怎样判别主力是在洗盘仍是出货&#xff1f; 1、依据股票成交量判别 在洗盘时&#xff0c;个股的成交量与前几个生意相比较&#xff0c;呈现缩量的状况&#xff0c;而出货其成交量与前几个生意日相比较呈现放量的走势。 2、依据股票筹码分布判别 洗盘首要是将一些散户起浮筹…

面试算法108:单词演变

题目 输入两个长度相同但内容不同的单词&#xff08;beginWord和endWord&#xff09;和一个单词列表&#xff0c;求从beginWord到endWord的演变序列的最短长度&#xff0c;要求每步只能改变单词中的一个字母&#xff0c;并且演变过程中每步得到的单词都必须在给定的单词列表中…

Python 基础(四):序列

目录 简介2 基本使用2.1 索引2.2 切片2.3 相加2.4 相乘2.5 元素是否在序列中2.6 内置函数 简介 Python 中的序列是一块可存放多个值的连续内存空间&#xff0c;所有值按一定顺序排列&#xff0c;每个值所在位置都有一个编号&#xff0c;称其为索引&#xff0c;我们可以通过索引…

DAY2-English Learning

一、积累 1.trunk 案例&#xff1a; i put my luggage in the trunk of the car. 翻译&#xff1a;我把行李放在汽车的后备箱里。 2. solvent 例句&#xff1a;The sovlent is uesd to dissolve the paint. 翻译&#xff1a;溶剂是用来溶解油漆的。 3. 受伤的表达 1.cramp …

【大数据进阶第三阶段之Hue学习笔记】Hue的安装和使用

1、 Hue的安装 1.1 上传解压安装包 Hue的安装支持多种方式&#xff0c;包括rpm包的方式进行安装、tar.gz包的方式进行安装以及cloudera manager的方式来进行安装等&#xff0c;我们这里使用tar.gz包的方式来进行安装 Hue的压缩包的下载地址&#xff1a; http://archive.cloude…

hadoop自动获取时间

1、自动获取前15分钟 substr(from_unixtime(unix_timestamp(concat(substr(20240107100000,1,4),-,substr(20240107100000,5,2),-,substr(20240107100000,7,2), ,substr(20240107100000,9,2),:,substr(20240107100000,11,2),:,00))-15*60,yyyyMMddHHmmss),1) unix_timestam…

儿童护眼灯如何选择?适合儿童的护眼灯十大排行榜

为家里的孩子选择一款合适的护眼台灯&#xff0c;我想对于大多数家长来说&#xff0c;还是非常不容易的&#xff0c;需要综合考虑多个因素&#xff0c;包括色温、亮度与均匀度、无频闪、无眩光、显色指数、安全性和设计风格等。为了保护孩子的眼睛&#xff0c;可以说是费劲心思…

RTK使用步骤

RTK&#xff08;工作电压3.3V&#xff09;使用步骤 基准站&#xff08;蓝牙 WiFi&#xff09; 配置基本都在Web端&#xff0c;但配置USB-C的输入输出还是要到u-center Base Station模式 当开关设置为 Base 时&#xff0c;设备将进入 Base Station 模式。这在设备安装到固定位…