IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> nonebot2 插件编写指南(四)(从旧版迁移至 2.0.0-beta.2) -> 正文阅读

[Python知识库]nonebot2 插件编写指南(四)(从旧版迁移至 2.0.0-beta.2)

nonebot2 插件编写指南(四)(从旧版迁移至 2.0.0-beta.2)

在 nb2 更新之后,许多未进行更新的插件均无法继续使用,包括之前几篇编写的简单插件。
在本篇中,将会对之前自己编写的插件进行新版本的适配。

更换协议适配器

在新版本的 nonebot 中,cqhttp 协议被弃用,如果你仍然使用的是 go-cqhttp 作为 qq 端,那么需要将协议改为 onebot。
使用脚手架安装时使用空格选择 onebot。
在 bot.py 中有以下片段即安装成功:

from nonebot.adapters.onebot.v11 import Adapter as ONEBOT_V11Adapter

和:

driver = nonebot.get_driver()
driver.register_adapter(ONEBOT_V11Adapter)

插件修改

新版本对于插件的影响不大,主要修改点为 import 导入点包和每个事件处理函数的部分。

修改 import 部分

以之前发的日报部分来举例,这是插件的 import 部分:

from nonebot import on_command
from nonebot.rule import to_me
from nonebot.typing import T_State
from nonebot.adapters import Bot, Event
from nonebot.adapters.cqhttp.message import Message

其中,cqhttp 有关的部分需要换成 onebot,Massage 部分需要更换来源,替换过后的样子:

from nonebot import on_command
from nonebot.rule import to_me
from nonebot.params import CommandArg
from nonebot.adapters.onebot.v11 import GroupMessageEvent,Bot,Message

其中nonebot.adaptersnonebot.typing的部分被弃用,取而代之的是nonebot.params和 onebot 协议适配器对应的nonebot.adapters.onebot.v11
而在老版本中常用的 Bot、Massage 和 Event 则归到了 onebot 之下。
而 event 也细分为群 event(GroupMessageEvent)和私聊 event(PrivateMessageEvent)。

修改事件响应器部分

若您的插件不需要使用 event 或者 bot 等来进行消息内容获取或 bot 设置,则可以直接跳过此部分

其实修改的部分只有 event 等数据的获取。
这是老的:

@today.handle()
async def handle_first_receive(bot: Bot, event: Event, state: T_State):

这是新的:

@today.handle()
async def handle_first_receive(event: GroupMessageEvent,message: Message = CommandArg()):

因为在新版中提供了一个新的方法:CommandArg(),这个方法将 Message 部分整合到了一起,提供了更方便的使用方法。
而 event 则可以根据消息来源来设置分开响应。
其他相关部分可以查看 nonebot 官网的 api 部分。

修改事件处理部分

在本插件中,事件处理部分暂无需要修改部分。若您的插件需要修改,请参考官方 api 文档。

若使用官方商店插件

在使用官方商店的第三方插件时,请注意查看此插件是否已适配新版本。
具体方法为:查看此插件 github 仓库,或者使用 pip 或 nb-cli 下载,进入 python 的 site-packages 文件夹下查看此插件源码。

此指南举例插件完整源码

命运 2 日报:

from nonebot import on_command
from nonebot.rule import to_me
from nonebot.params import CommandArg
from nonebot.adapters.onebot.v11 import GroupMessageEvent,Bot,Message

import urllib3
import json

today = on_command("today", aliases={'日报', }, priority=5)

@today.handle()
async def handle_first_receive(event: GroupMessageEvent,message: Message = CommandArg()):
    try:
        try:
            url = 'http://www.tianque.top/d2api/today/'

            r = urllib3.PoolManager().request('GET', url)
            hjson = json.loads(r.data.decode())

            img_url = hjson["img_url"]

            cq = "[CQ:image,file=" + img_url + ",id=40000]"

            await today.send(Message(cq))
        except:
            url = 'http://www.tianque.top/d2api/today/'

            r = urllib3.PoolManager().request('GET', url)
            hjson = json.loads(r.data.decode())

            error_url = hjson["error"]
            await today.send("获取日报失败\n"+
                            "error:\n"+
                            error_url)
    except :
        await today.send("获取日报失败:\n服务器错误")
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 20:45:38  更:2022-03-21 20:47:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 19:58:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码