Skip to content

Commit

Permalink
Merge pull request #52 from Sevenyine/dev
Browse files Browse the repository at this point in the history
增加最大换行数量和最大字符数量配置
  • Loading branch information
LambdaYH authored Sep 2, 2023
2 parents ff5b473 + 72106c3 commit 06c740c
Show file tree
Hide file tree
Showing 3 changed files with 145 additions and 127 deletions.
258 changes: 132 additions & 126 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,136 +1,142 @@
# Nonebot 漂流瓶插件
* 安装
-
- 使用 `pip install nonebot_plugin_bottle`
- 使用 `nb plugin install nonebot_plugin_bottle`
* 指令 (前应带指令前缀)
-
- `扔漂流瓶` [文本/图片]`扔漂流瓶` 后一条消息跟漂流瓶内容
- `寄漂流瓶` [文本/图片] (同`扔漂流瓶`,防止指令冲突用)
- `捡漂流瓶`
- `评论漂流瓶` [漂流瓶编号] [文本]
- `举报漂流瓶` [漂流瓶编号]
- `查看漂流瓶` [漂流瓶编号]
- `删除漂流瓶` [漂流瓶编号]
- `我的漂流瓶`
- SUPERUSER指令:
- `清空漂流瓶`
- `恢复漂流瓶 [漂流瓶编号]`
- `删除漂流瓶评论` [漂流瓶编号] [QQ号]
- `漂流瓶白名单` [QQ / 群聊] [QQ号 / 群号]
- `漂流瓶黑名单` [QQ / 群聊 / 举报] [QQ号 / 群号]
- `漂流瓶详情` [漂流瓶编号]
* 功能须知
- 所有用户:
- `扔漂流瓶`指令无字数限制,如需要可在代码中修改。若只说了扔漂流瓶,则插件将会监听用户的下一条消息。
- `捡漂流瓶`若捡到的漂流瓶存在回复,则会显示最近三条(默认),使用`查看漂流瓶`查看所有回复
- `查看漂流瓶`为保证随机性,无评论时不展示漂流瓶内容,可在代码中修改。漂流瓶的发送者可以通过本指令查看内容,无论有无评论。
- `评论漂流瓶`评论内容将通过该瓶子扔出的方式告诉扔出瓶子的人
- `举报漂流瓶`五次(默认)后将自动删除,举报成功后会私聊SUPERUSER漂流瓶详情内容
- `删除漂流瓶`漂流瓶发送者可以删除自己扔出的漂流瓶。二次确认会触发删除操作的指令为:`是/Y/Yes/y/yes`。其他的均直接取消操作。
- SUPERUSER:
- `删除漂流瓶`可以删除指定漂流瓶
- `清空漂流瓶`顾名思义,使用需谨慎
- `恢复漂流瓶`可以恢复被删除的漂流瓶
- `删除漂流瓶评论`可删除该发送者在该瓶的所有评论
- `漂流瓶详情`将会发送漂流瓶发送者的QQ号和群号,所有回复人的QQ号
- `漂流瓶黑名单``举报`选项是指`举报漂流瓶`的使用权限
- `漂流瓶数据库`存放在`data/bottle/data.json`
- `权限数据库` 存放在`data/bottle/permissionsList.json`
- `漂流瓶屏蔽词` 存放在`data/bottle/curse.json`中,**支持热更改**
* 权限控制
-
- 所有非SUPERUSER指令均受到权限控制
- `功能冷却开关`:插件默认开启,可在`data/bottle/permissionsList.json`中修改`enableCooldown`bool值(True/False)
- `功能冷却`:插件默认 30 秒冷却,可在`data/bottle/permissionsList.json`中修改`cooldownTime`
- 白名单优先级高于黑名单和冷却名单
## 安装
- 使用 `pip install nonebot_plugin_bottle`
- 使用 `nb plugin install nonebot_plugin_bottle`
## 指令 (前应带指令前缀)
- `扔漂流瓶 [文本/图片] ``扔漂流瓶` 后一条消息跟漂流瓶内容
- `寄漂流瓶` [文本/图片] (同`扔漂流瓶`,防止指令冲突用)
- `捡漂流瓶`
- `评论漂流瓶` [漂流瓶编号] [文本]
- `举报漂流瓶` [漂流瓶编号]
- `查看漂流瓶` [漂流瓶编号]
- `删除漂流瓶` [漂流瓶编号]
- `我的漂流瓶`
### SUPERUSER指令:
- `清空漂流瓶`
- `恢复漂流瓶 [漂流瓶编号]`
- `删除漂流瓶评论` [漂流瓶编号] [QQ号]
- `漂流瓶白名单` [QQ / 群聊] [QQ号 / 群号]
- `漂流瓶黑名单` [QQ / 群聊 / 举报] [QQ号 / 群号]
- `漂流瓶详情` [漂流瓶编号]

