前言

前面已经研究过PythonC++的酷Q应用开发流程了,其中慕晓飞大大的SDK虽然前期配置需要一定经验,但配置好后上手很快很简单的,但这个SDK不支持并发是最大的硬伤,限制了其使用范围。而C++的SDK无疑写起来过于麻烦,好在该SDK的大神richardchien在C++ SDK的基础上开发出了基于HTTP的API接口,由此衍生出了基于该HTTP API的多种语言开发版本,其中就有同样是该作者基于Quart框架开发的Nonebot,支持异步处理是其最大的特点,但也由于对消息封装的过于深入,使得在入手使用Nonebot带来不小的挑战。

入门

要使用Nonebot得先从HTTP API开始,先根据这篇说明:https://cqhttp.cc/docs/4.12/#/ 完成对HTTP API的成功调用,然后再到我们的Nonebot出场,官方的入门文档写的已经很仔细了:https://nonebot.cqp.moe/guide/installation.html, 走完这篇入门文档,应该很容易就实现了案例中的天气和图灵机器人案例。
接下来来梳理以下Nonebot的编写逻辑,他将消息处理分为on_command,on_natural_language,on_request(其他的暂不清楚)几个类型,command用于处理命令,也是用的最多的类型,这里就不用我们手动检测消息里的命令关键字了,然后未被匹配的消息会送到natural_language中处理,如果没有natural_language消息就会被忽略。request用于处理加群请求等非消息类的任务。
还有许多细节问题就需要慢慢研究了,比如想在群聊中也是用命令,可以加only_to_me=False参数。
要主动调用HTTP API可以使用如下方式:

bot = session.bot
# bot = nonebot.get_bot()
await bot.send_private_msg(user_id=12345678, message='你好~')

要获得上报事件中的参数,需要访问session.ctx。
然后下面这个例子是发送测试获得该消息的上报内容,发送其他消息则会复读。

from nonebot import on_command, CommandSession
from nonebot import on_natural_language, NLPSession, IntentCommand

__plugin_name__ = '测试'
__plugin_usage__ = '测试 命令'


@on_command('test', aliases=('测试',), only_to_me=False)
async def test(session: CommandSession):
    ctx = session.ctx
    await session.send(str(ctx))


@on_natural_language(only_to_me=False)
async def repeat(session: NLPSession):
    msg = session.ctx["message"]
    await session.send(msg)

还有更多应用后续再研究。。。

Last modification:January 5th, 2020 at 10:00 pm