WARNING:高二次元浓度警告
当用户 @机器人 或者 提到机器人昵称时,会根据词库回复一条消息
当用户戳机器人的时候,机器人会戳回去,或者随机回复一条词库中消息
现在可以复读啦!谁不喜欢 +1 呢
当然也可以打断复读...谁不喜欢打断复读呢
以下提到的方法 任选其一 即可
[推荐] 使用 nb-cli 安装
在 nonebot2 项目的根目录下打开命令行, 输入以下指令即可安装nb plugin install nonebot_plugin_kawaii_robot
使用包管理器安装
在 nonebot2 项目的插件目录下, 打开命令行, 根据你使用的包管理器, 输入相应的安装命令pip
pip install nonebot_plugin_kawaii_robot
pdm
pdm add nonebot_plugin_kawaii_robot
poetry
poetry add nonebot_plugin_kawaii_robot
conda
conda install nonebot_plugin_kawaii_robot
打开 nonebot2 项目根目录下的 pyproject.toml
文件, 在 [tool.nonebot]
部分的 plugins
项里追加写入
[tool.nonebot]
plugins = [
# ...
"nonebot_plugin_kawaii_robot"
]
在 NoneBot2 项目的 .env
文件中按需添加下面的配置项
# 机器人昵称
NICKNAME=[]
# 词库回复权限,`ALL` 就是全部聊天都会触发回复,`GROUP` 就是仅群聊
LEAF_PERMISSION=ALL
# 忽略词,指令以本列表中的元素开头不会触发回复
# 例:[".", "#", "你好"]
LEAF_IGNORE=[]
# 回复模式,`-1` 关闭全部 at 回复,`0` 仅启用词库回复,`1` 开启所有回复
LEAF_REPLY_TYPE=1
# 戳一戳回复文字概率,范围 `0` ~ `100`,`-1` 关闭戳一戳回复,`0` 代表始终戳回去
LEAF_POKE_RAND=20
# 复读、打断复读时是否按复读的用户数计算次数
LEAF_FORCE_DIFFERENT_USER=True
# 触发复读或打断次数,群内复读 `{0}` ~ `{1}` 次数后触发复读或打断
LEAF_REPEATER_LIMIT=[2, 6]
# 复读后,群友继续复读达到指定次数时是否继续参与复读或打断
LEAF_REPEAT_CONTINUE=False
# 打断概率,范围 `0` ~ `100`,`0` 关闭打断
LEAF_INTERRUPT=20
# 打断复读后,群友继续复读达到指定次数时是否继续参与复读或打断
LEAF_INTERRUPT_CONTINUE=True
# 词库回复匹配模式,
# `0` 是整句话精确匹配关键词(不推荐);
# `1` 是按从长到短的顺序遍历词库中的关键词,遇到匹配的就停止遍历并选取对应回复;
# `2` 与 `1` 的遍历方式相同,但是会遍历所有词库中的关键词,然后从匹配到的所有项目中随机选取一个回复
LEAF_MATCH_PATTERN=1
# 当 `LEAF_MATCH_PATTERN` >= 1 时,消息长度大于此数值则不从词库中匹配回复,设为 `0` 则禁用此功能
LEAF_SEARCH_MAX=20
# 词库回复是否需要 @机器人 或包含机器人昵称
LEAF_NEED_AT=True
# 当 `LEAF_NEED_AT` 为 `False` 时,非 @机器人 时的词库回复触发概率,范围 `0` ~ `100`
LEAF_TRIGGER_PERCENT=5
# 戳一戳回复延时,单位秒
LEAF_POKE_ACTION_DELAY=[0.5, 1.5]
# 当回复存在多条消息时,发送消息的间隔时间,单位秒
LEAF_MULTI_REPLY_DELAY=[1.0, 3.0]
# 是否载入内置回复词库
# 内置了 Kyomotoi/AnimeThesaurus 词库(data.json),还有咱自制的 bot 的词库(leaf.json)
LEAF_LOAD_BUILTIN_DICT=True
# 是否载入内置特殊回复词库
LEAF_LOAD_BUILTIN_SPECIAL=True
# 是否注册 重载词库 指令
LEAF_REGISTER_RELOAD_COMMAND=True
把你自己的词库(json 文件)扔到 data/kawaii_robot
文件夹里就可以加载啦!
可以加载多个 json 文件。
会忽略文件名以 _
开头的文件。
如果扔进了奇怪的东西大概会加载失败,然后。。。跳过,继续加载下一个文件。
不要把奇怪的东西扔进资源里呀 kora
顺便一提,自己的词库是最优先的。 现在并到一起了
参考 Kyomotoi/AnimeThesaurus 的 json 字典格式,键是关键词字符串,值是回复列表
注意:词库要符合 json 格式 如果报解码错误(UnicodeDecodeError
)先检查自己的词库是不是 无 BOM 的 UTF-8 编码格式
回复里可以写变量,目前用 UniMessage.template().format()
格式化;可以往里写 Alconna 的扩展控制符。
如果回复中需要用到 {
或 }
,请用 {{
或 }}
代替。
插件内建的一些的变量:
{user_id}
:发送者 QQ 号{username}
:发送者昵称(获取失败则默认为你
){bot_nickname}
:机器人昵称(没有设置则默认为可爱的咱
){message_id}
: 消息 ID,在戳一戳回复中为 None{segment}
:用于分割消息,该变量前的文本将会单独为一条消息发送{at}
: At 消息发送者,是{:At(user, user_id)}
的简写{reply}
: 回复发送者的消息,是{:Reply(message_id)}
的简写,在戳一戳回复中为 None
示例:
{
"呐": [
"嗯?{bot_nickname}在哦~{username}有什么事吗?",
"{at} 呐呐呐~",
"{:Reply(message_id)} 呐?"
// ...
]
}
在 data/kawaii_robot
文件夹里有几个特殊的附加词库文件(在 const.py
中有对应的内置词库):
_hello.json
:用户只 at 了机器人,没有带任何其他文本消息时回复的内容_poke.json
:用户戳一戳机器人时回复的文本内容_unknown.json
:用户发送的消息没有匹配到任何词库内容时回复的消息_interrupt.json
:打断复读时回复的消息
这些词库的格式是一个文本数组,每个元素是一条回复,同样可以使用上面提到的变量
示例:
[
"{username}你好~",
"{bot_nickname}在哦~"
// ...
]
QQ:3076823485
Telegram:@lgc2333
吹水群:1105946125
邮箱:[email protected]
- 插件改编
抄自 nonebot_plugin_smart_reply:使用了青云客 api 的的智能障回复插件 - 复读姬借鉴
抄自 nonebot_plugin_repeater:群聊复读机
感谢大家的赞助!你们的赞助将是我继续创作的动力!
- 添加配置项
LEAF_REGISTER_RELOAD_COMMAND
,注册重载词库
指令用于词库热重载
- 修复戳一戳无法正常回复
- 适配 Pydantic V1 & V2
- 使用 alconna 支持多平台,词库变量写法变化,新增了几个变量,不再支持 CQ 码
- 重写了复读的逻辑,添加配置项
LEAF_FORCE_DIFFERENT_USER
、LEAF_REPEAT_CONTINUE
- 完全重构插件代码,更改项目结构,使用
pdm
管理项目 - 词库优化(详见 附加词库):
- 加载:现在可以直接往
data/kawaii_robot
文件夹里扔你自己的 json 词库了 - 编写:支持了一些变量
- 加载:现在可以直接往
- 配置项的增加与修改(详见 配置):
- 修改
LEAF_IGNORE
:修改类型为Set[str]
,配置书写方式不变 - 修改
LEAF_MATCH_PATTERN
:新增模式2
- 修改
LEAF_AT_MOD
:更名为LEAF_NEED_AT
,修改类型为bool
- 增加
LEAF_INTERRUPT_CONTINUE
- 增加
LEAF_SEARCH_MAX
- 增加
LEAF_TRIGGER_PERCENT
- 增加
LEAF_POKE_ACTION_DELAY
- 增加
LEAF_LOAD_BUILTIN_DICT
- 增加
LEAF_LOAD_BUILTIN_SPECIAL
- 增加
LEAF_MULTI_REPLY_DELAY
- 修改
- 还有的可能没列出来,问就是我忘了,qwq