* 文字审核API配置(可选`百度审核``简单屏蔽词审核`
-
- 百度审核
- 在[百度智能云](https://cloud.baidu.com/doc/ANTIPORN/s/dkk6wyt3z)中申请`API_KEY``secret_key`
- 在`.env.*`文件中填写`nonebot_plugin_bottle_api_key``nonebot_plugin_bottle_secret_key`,参考[NoneBot2配置方式](https://v2.nonebot.dev/docs/tutorial/configuration#%E9%85%8D%E7%BD%AE%E6%96%B9%E5%BC%8F)
- 不配置该项则进行`简单屏蔽词审核`
- 简单屏蔽词审核
-`data/bottle/curse.json`手动填写json文件(`list`格式,文件不存在则调用审核后生成)
- 判断方法为若文字存在屏蔽词,则审核失败
- 格式:
```
["屏蔽词1","屏蔽词2"]
```
- 屏蔽词推荐(需要手动更改):[防嘴臭插件](https://github.com/tkgs0/nonebot-plugin-antiinsult/blob/main/nonebot_plugin_antiinsult/curse.json)
- 若为空列表则不进行审核
## 功能须知
- 所有用户:
- `扔漂流瓶`指令无字数限制,如需要可在代码中修改。若只说了扔漂流瓶,则插件将会监听用户的下一条消息。
- `捡漂流瓶`若捡到的漂流瓶存在回复,则会显示最近三条(默认),使用`查看漂流瓶`查看所有回复
- `查看漂流瓶`为保证随机性,无评论时不展示漂流瓶内容,可在代码中修改。漂流瓶的发送者可以通过本指令查看内容,无论有无评论。
- `评论漂流瓶`评论内容将通过该瓶子扔出的方式告诉扔出瓶子的人
- `举报漂流瓶`五次(默认)后将自动删除,举报成功后会私聊SUPERUSER漂流瓶详情内容
- `删除漂流瓶`漂流瓶发送者可以删除自己扔出的漂流瓶。二次确认会触发删除操作的指令为:`是/Y/Yes/y/yes`。其他的均直接取消操作。
- SUPERUSER:
- `删除漂流瓶`可以删除指定漂流瓶
- `清空漂流瓶`顾名思义,使用需谨慎
- `恢复漂流瓶`可以恢复被删除的漂流瓶
- `删除漂流瓶评论`可删除该发送者在该瓶的所有评论
- `漂流瓶详情`将会发送漂流瓶发送者的QQ号和群号,所有回复人的QQ号
- `漂流瓶黑名单``举报`选项是指`举报漂流瓶`的使用权限
- `漂流瓶数据库`存放在`data/bottle/data.json`
- `权限数据库` 存放在`data/bottle/permissionsList.json`
- `漂流瓶屏蔽词` 存放在`data/bottle/curse.json`中,**支持热更改**
## 权限控制
- 所有非SUPERUSER指令均受到权限控制
- `功能冷却开关`:插件默认开启,可在`data/bottle/permissionsList.json`中修改`enableCooldown`bool值(True/False)
- `功能冷却`:插件默认 30 秒冷却,可在`data/bottle/permissionsList.json`中修改`cooldownTime`
- 白名单优先级高于黑名单和冷却名单

* 配置文件(.env.*
-
| 配置项 | 配置名 | 变量类型 | 默认值 |
|:--------|:----------|:-------------:|------:|
| API KEY | nonebot_plugin_bottle_api_key | str | "" |
| SECRET KEY | nonebot_plugin_bottle_secret_key | str | "" |
| 是否缓存图片 | nonebot_plugin_bottle_local_storage | bool | True |
## 最大字符数量和换行数量配置
### 最大字符数量
- 最大字符数量配置用于限制漂流瓶最大可投掷的字数。
- 使用`len()`函数,所有汉字、英文字母、空格均被算作1。
- 该配置项设置为0时不限制字符数量。默认设置为0。
### 最大换行数量
- 最大换行数量,代表漂流瓶内容最大可拥有换行的数量。
- 可防止用户不断换行,没有触发最大字符数量限制,但是还会刷屏。
- 该配置项设置为0时不限制换行数量。默认设置为0。

## 文字审核API配置(可选`百度审核``简单屏蔽词审核`
- 百度审核
-[百度智能云](https://cloud.baidu.com/doc/ANTIPORN/s/dkk6wyt3z)中申请`API_KEY``secret_key`
-`.env.*`文件中填写`nonebot_plugin_bottle_api_key``nonebot_plugin_bottle_secret_key`,参考[NoneBot2配置方式](https://v2.nonebot.dev/docs/tutorial/configuration#%E9%85%8D%E7%BD%AE%E6%96%B9%E5%BC%8F)
- 不配置该项则进行`简单屏蔽词审核`
- 简单屏蔽词审核
-`data/bottle/curse.json`手动填写json文件(`list`格式,文件不存在则调用审核后生成)
- 判断方法为若文字存在屏蔽词,则审核失败
- 格式:
```
["屏蔽词1","屏蔽词2"]
```
- 屏蔽词推荐(需要手动更改):[防嘴臭插件](https://github.com/tkgs0/nonebot-plugin-antiinsult/blob/main/nonebot_plugin_antiinsult/curse.json)
- 若为空列表则不进行审核

* 更新日志
-
- ***重构版本*** 1.0.0 [2023-3-10] [#32](https://github.com/Todysheep/nonebot_plugin_bottle/issues/32) [@LambdaYH](https://github.com/LambdaYH)
- 使用`nonebot_plugin_datastore`重构
- 异步读取违禁词文件
- 异步读取违禁词文件
- 启动时将旧json数据迁移
- 优化图片缓存
- 调整require位置
- 0.2.7 [2023-2-25]
- `举报漂流瓶`现在可以禁止某人使用了(`漂流瓶黑名单 举报 [qq号]`
- 新增`恢复漂流瓶`指令,可以恢复被删除的漂流瓶
- 0.2.6 [2023-2-24]
- `举报漂流瓶`修复了单人可以举报多次的问题
- [ ] 格式化漂流瓶输出
## 配置文件(.env.*

<details>
<summary>更多更新</summary>
| 配置项 | 配置名 | 变量类型 | 默认值 |
|:--------|:----------|:-------------:|------:|
| API KEY | nonebot_plugin_bottle_api_key | str | "" |
| SECRET KEY | nonebot_plugin_bottle_secret_key | str | "" |
| 是否缓存图片 | nonebot_plugin_bottle_local_storage | bool | True |
| 漂流瓶最大字符数量 | nonebot_plugin_bottle_max_length | int | 0 |
| 漂流瓶最大换行数量 | nonebot_plugin_bottle_max_return | int | 0 |

- 0.2.5 [2023-2-24]
- 更改`requests`请求方式为`httpx` [#29](https://github.com/Todysheep/nonebot_plugin_bottle/issues/29)
- 适配`metadata` #29
- 💥破坏性更新 `api_key`与`secret_key`将在`.env.*`中填写(详见上方) [#29](https://github.com/Todysheep/nonebot_plugin_bottle/issues/29)
- 0.2.4
- 现在开始记录扔漂流瓶的时间,旧版本的漂流瓶时间为`0000-00-00 00:00:00`,使用`查看漂流瓶可以查看具体时间`
- 0.2.3
- `删除漂流瓶`现在所有人可用,并进行了一些权限限制
- `捡漂流瓶`函数更新了递归上限防止无限递归
- 要求后续内容输入的所有指令现需要空格隔开
- 0.2.2
- 更新`简单屏蔽词`功能,在未配置`api_key`和`secret_key`时进行简单的屏蔽词审核,而不是跳过审核
- 现在评论也需要经过文字审核
- 增加存放屏蔽词文件`data/bottle/curse.json`
- 0.2.1
- 增加删除漂流瓶评论功能
- 0.2.0
- 停止使用`black_group`
- 增加使用CD,黑/白名单群组
- 开始记录回复人QQ号(仅SUPERUSER使用`漂流瓶详情`可见)
- 0.1.8
- 增加`request`库要求
- 丢出漂流瓶后展示漂流瓶编号
- 0.1.7
- 新增json项`key`,将不使用`del`删除漂流瓶,而保留原漂流瓶数据便于管理者查看
- 新增json项`group_name`,`username`,将在API无法获取信息时使用
- 0.1.6
- 新增配置项`api_key`,'secret_key',用于文本审核
- 新增配置项`black_group`,用于屏蔽特定群聊

</details>
## 更新日志
- ***重构版本*** 1.0.0 [2023-3-10] [#32](https://github.com/Todysheep/nonebot_plugin_bottle/issues/32) [@LambdaYH](https://github.com/LambdaYH)
- 使用`nonebot_plugin_datastore`重构
- 异步读取违禁词文件
- 异步读取违禁词文件
- 启动时将旧json数据迁移
- 优化图片缓存
- 调整require位置
- 0.2.7 [2023-2-25]
- `举报漂流瓶`现在可以禁止某人使用了(`漂流瓶黑名单 举报 [qq号]`
- 新增`恢复漂流瓶`指令,可以恢复被删除的漂流瓶
- 0.2.6 [2023-2-24]
- `举报漂流瓶`修复了单人可以举报多次的问题
- [ ] 格式化漂流瓶输出

* 特别感谢
-
- **[@LambdaYH](https://github.com/LambdaYH)** PR了~~一个现有作者根本看不懂的~~重构版本 (1.0.0)
- [@a563696823](https://github.com/a563696823) 适配commit,更改config填写,适配httpx
- [@MTmin](https://github.com/MTmin) 多机器人版本
- [@Sevenyine](https://github.com/Sevenyine) 发了~~114514条~~issue
<details>
<summary>更多更新</summary>

* 效果展示
-
![image](https://user-images.githubusercontent.com/97968466/191049794-1b409436-fd70-43d9-8dcb-3575e82fd69b.png)
![image](https://user-images.githubusercontent.com/97968466/213113862-e6c7568b-8686-4e97-8f83-7354ff1cb704.png)
![image](https://user-images.githubusercontent.com/97968466/191052704-1b5ec89d-7a49-40d6-a5d9-b0a0171c730e.png)
![image](https://user-images.githubusercontent.com/97968466/191049649-2e8d8555-f285-470f-9f7b-f5a0994341ee.png)
- 0.2.5 [2023-2-24]
- 更改`requests`请求方式为`httpx` [#29](https://github.com/Todysheep/nonebot_plugin_bottle/issues/29)
- 适配`metadata` #29
- 💥破坏性更新 `api_key`与`secret_key`将在`.env.*`中填写(详见上方) [#29](https://github.com/Todysheep/nonebot_plugin_bottle/issues/29)
- 0.2.4
- 现在开始记录扔漂流瓶的时间,旧版本的漂流瓶时间为`0000-00-00 00:00:00`,使用`查看漂流瓶可以查看具体时间`
- 0.2.3
- `删除漂流瓶`现在所有人可用,并进行了一些权限限制
- `捡漂流瓶`函数更新了递归上限防止无限递归
- 要求后续内容输入的所有指令现需要空格隔开
- 0.2.2
- 更新`简单屏蔽词`功能,在未配置`api_key`和`secret_key`时进行简单的屏蔽词审核,而不是跳过审核
- 现在评论也需要经过文字审核
- 增加存放屏蔽词文件`data/bottle/curse.json`
- 0.2.1
- 增加删除漂流瓶评论功能
- 0.2.0
- 停止使用`black_group`
- 增加使用CD,黑/白名单群组
- 开始记录回复人QQ号(仅SUPERUSER使用`漂流瓶详情`可见)
- 0.1.8
- 增加`request`库要求
- 丢出漂流瓶后展示漂流瓶编号
- 0.1.7
- 新增json项`key`,将不使用`del`删除漂流瓶,而保留原漂流瓶数据便于管理者查看
- 新增json项`group_name`,`username`,将在API无法获取信息时使用
- 0.1.6
- 新增配置项`api_key`,'secret_key',用于文本审核
- 新增配置项`black_group`,用于屏蔽特定群聊

</details>

## 特别感谢
- **[@LambdaYH](https://github.com/LambdaYH)** PR了~~一个现有作者根本看不懂的~~重构版本 (1.0.0)
- [@a563696823](https://github.com/a563696823) 适配commit,更改config填写,适配httpx
- [@MTmin](https://github.com/MTmin) 多机器人版本
- [@Sevenyine](https://github.com/Sevenyine) 发了~~114514条~~issue

## 效果展示
![image](https://user-images.githubusercontent.com/97968466/191049794-1b409436-fd70-43d9-8dcb-3575e82fd69b.png)
![image](https://user-images.githubusercontent.com/97968466/213113862-e6c7568b-8686-4e97-8f83-7354ff1cb704.png)
![image](https://user-images.githubusercontent.com/97968466/191052704-1b5ec89d-7a49-40d6-a5d9-b0a0171c730e.png)
![image](https://user-images.githubusercontent.com/97968466/191049649-2e8d8555-f285-470f-9f7b-f5a0994341ee.png)
8 changes: 7 additions & 1 deletion nonebot_plugin_bottle/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
)

from .model import Bottle
from .config import Config
from .config import Config, maxlen, maxrt
from .data_source import (
ba,
text_audit,
Expand Down Expand Up @@ -200,6 +200,12 @@ async def _(
if "__has_content__" not in state and message_text in cancel:
await throw.finish("已取消扔漂流瓶操作。")

if maxlen != 0 and len(message_text) > maxlen:
await throw.finish("您漂流瓶的内容中,字符数量超出最大字符限制:"+str(maxlen)+"。您可以尝试减少漂流瓶内容。\n当前字符数量:"+len(message_text))
ba.add("cooldown", event.user_id)
if maxrt != 0 and message_text.count('\n') > maxrt:
await throw.finish("您漂流瓶的内容中,换行数量超出了最大换行限制。您可尝试减少换行数量。\n当前换行数量:"+message_text.count('\n'))
ba.add("cooldown", event.user_id)
audit = await text_audit(text=message_text)
if not audit == "pass":
if audit == "Error":
Expand Down
6 changes: 6 additions & 0 deletions nonebot_plugin_bottle/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,15 @@ class Config(BaseModel, extra=Extra.ignore):
nonebot_plugin_bottle_secret_key: str = ""
# 是否将图片保存在本地
nonebot_plugin_bottle_local_storage: bool = True
# 瓶子最大字符数量
nonebot_plugin_bottle_max_length: int = 0
# 最大换行数量
nonebot_plugin_bottle_max_return: int = 0


config = Config.parse_obj(get_driver().config.dict())
api_key = config.nonebot_plugin_bottle_api_key
secret_key = config.nonebot_plugin_bottle_secret_key
local_storage = config.nonebot_plugin_bottle_local_storage
maxlen = config.nonebot_plugin_bottle_max_length
maxrt = config.nonebot_plugin_bottle_max_return

0 comments on commit 06c740c

Please sign in to comment.