nonebot-plugin-session

August 3, 2024 · View on GitHub

nonebot

nonebot-plugin-session

Nonebot2 会话信息提取与会话 id 定义插件 ✨

license Python NoneBot pypi

本插件提供了一个统一的会话模型 Session,可以从不同适配器的 BotEvent 中提取与会话相关的属性

具体定义如下:

属性类型含义备注
bot_idstr机器人 id
bot_typestr机器人类型(适配器名称)
platformstr平台未知平台用 unknown 表示
levelIntEnum会话等级目前分为 LEVEL0(无用户)、LEVEL1(单用户)、LEVEL2(单级群组)、LEVEL3(两级群组) 四类
id1str1 级 id通常为 user_id
id2str2 级 id通常为 单级群组中的 group_id,两级群组中的 channel_id
id3str3 级 id通常为 两级群组中的 guild_id

同时,本插件提供了获取会话 id 的函数,可以按照不同的类型获取会话id,方便不同场景下的使用

Nonebot 适配器基类中也提供了 get_session_id 函数,但通常是 用户 id、群组 id 的组合,属于 “用户级别” 的 id,很多插件中需要用到不同级别的会话 id,如词云、词库等等

安装

  • 使用 nb-cli
nb plugin install nonebot_plugin_session
  • 使用 pip
pip install nonebot_plugin_session

使用

获取 Session

from nonebot_plugin_session import extract_session

@matcher.handle()
async def handle(bot: Bot, event: Event):
    session = extract_session(bot, event)

或使用依赖注入的形式:

from nonebot_plugin_session import EventSession

@matcher.handle()
async def handle(session: EventSession):
    ...

获取 session id

from nonebot_plugin_session import extract_session, SessionIdType

@matcher.handle()
async def handle(bot: Bot, event: Event):
    session = extract_session(bot, event)
    session_id = session.get_id(SessionIdType.GROUP)  # 获取 “群组级别” 的 session id

或使用依赖注入的形式:

from nonebot_plugin_session import SessionId, SessionIdType

@matcher.handle()
async def handle(session_id: str = SessionId(SessionIdType.GROUP)):
    ...

不同的 “会话级别” 与 “会话id类型” 下返回的 id 如下表所示:(不包含 bot_id 等属性的情况)

LEVEL0
(无用户)
LEVEL1
(单用户)
LEVEL2
(单级群组)
LEVEL3
(两级群组)
TYPE0 (GLOBAL)""""""""
TYPE1 (USER)"""id1""id1""id1"
TYPE2"""id1""id2""id2"
TYPE3"""id1""id2_id1""id2_id1"
TYPE4"""id1""id2""id3"
TYPE5"""id1""id2_id1""id3_id1"
TYPE6 (GROUP)"""id1""id2""id3_id2"
TYPE7 (GROUP_USER)"""id1""id2_id1""id3_id2_id1"

支持的 adapter

  • OneBot v11
  • OneBot v12
  • Console
  • Kaiheila
  • Telegram
  • Feishu
  • RedProtocol
  • Discord
  • QQ
  • Satori
  • DoDo

相关插件

鸣谢