NoneBot集成酷q打造qq机器人

作者 原文传送
littley www.littley.top

简介

NoneBot 是一个基于 酷Q 的 Python 异步 QQ 机器人框架,它会对 QQ 机器人收到的消息进行解析和处理,并以插件化的形式,分发给消息所对应的命令处理器和自然语言处理器,来完成具体的功能。

软件安装

  • 安装 NoneBot 库,NoneBot github地址为:https://github.com/richardchien/nonebot
pip install nonebot
  • 安装酷Q 软件和 HTTP API 插件
    酷Q 软件可以直接到官网下载,https://cqp.cc/t/23253,本教程使用的是小I版
    NoneBot集成酷q打造qq机器人_第1张图片HTTP API 插件下载地址 https://github.com/richardchien/coolq-http-api/releases
    NoneBot集成酷q打造qq机器人_第2张图片首先将下载好的 HTTP API 插件放到 app 目录下,然后双击 CQA.exe 文件,输入机器人对应的 QQ 号和密码,登陆之后,在应用管理中,启动 HTTP API 插件。
    NoneBot集成酷q打造qq机器人_第3张图片三、配置 HTTP API 插件
    进入酷Q 的 data/app/io.github.richardchien.coolqhttpapi/config/ 目录,有一个.json 的文件,user-id 为刚刚登陆的 QQ 号。修改这个文件的如下配置

NoneBot集成酷q打造qq机器人_第4张图片

构建应用程序

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)

运行该程序,我们可以在控制台看到如下日志:
NoneBot集成酷q打造qq机器人_第5张图片

可以看到现在程序运行在了本地的 8080 端口,而且本地的 4081和 4080 端口也连接到了本服务,就是我们在 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/",

现在我们通过另一个qq向酷q登录的qq号发送如下内容:

/echo 你好

附图
NoneBot集成酷q打造qq机器人_第6张图片

控制台内容如下:
NoneBot集成酷q打造qq机器人_第7张图片# 增强机器人功能之配置文件

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

from nonebot.default_config import *


SUPERUSERS = {123456}#1
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()

qq机器人demo之 每日一句

我们使用金山词霸的 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
 2from 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()

接下来我们测试一下这个简单的机器人效果如何
NoneBot集成酷q打造qq机器人_第8张图片

完整代码

bot.py

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()
    #nonebot.run(host='127.0.0.1', port=8080)
  

config.py

#!/usr/bin/env python
# encoding: utf-8
from nonebot.default_config import *


SUPERUSERS = {317xxxxx67}#qq号
COMMAND_START = {'', '/', '!', '/', '!'}
HOST = '0.0.0.0'
PORT = 8080

/plugins/daily

#!/usr/bin/env python
# encoding: utf-8

from nonebot import on_command, CommandSession

import  requests
@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 = get_content()
    return daily_sentence

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]

文章参照: https://cloud.tencent.com/developer/article/1465242

作者 原文传送
littley www.littley.top

你可能感兴趣的:(python)