nonebot-plugin-uniref

Portable and serializable entity references for NoneBot


License
MIT
Install
pip install nonebot-plugin-uniref==0.4.1

Documentation

nonebot

nonebot-plugin-uniref

NoneBot2 可持久化的跨平台实体引用插件 ✨

license Python NoneBot pypi

本插件提供可比较、可序列化的 UserRefSceneRef,用于在 NoneBot 插件中持久化用户和场景身份。

安装

  • 使用 nb-cli
nb plugin install nonebot-plugin-uniref
  • 使用 pip
pip install nonebot-plugin-uniref

使用

从事件上下文获取和构造 Ref

from nonebot_plugin_alconna import At, UniMsg
from nonebot_plugin_uniref import RefContext


@matcher.handle()
async def handle(message: UniMsg, refs: RefContext):
    user = refs.user_ref
    scene = refs.scene_ref
    user_ids = [at.target for at in message[At] if at.flag == "user"]
    users = [refs.build_user_ref(user_id) for user_id in user_ids]
    data_scene = refs.parent_scene_ref or scene

编码与恢复 Ref

from nonebot_plugin_uniref import UserRef, decode_ref, encode_ref

ref = UserRef(namespace="QQClient", id="123")
value = encode_ref(ref)

assert value == "user:QQClient:123"
assert decode_ref(value) == ref

构造 Alconna Target

from nonebot_plugin_uniref import decode_ref, ref_to_target

ref = decode_ref("scene:QQClient:group:456")
target = ref_to_target(ref, bot=bot)

模型定义

UserRef

属性 类型 含义
namespace str 用户 ID 所属的身份命名空间
id str 用户 ID

SceneRef

属性 类型 含义
namespace str 场景 ID 所属的身份命名空间
type SceneKind UniRef 定义的场景种类
id str 场景 ID

SceneKind 包含 privategroupguildchannel_textchannel_categorychannel_voice

支持的 Adapter

{...} 表示决定 ID 有效范围的平台值;id= 后是被引用实体自身的 Ref.id。namespace 表达平台空间、 签发方、ID family,以及无法由其他字段表达的必要局部作用域。

已验证 Adapter / 场景 UserRef:namespace;ID SceneRef:namespace;type;ID
OneBot V11、Milky QQClient;id=QQ 号 QQClientprivate:QQ 号;group:群号
Telegram Telegram;id=User ID privategroupTelegram;id=Chat ID;channel_textTelegram:{Chat ID};id=Thread ID
Discord Discord;id=User Snowflake Discordprivateguild、Channel;id=Snowflake
QQ C2C QQAPI:{QQ AppID}:c2c;id=user_openid QQAPI:{QQ AppID}private;id=user_openid
QQ 群聊 QQAPI:{QQ AppID}:group:{group_openid};id=member_openid QQAPI:{QQ AppID}group;id=group_openid
QQ 公开文字子频道 QQAPI:{QQ AppID}:guild:{guild_id};id=频道用户 ID QQAPI:{QQ AppID}channel_text;id=channel_id
飞书私聊 Feishu:{Feishu AppID};id=open_id 同 namespace;private;id=open_id
飞书群聊 Feishu:{Feishu AppID};id=open_id Feishugroup;id=chat_id