Skip to content

NoneBot2 多平台统一事件与统一消息构造发送

License

Notifications You must be signed in to change notification settings

MelodyYuuka/nonebot-plugin-any

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

nonebot

nonebot-plugin-any

🐝 Nonebot2 多平台统一事件与统一消息构造发送 🐝

license PyPI - Downloads pypi python

介绍

本插件提供了 统一事件接口统一消息构造发送接口 ,方便您的插件在多个平台接收事件与发送消息。

本插件将各平台的 事件消息事件群消息事件)抽象出一个统一的 AnyEventAnyMsgEventAnyGroupMsgEvent),节约了开发者在适配多平台时所需要的额外时间。

同时也提供了 AnyMsg,来提供一套接口即可发送跨平台消息的能力,只需构造一次 AnyMsg 即可编译成各平台消息,使您的插件结构更为清晰优雅。

特性

  • 简单便捷的依赖注入支持
  • 跨平台的 统一事件接收接口统一消息构造发送接口
  • 跨平台的 用户模型群模型
  • NoneBot2 消息处理流程行为一致

安装载入

  • 通过 pip 或 nb-cli 安装
pip install nonebot-plugin-any
nb plugin install nonebot-plugin-any
  • 并在您的bot.py中载入插件
nonebot.load_plugin("nonebot_plugin_any")
# 如果可能,最好将本插件在其他插件之前载入

目前支持

符号 含义
完全支持
🟨 部分支持(仅支持针对响应者等)
⚠️ 平台本身不支持,发送时自动返回提示
尚未支持
适配器 纯文本 图片 提及(@) 回复 语音
OneBot V11 🟨
QQ官方 🟨 ⚠️
Kook (开黑啦) 🟨
QQ频道 (deprecated) 🟨 ⚠️

使用

from nonebot import on_command, require
from nonebot.adapter import Bot as BaseBot

# 导入依赖
require("nonebot_plugin_any")

from nonebot_plugin_any import AnyMsgEvent, AnyGroupMsgEvent, AnyMsg, Platform

test = on_command("/ping", priority=1000)


@test.handle()
async def _(event: AnyMsgEvent):  # 简单的依赖注入支持
    await AnyMsg("AnyMsgEvent pong!").send(at=True, reply=True) # 原生适配发送时 at 和 reply

@test.handle()
async def _(bot: BaseBot, event: AnyMsgEvent):
    msg = AnyMsg("prefix").image(Path("pong.png")).text("suffix") # 支持链式构造
    qqmsg = msg.build(platform=Platform.QQ)     # 构造 QQ 消息
    kookmsg = msg.build(platform=Platform.KOOK)     # 构造 KOOK 消息
    botmsg = msg.build(bot=bot)     # 根据 Bot 的类型构造对应消息
    await msg.send()      # 支持一个 AnyMsg 无限复用!

@test.handle()
async def _(event: AnyGroupMsgEvent): # 接收多平台群消息事件
    print(event.user_id)  # 各平台统一一个接口
    print(event.image)  # 便捷获取消息内图片链接
    print(event.group_rich_id)  # 含平台名的一级群聊 id
    await AnyMsg("AnyGroupMsgEvent pong!").finish() # 与 matcher.finish(xxx) 行为一致
# 可以这样连接
AnyMsg("12345") + AnyMsg("67890")

# 也可以这样连接
AnyMsg("12345").text("67890")
AnyMsg("aaa").image(Path("bbb.png")).text("ccc")

# 还可以这样连接
AnyMsg("12345") + "67890"

# 这样连接也是完全没问题!
"12345" + AnyMsg("67890")

完善

  • 本插件原本是 YuukaBot 的功能之一,经魔法修改适配 NoneBot2 后在 NoneBot2 平台上作为插件。

  • 本插件仍处于开发阶段,若有需要的特性或新平台支持,欢迎提 issue 与 pr。

开源许可

  • 本插件使用 MIT 许可证开源。

About

NoneBot2 多平台统一事件与统一消息构造发送

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages