<p align="center">
<a href="https://v2.nonebot.dev/"><img src="https://v2.nonebot.dev/logo.png" width="200" height="200" alt="nonebot"></a>
</p>
<div align="center">
# nonebot-plugin-pallas-repeater
✨ 复读鸡 ✨
<p align="center">
<a href="https://github.com/Redmomn/nonebot-plugin-pallas-repeater/blob/master/LICENSE">
<img src="https://img.shields.io/github/license/Redmomn/nonebot-plugin-pallas-repeater.svg" alt="license">
</a>
<img src="https://img.shields.io/badge/python-3.8+-blue.svg" alt="Python">
<a href="https://pypi.org/project/nonebot-plugin-pallas-repeater">
<img src="https://badgen.net/pypi/v/nonebot-plugin-pallas-repeater" alt="pypi">
</a>
</p>
</div>
## 📖 介绍
复读鸡,从[PallasBot](https://github.com/MistEO/Pallas-Bot)单独拆分出来的插件版本
已兼容pydantic v1&v2
## 💿 安装
<details open>
<summary>nb-cli</summary>
nb plugin install nonebot-plugin-pallas-repeater
</details>
<details open>
<summary>pip</summary>
pip install nonebot_plugin_pallas_repeater
</details>
## ⚙️ 配置
```text
# 黑名单,会导致所有插件都不能响应该用户的命令
BLACKLIST=[]
# mongodb 相关配置,如无特殊需求,保持注释即可
# 使用 docker-compose 部署时,请将MONGO_HOST设置为 mongodb 容器 的 service 名称,如:MONGO_HOST=mongodb
MONGO_HOST=127.0.0.1
MONGO_PORT=27017
MONGO_USER=
MONGO_PASSWORD=
# 复读机功能相关参数,推荐保持注释
# answer 相关阈值,值越大,牛牛废话越少;越小,牛牛废话越多
ANSWER_THRESHOLD = 3
# answer 阈值权重
ANSWER_THRESHOLD_WEIGHTS = [7, 23, 70]
# 上下文联想,记录多少个关键词(每个群)
TOPICS_SIZE = 16
# 上下文命中后,额外的权重系数
TOPICS_IMPORTANCE = 10000
# N 个群有相同的回复,就跨群作为全局回复
CROSS_GROUP_THRESHOLD = 2
# 复读的阈值,群里连续多少次有相同的发言,就复读
REPEAT_THRESHOLD = 3
# 主动发言的阈值,越小废话越多
SPEAK_THRESHOLD = 5
# 说过的话,接下来多少次不再说
DUPLICATE_REPLY = 10
# 按逗号分割回复语的概率
SPLIT_PROBABILITY = 0.5
# 连续主动说话的概率
SPEAK_CONTINUOUSLY_PROBABILITY = 0.5
# 主动说话加上随机戳一戳群友的概率
SPEAK_POKE_PROBABILITY = 0.6
# 连续主动说话最多几句话
SPEAK_CONTINUOUSLY_MAX_LEN = 2
# 每隔多久进行一次持久化(秒)
SAVE_TIME_THRESHOLD = 3600
# 单个群超过多少条聊天记录就进行一次持久化,与时间是或的关系
SAVE_COUNT_THRESHOLD = 1000
# 保存时,给内存中保留的大小
SAVE_RESERVED_SIZE = 100
# tts 功能相关配置
# 声码器,可选值:pwgan_aishell3、wavernn_csmsc
TTS_VOCODER=pwgan_aishell3
```
### 关于分词
默认安装`jieba`, 加群较多、需要处理消息量大的用户可以自行安装`jieba-fast`,以提升分词速度
插件会优先尝试导入`jieba-fast`库,如果导入失败则使用`jieba`库,无需手动修改代码
```shell
pip3 install jieba_fast
```
Windows下安装需要msvc编译器支持
Linux下安装需要build-essential
## 🎉 使用
### 牛牛有什么功能?
牛牛的功能就是废话和复读。牛牛几乎所有的发言都是从群聊记录中学习而来的,并非作者硬编码写入的。群友们平时怎么聊,牛牛就会怎么回,可以认为是高级版的复读机
### 那为什么牛牛说了一些群里从来没说过的话?
牛牛有跨群功能,若超过 N 个群都有类似的发言,就会作为全局发言,在任何群都生效
### 你说牛牛没有功能,为什么有时候查询信息、或者一些其它指令,牛牛会回复?
从别的机器人(可能是其他群)那里学来的
~~你这机器人功能不错呀,现在牛牛也会了!~~
### 有时候没人说话,牛牛自己突然蹦出来几句话
哈,是主动发言功能!内容同样从群聊里学来的!
### 怎么教牛牛说话呢?
正常聊天即可,牛牛会自动学。
如果想强行教的话,可以这样:
```text
—— 牛牛你好
—— 你好呀
—— 牛牛你好
—— 你好呀
—— 牛牛你好
—— 你好呀
```
如此重复 3 次以上,下一次再发送 “牛牛你好”,牛牛即会回复 “你好呀”
### 牛牛说了一些不合适的话,要怎么删除?
群管理员 **回复** 牛牛说的那句话 “不可以” 或直接撤回对应的消息即可,同样的若超过 N 个群都禁止了这句话,就会作为全局禁止,在任何群都不发
### 牛牛的一些其他小功能
- `牛牛喝酒` 进入狂暴醉酒状态(bushi,废话会特别多,喝醉后不会响应用户命令(优先级为4以下的)
- 随机修改自己的群名片为近期发言的人,夺舍!
## 💡 感谢
原项目[Pallas-Bot](https://github.com/MistEO/Pallas-Bot)(高性能废物牛牛子)
本项目几乎所有代码都来源于原项目(包括README)
Raw data
{
"_id": null,
"home_page": "https://github.com/Redmomn/nonebot-plugin-pallas-repeater",
"name": "nonebot-plugin-pallas-repeater",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "nonebot2, repeater",
"author": "Redmomn",
"author_email": "109732988+Redmomn@users.noreply.github.com",
"download_url": "https://files.pythonhosted.org/packages/e2/06/7243fb3c473db1479935857ca7ae1503858599bf8f69aa5f6aecd0451a44/nonebot_plugin_pallas_repeater-0.1.4.tar.gz",
"platform": null,
"description": "<p align=\"center\">\n <a href=\"https://v2.nonebot.dev/\"><img src=\"https://v2.nonebot.dev/logo.png\" width=\"200\" height=\"200\" alt=\"nonebot\"></a>\n</p>\n\n<div align=\"center\">\n\n# nonebot-plugin-pallas-repeater\n\n\u2728 \u590d\u8bfb\u9e21 \u2728\n\n<p align=\"center\">\n <a href=\"https://github.com/Redmomn/nonebot-plugin-pallas-repeater/blob/master/LICENSE\">\n <img src=\"https://img.shields.io/github/license/Redmomn/nonebot-plugin-pallas-repeater.svg\" alt=\"license\">\n </a>\n <img src=\"https://img.shields.io/badge/python-3.8+-blue.svg\" alt=\"Python\">\n <a href=\"https://pypi.org/project/nonebot-plugin-pallas-repeater\">\n <img src=\"https://badgen.net/pypi/v/nonebot-plugin-pallas-repeater\" alt=\"pypi\">\n </a>\n</p>\n\n</div>\n\n## \ud83d\udcd6 \u4ecb\u7ecd\n\n\u590d\u8bfb\u9e21\uff0c\u4ece[PallasBot](https://github.com/MistEO/Pallas-Bot)\u5355\u72ec\u62c6\u5206\u51fa\u6765\u7684\u63d2\u4ef6\u7248\u672c \n\u5df2\u517c\u5bb9pydantic v1&v2\n\n## \ud83d\udcbf \u5b89\u88c5\n\n<details open>\n<summary>nb-cli</summary>\n\n nb plugin install nonebot-plugin-pallas-repeater\n\n</details>\n\n<details open>\n<summary>pip</summary>\n\n pip install nonebot_plugin_pallas_repeater\n\n</details>\n\n## \u2699\ufe0f \u914d\u7f6e\n\n```text\n# \u9ed1\u540d\u5355\uff0c\u4f1a\u5bfc\u81f4\u6240\u6709\u63d2\u4ef6\u90fd\u4e0d\u80fd\u54cd\u5e94\u8be5\u7528\u6237\u7684\u547d\u4ee4\nBLACKLIST=[]\n# mongodb \u76f8\u5173\u914d\u7f6e\uff0c\u5982\u65e0\u7279\u6b8a\u9700\u6c42\uff0c\u4fdd\u6301\u6ce8\u91ca\u5373\u53ef\n# \u4f7f\u7528 docker-compose \u90e8\u7f72\u65f6\uff0c\u8bf7\u5c06MONGO_HOST\u8bbe\u7f6e\u4e3a mongodb \u5bb9\u5668 \u7684 service \u540d\u79f0\uff0c\u5982\uff1aMONGO_HOST=mongodb\n\nMONGO_HOST=127.0.0.1\nMONGO_PORT=27017\nMONGO_USER=\nMONGO_PASSWORD=\n\n# \u590d\u8bfb\u673a\u529f\u80fd\u76f8\u5173\u53c2\u6570\uff0c\u63a8\u8350\u4fdd\u6301\u6ce8\u91ca\n\n# answer \u76f8\u5173\u9608\u503c\uff0c\u503c\u8d8a\u5927\uff0c\u725b\u725b\u5e9f\u8bdd\u8d8a\u5c11\uff1b\u8d8a\u5c0f\uff0c\u725b\u725b\u5e9f\u8bdd\u8d8a\u591a\nANSWER_THRESHOLD = 3\n# answer \u9608\u503c\u6743\u91cd\nANSWER_THRESHOLD_WEIGHTS = [7, 23, 70]\n# \u4e0a\u4e0b\u6587\u8054\u60f3\uff0c\u8bb0\u5f55\u591a\u5c11\u4e2a\u5173\u952e\u8bcd\uff08\u6bcf\u4e2a\u7fa4\uff09\nTOPICS_SIZE = 16\n# \u4e0a\u4e0b\u6587\u547d\u4e2d\u540e\uff0c\u989d\u5916\u7684\u6743\u91cd\u7cfb\u6570\nTOPICS_IMPORTANCE = 10000\n# N \u4e2a\u7fa4\u6709\u76f8\u540c\u7684\u56de\u590d\uff0c\u5c31\u8de8\u7fa4\u4f5c\u4e3a\u5168\u5c40\u56de\u590d\nCROSS_GROUP_THRESHOLD = 2\n# \u590d\u8bfb\u7684\u9608\u503c\uff0c\u7fa4\u91cc\u8fde\u7eed\u591a\u5c11\u6b21\u6709\u76f8\u540c\u7684\u53d1\u8a00\uff0c\u5c31\u590d\u8bfb\nREPEAT_THRESHOLD = 3\n# \u4e3b\u52a8\u53d1\u8a00\u7684\u9608\u503c\uff0c\u8d8a\u5c0f\u5e9f\u8bdd\u8d8a\u591a\nSPEAK_THRESHOLD = 5\n# \u8bf4\u8fc7\u7684\u8bdd\uff0c\u63a5\u4e0b\u6765\u591a\u5c11\u6b21\u4e0d\u518d\u8bf4\nDUPLICATE_REPLY = 10\n# \u6309\u9017\u53f7\u5206\u5272\u56de\u590d\u8bed\u7684\u6982\u7387\nSPLIT_PROBABILITY = 0.5\n# \u8fde\u7eed\u4e3b\u52a8\u8bf4\u8bdd\u7684\u6982\u7387\nSPEAK_CONTINUOUSLY_PROBABILITY = 0.5\n# \u4e3b\u52a8\u8bf4\u8bdd\u52a0\u4e0a\u968f\u673a\u6233\u4e00\u6233\u7fa4\u53cb\u7684\u6982\u7387\nSPEAK_POKE_PROBABILITY = 0.6\n# \u8fde\u7eed\u4e3b\u52a8\u8bf4\u8bdd\u6700\u591a\u51e0\u53e5\u8bdd\nSPEAK_CONTINUOUSLY_MAX_LEN = 2\n# \u6bcf\u9694\u591a\u4e45\u8fdb\u884c\u4e00\u6b21\u6301\u4e45\u5316\uff08\u79d2\uff09\nSAVE_TIME_THRESHOLD = 3600\n# \u5355\u4e2a\u7fa4\u8d85\u8fc7\u591a\u5c11\u6761\u804a\u5929\u8bb0\u5f55\u5c31\u8fdb\u884c\u4e00\u6b21\u6301\u4e45\u5316\uff0c\u4e0e\u65f6\u95f4\u662f\u6216\u7684\u5173\u7cfb\nSAVE_COUNT_THRESHOLD = 1000\n# \u4fdd\u5b58\u65f6\uff0c\u7ed9\u5185\u5b58\u4e2d\u4fdd\u7559\u7684\u5927\u5c0f\nSAVE_RESERVED_SIZE = 100\n\n# tts \u529f\u80fd\u76f8\u5173\u914d\u7f6e\n\n# \u58f0\u7801\u5668\uff0c\u53ef\u9009\u503c\uff1apwgan_aishell3\u3001wavernn_csmsc\nTTS_VOCODER=pwgan_aishell3\n```\n\n### \u5173\u4e8e\u5206\u8bcd\n\n\u9ed8\u8ba4\u5b89\u88c5`jieba`\uff0c \u52a0\u7fa4\u8f83\u591a\u3001\u9700\u8981\u5904\u7406\u6d88\u606f\u91cf\u5927\u7684\u7528\u6237\u53ef\u4ee5\u81ea\u884c\u5b89\u88c5`jieba-fast`\uff0c\u4ee5\u63d0\u5347\u5206\u8bcd\u901f\u5ea6\n\n\u63d2\u4ef6\u4f1a\u4f18\u5148\u5c1d\u8bd5\u5bfc\u5165`jieba-fast`\u5e93\uff0c\u5982\u679c\u5bfc\u5165\u5931\u8d25\u5219\u4f7f\u7528`jieba`\u5e93\uff0c\u65e0\u9700\u624b\u52a8\u4fee\u6539\u4ee3\u7801\n\n```shell\npip3 install jieba_fast\n```\n\nWindows\u4e0b\u5b89\u88c5\u9700\u8981msvc\u7f16\u8bd1\u5668\u652f\u6301\nLinux\u4e0b\u5b89\u88c5\u9700\u8981build-essential\n\n## \ud83c\udf89 \u4f7f\u7528\n\n### \u725b\u725b\u6709\u4ec0\u4e48\u529f\u80fd\uff1f\n\n\u725b\u725b\u7684\u529f\u80fd\u5c31\u662f\u5e9f\u8bdd\u548c\u590d\u8bfb\u3002\u725b\u725b\u51e0\u4e4e\u6240\u6709\u7684\u53d1\u8a00\u90fd\u662f\u4ece\u7fa4\u804a\u8bb0\u5f55\u4e2d\u5b66\u4e60\u800c\u6765\u7684\uff0c\u5e76\u975e\u4f5c\u8005\u786c\u7f16\u7801\u5199\u5165\u7684\u3002\u7fa4\u53cb\u4eec\u5e73\u65f6\u600e\u4e48\u804a\uff0c\u725b\u725b\u5c31\u4f1a\u600e\u4e48\u56de\uff0c\u53ef\u4ee5\u8ba4\u4e3a\u662f\u9ad8\u7ea7\u7248\u7684\u590d\u8bfb\u673a\n\n### \u90a3\u4e3a\u4ec0\u4e48\u725b\u725b\u8bf4\u4e86\u4e00\u4e9b\u7fa4\u91cc\u4ece\u6765\u6ca1\u8bf4\u8fc7\u7684\u8bdd\uff1f\n\n\u725b\u725b\u6709\u8de8\u7fa4\u529f\u80fd\uff0c\u82e5\u8d85\u8fc7 N \u4e2a\u7fa4\u90fd\u6709\u7c7b\u4f3c\u7684\u53d1\u8a00\uff0c\u5c31\u4f1a\u4f5c\u4e3a\u5168\u5c40\u53d1\u8a00\uff0c\u5728\u4efb\u4f55\u7fa4\u90fd\u751f\u6548\n\n### \u4f60\u8bf4\u725b\u725b\u6ca1\u6709\u529f\u80fd\uff0c\u4e3a\u4ec0\u4e48\u6709\u65f6\u5019\u67e5\u8be2\u4fe1\u606f\u3001\u6216\u8005\u4e00\u4e9b\u5176\u5b83\u6307\u4ee4\uff0c\u725b\u725b\u4f1a\u56de\u590d\uff1f\n\n\u4ece\u522b\u7684\u673a\u5668\u4eba\uff08\u53ef\u80fd\u662f\u5176\u4ed6\u7fa4\uff09\u90a3\u91cc\u5b66\u6765\u7684\n\n~~\u4f60\u8fd9\u673a\u5668\u4eba\u529f\u80fd\u4e0d\u9519\u5440\uff0c\u73b0\u5728\u725b\u725b\u4e5f\u4f1a\u4e86\uff01~~\n\n### \u6709\u65f6\u5019\u6ca1\u4eba\u8bf4\u8bdd\uff0c\u725b\u725b\u81ea\u5df1\u7a81\u7136\u8e66\u51fa\u6765\u51e0\u53e5\u8bdd\n\n\u54c8\uff0c\u662f\u4e3b\u52a8\u53d1\u8a00\u529f\u80fd\uff01\u5185\u5bb9\u540c\u6837\u4ece\u7fa4\u804a\u91cc\u5b66\u6765\u7684\uff01\n\n### \u600e\u4e48\u6559\u725b\u725b\u8bf4\u8bdd\u5462\uff1f\n\n\u6b63\u5e38\u804a\u5929\u5373\u53ef\uff0c\u725b\u725b\u4f1a\u81ea\u52a8\u5b66\u3002\n\n\u5982\u679c\u60f3\u5f3a\u884c\u6559\u7684\u8bdd\uff0c\u53ef\u4ee5\u8fd9\u6837\uff1a\n\n```text\n\u2014\u2014 \u725b\u725b\u4f60\u597d\n\u2014\u2014 \u4f60\u597d\u5440\n\u2014\u2014 \u725b\u725b\u4f60\u597d\n\u2014\u2014 \u4f60\u597d\u5440\n\u2014\u2014 \u725b\u725b\u4f60\u597d\n\u2014\u2014 \u4f60\u597d\u5440\n```\n\n\u5982\u6b64\u91cd\u590d 3 \u6b21\u4ee5\u4e0a\uff0c\u4e0b\u4e00\u6b21\u518d\u53d1\u9001 \u201c\u725b\u725b\u4f60\u597d\u201d\uff0c\u725b\u725b\u5373\u4f1a\u56de\u590d \u201c\u4f60\u597d\u5440\u201d\n\n### \u725b\u725b\u8bf4\u4e86\u4e00\u4e9b\u4e0d\u5408\u9002\u7684\u8bdd\uff0c\u8981\u600e\u4e48\u5220\u9664\uff1f\n\n\u7fa4\u7ba1\u7406\u5458 **\u56de\u590d** \u725b\u725b\u8bf4\u7684\u90a3\u53e5\u8bdd \u201c\u4e0d\u53ef\u4ee5\u201d \u6216\u76f4\u63a5\u64a4\u56de\u5bf9\u5e94\u7684\u6d88\u606f\u5373\u53ef\uff0c\u540c\u6837\u7684\u82e5\u8d85\u8fc7 N \u4e2a\u7fa4\u90fd\u7981\u6b62\u4e86\u8fd9\u53e5\u8bdd\uff0c\u5c31\u4f1a\u4f5c\u4e3a\u5168\u5c40\u7981\u6b62\uff0c\u5728\u4efb\u4f55\u7fa4\u90fd\u4e0d\u53d1\n\n### \u725b\u725b\u7684\u4e00\u4e9b\u5176\u4ed6\u5c0f\u529f\u80fd\n\n- `\u725b\u725b\u559d\u9152` \u8fdb\u5165\u72c2\u66b4\u9189\u9152\u72b6\u6001\uff08bushi\uff0c\u5e9f\u8bdd\u4f1a\u7279\u522b\u591a\uff0c\u559d\u9189\u540e\u4e0d\u4f1a\u54cd\u5e94\u7528\u6237\u547d\u4ee4\uff08\u4f18\u5148\u7ea7\u4e3a4\u4ee5\u4e0b\u7684\uff09\n- \u968f\u673a\u4fee\u6539\u81ea\u5df1\u7684\u7fa4\u540d\u7247\u4e3a\u8fd1\u671f\u53d1\u8a00\u7684\u4eba\uff0c\u593a\u820d\uff01\n\n## \ud83d\udca1 \u611f\u8c22\n\n\u539f\u9879\u76ee[Pallas-Bot](https://github.com/MistEO/Pallas-Bot)(\u9ad8\u6027\u80fd\u5e9f\u7269\u725b\u725b\u5b50) \n\u672c\u9879\u76ee\u51e0\u4e4e\u6240\u6709\u4ee3\u7801\u90fd\u6765\u6e90\u4e8e\u539f\u9879\u76ee\uff08\u5305\u62ecREADME\uff09\n",
"bugtrack_url": null,
"license": "AGPL-3.0",
"summary": "nonebot-plugin-pallas-repeater",
"version": "0.1.4",
"project_urls": {
"Homepage": "https://github.com/Redmomn/nonebot-plugin-pallas-repeater"
},
"split_keywords": [
"nonebot2",
" repeater"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "8011a26cde10ddb212a6fbd956023c91bfba7ac826360b27082f4070738a1ed0",
"md5": "2f13f4d9203962a89b88a17b4002c9ea",
"sha256": "69752c3125d62947751a0fe8bdd8a694f311bfb0de4da7f5fb61bab321599eb7"
},
"downloads": -1,
"filename": "nonebot_plugin_pallas_repeater-0.1.4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "2f13f4d9203962a89b88a17b4002c9ea",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 37443,
"upload_time": "2024-03-23T13:30:51",
"upload_time_iso_8601": "2024-03-23T13:30:51.534543Z",
"url": "https://files.pythonhosted.org/packages/80/11/a26cde10ddb212a6fbd956023c91bfba7ac826360b27082f4070738a1ed0/nonebot_plugin_pallas_repeater-0.1.4-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e2067243fb3c473db1479935857ca7ae1503858599bf8f69aa5f6aecd0451a44",
"md5": "9ecabacccf58c2cd6451ebe504393084",
"sha256": "484a4efd31116c73fb0a1ef3cf1963f229b35c1b5622648d8546b6607d65248b"
},
"downloads": -1,
"filename": "nonebot_plugin_pallas_repeater-0.1.4.tar.gz",
"has_sig": false,
"md5_digest": "9ecabacccf58c2cd6451ebe504393084",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 35823,
"upload_time": "2024-03-23T13:30:52",
"upload_time_iso_8601": "2024-03-23T13:30:52.642858Z",
"url": "https://files.pythonhosted.org/packages/e2/06/7243fb3c473db1479935857ca7ae1503858599bf8f69aa5f6aecd0451a44/nonebot_plugin_pallas_repeater-0.1.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-03-23 13:30:52",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Redmomn",
"github_project": "nonebot-plugin-pallas-repeater",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "nonebot-adapter-onebot",
"specs": [
[
">=",
"2.0.0"
]
]
},
{
"name": "nonebot2",
"specs": [
[
">=",
"2.0.0"
]
]
},
{
"name": "nonebot2",
"specs": []
},
{
"name": "nonebot_plugin_apscheduler",
"specs": []
},
{
"name": "pypinyin",
"specs": []
},
{
"name": "pymongo",
"specs": []
},
{
"name": "jieba",
"specs": []
}
],
"lcname": "nonebot-plugin-pallas-repeater"
}