diff --git a/README.md b/README.md
index 0c88052daa..ccde167e1a 100644
--- a/README.md
+++ b/README.md
@@ -1,1650 +1,1652 @@
-
-
-
-
-
-
ZeroBot-Plugin
-
- “椛椛是[真寻](https://github.com/HibiKier/zhenxun_bot)的好朋友!”
-
- ZeroBot-Plugin 是 ZeroBot 的 实用插件合集
-
-
-
-
- [![miraigo](https://img.shields.io/badge/OneBot-MiraiGo-green.svg?style=social&logo=appveyor)](https://github.com/Mrs4s/MiraiGo)
- [![oicq](https://img.shields.io/badge/OneBot-OICQ-green.svg?style=social&logo=appveyor)](https://github.com/takayama-lily/oicq)
- [![mirai](https://img.shields.io/badge/OneBot-Mirai-green.svg?style=social&logo=appveyor)](https://github.com/mamoe/mirai)
-
-
-
- [![go](https://goreportcard.com/badge/github.com/FloatTech/ZeroBot-Plugin?style=flat-square&logo=go)](https://goreportcard.com/badge/github.com/FloatTech/ZeroBot-Plugin)
- [![onebot](https://img.shields.io/badge/onebot-v11-black?style=flat-square&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAMAAADxPgR5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxQTFRF////29vbr6+vAAAAk1hCcwAAAAR0Uk5T////AEAqqfQAAAKcSURBVHja7NrbctswDATQXfD//zlpO7FlmwAWIOnOtNaTM5JwDMa8E+PNFz7g3waJ24fviyDPgfhz8fHP39cBcBL9KoJbQUxjA2iYqHL3FAnvzhL4GtVNUcoSZe6eSHizBcK5LL7dBr2AUZlev1ARRHCljzRALIEog6H3U6bCIyqIZdAT0eBuJYaGiJaHSjmkYIZd+qSGWAQnIaz2OArVnX6vrItQvbhZJtVGB5qX9wKqCMkb9W7aexfCO/rwQRBzsDIsYx4AOz0nhAtWu7bqkEQBO0Pr+Ftjt5fFCUEbm0Sbgdu8WSgJ5NgH2iu46R/o1UcBXJsFusWF/QUaz3RwJMEgngfaGGdSxJkE/Yg4lOBryBiMwvAhZrVMUUvwqU7F05b5WLaUIN4M4hRocQQRnEedgsn7TZB3UCpRrIJwQfqvGwsg18EnI2uSVNC8t+0QmMXogvbPg/xk+Mnw/6kW/rraUlvqgmFreAA09xW5t0AFlHrQZ3CsgvZm0FbHNKyBmheBKIF2cCA8A600aHPmFtRB1XvMsJAiza7LpPog0UJwccKdzw8rdf8MyN2ePYF896LC5hTzdZqxb6VNXInaupARLDNBWgI8spq4T0Qb5H4vWfPmHo8OyB1ito+AysNNz0oglj1U955sjUN9d41LnrX2D/u7eRwxyOaOpfyevCWbTgDEoilsOnu7zsKhjRCsnD/QzhdkYLBLXjiK4f3UWmcx2M7PO21CKVTH84638NTplt6JIQH0ZwCNuiWAfvuLhdrcOYPVO9eW3A67l7hZtgaY9GZo9AFc6cryjoeFBIWeU+npnk/nLE0OxCHL1eQsc1IciehjpJv5mqCsjeopaH6r15/MrxNnVhu7tmcslay2gO2Z1QfcfX0JMACG41/u0RrI9QAAAABJRU5ErkJggg==)](https://t.me/zerobotplugin)
- [![zerobot](https://img.shields.io/badge/zerobot-v1.7.4-black?style=flat-square&logo=go)](https://github.com/wdvxdr1123/ZeroBot)
-
-
-
- [![license](https://img.shields.io/github/license/FloatTech/ZeroBot-Plugin.svg?style=flat-square&logo=gnu)](https://raw.githubusercontent.com/FloatTech/ZeroBot-Plugin/master/LICENSE)
- [![tencent-qq](https://img.shields.io/badge/%E7%BE%A4-1048452984-red?style=flat-square&logo=tencent-qq)](https://jq.qq.com/?_wv=1027&k=QMb7x1mM)
- [![tencent-guild](https://img.shields.io/badge/%E9%A2%91%E9%81%93-Zer0BotPlugin-yellow?style=flat-square&logo=tencent-qq)](https://pd.qq.com/s/fjkx81mnr)
- [![telegram](https://img.shields.io/badge/Telegram-click%20me-informational?style=flat-square&logo=telegram)](https://t.me/zerobotplugin)
-
- 本项目符合 [OneBot](https://github.com/howmanybots/onebot) 标准,可基于以下项目与机器人框架/平台进行交互
- | 项目地址 | 平台 | 核心作者 | 备注 |
- | :---: | :---: | :---: | :---: |
- | [LLOneBot](https://github.com/LLOneBot/LLOneBot) | NTQQ | linyuchen | 目前推荐使用 |
- | [go-cqhttp](https://github.com/Mrs4s/go-cqhttp) | [MiraiGo](https://github.com/Mrs4s/MiraiGo) | Mrs4s | 因签名原因不再维护 |
- | [onebot-kotlin](https://github.com/yyuueexxiinngg/onebot-kotlin) | [Mirai](https://github.com/mamoe/mirai) | yyuueexxiinngg | 不再积极维护 |
- | [oicq/http-api](https://github.com/takayama-lily/oicq/tree/master/http-api) | [OICQ](https://github.com/takayama-lily/oicq) | takayama | 已归档不再维护 |
-
- [![Star Trend](https://api.star-history.com/svg?repos=FloatTech/ZeroBot-Plugin&type=Timeline)](https://seladb.github.io/StarTrack-js/#/preload?r=FloatTech,ZeroBot-Plugin)
-
-
-
-> 专为[后 go-cqhttp 时代](https://github.com/Mrs4s/go-cqhttp/issues/2471)开发迁移的`类zbp`新机器人现已出炉,基于官方api,稳定不风控: [NanoBot-Plugin](https://github.com/FloatTech/NanoBot-Plugin)
-
-> 如果您对开发插件感兴趣,欢迎加入[ZeroBot-Plugin-Playground](https://github.com/FloatTech/ZeroBot-Plugin-Playground)
-
-> webui持续开发中, 欢迎加入[ZeroBot-Plugin-Webui](https://github.com/FloatTech/ZeroBot-Plugin-Webui)
-
-## 命令行参数
-> `[]`代表是可选参数
-```bash
-zerobot [-h] [-m] [-n nickname] [-t token] [-u url] [-g url] [-p prefix] [-d|w] [-c|s config.json] [-l latency] [-r ringlen] [-x max process time] [-mirror] [qq1 qq2 qq3 ...] [&]
-```
-- **-h**: 显示帮助
-- **-m**: 不自动标记消息为已读
-- **-n nickname**: 设置默认昵称,默认为`椛椛`
-- **-t token**: 设置`AccessToken`,默认为空
-- **-u url**: 设置`Url`,默认为`ws://127.0.0.1:6700`
-- ~~**-g url**~~(默认禁用): 设置`webui url`,默认为`127.0.0.1:3000`
-- **-p prefix**: 设置命令前缀,默认为`/`
-- **-d|w**: 开启 debug | warning 级别及以上日志输出
-- **-c config.json**: 从`config.json`加载`bot`配置
-- **-s config.json**: 保存现在`bot`配置到`config.json`
-- **-l latency**: 全局处理延时 (ms)
-- **-r ringlen**: 接收消息环缓冲区大小,`0`为不设缓冲,并发处理
-- **-x max process time**: 最大处理时间 (min)
-- **-mirror**: 直接使用镜像懒加载数据站而不尝试访问源站
-- **qqs**: superusers 的 qq 号
-- **&**: 驻留在后台,必须放在最后,仅`Linux`下有效
-
-默认配置文件格式如下。当选择从配置文件加载时,将忽略相应命令行参数。
-```json
-{
- "zero": {
- "nickname": ["椛椛", "ATRI", "atri", "亚托莉", "アトリ"],
- "command_prefix": "/",
- "super_users": [],
- "ring_len": 4096,
- "latency": 233000000,
- "max_process_time": 240000000000,
- "mark_message": true
- },
- "ws": [{ "Url": "ws://127.0.0.1:6700", "AccessToken": "" }],
- "wss": null
-}
-```
-
-## 功能
-> 在编译时,以下功能除插件控制外,均可通过注释`main.go`中的相应`import`而物理禁用,减小插件体积。
-
-> 通过插件控制,还可动态管理某个功能在某个群的打开/关闭。
-
-> 插件的优先级为`import`的先后顺序。
-
-> `webui`默认禁用不编译,打开后会增加程序体积。
-
-
- 插件控制
-
- - [x] /响应 (在发送的群/用户开始工作)
-
- - [x] /沉默 (在发送的群/用户停止工作)
-
- - [x] /全局响应 (在所有位置开始工作,无视单独的沉默)
-
- - [x] /全局沉默 (在所有本应沉默的位置停止工作,显式指定启用的位置不受影响)
-
- - [x] /启用 xxx (在发送的群/用户启用xxx)
-
- - [x] /禁用 xxx (在发送的群/用户禁用xxx)
-
- - [x] /此处启用所有插件
-
- - [x] /此处禁用所有插件
-
- - [x] /全局启用 xxx
-
- - [x] /全局禁用 xxx
-
- - [x] /还原 xxx (在发送的群/用户还原xxx的开启状态到初始状态)
-
- - 注:当全局未配置或与默认相同时,状态取决于单独配置,后备为默认配置;当全局与默认不同时,状态取决于全局配置,单独配置失效。
-
- - [x] /改变默认启用状态 xxx
-
- - [x] /禁止 service qq1 qq2... (禁止 qqs 使用服务 service)
-
- - [x] /允许 service qq1 qq2... (重新允许 qqs 使用服务 service)
-
- - [x] /封禁 qq1 qq2... (禁止 qqs 使用全部服务)
-
- - [x] /解封 qq1 qq2... (允许 qqs 使用全部服务)
-
- - [x] /用法 xxx
-
- - [x] /服务列表
-
- - [x] /设置服务列表显示行数 xx (默认值为 9, 该设置仅运行时有效, zbp 重启后重置)
-
- - [x] (默认禁用) /设置webui用户名 zerobot 密码 123456
-
- - [x] (默认禁用) /webui启动
-
- - [x] (默认禁用) /webui停止
-
- - [x] @Bot 插件冲突检测 (会在本群发送一条消息并在约 1s 后撤回以检测其它同类 bot 中已启用的插件并禁用)
-
-
-
- 动态加载插件
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin-Dynamic/dyloader"`
-
- - 本功能需要`cgo`,故已分离出主线。详见[ZeroBot-Plugin-Dynamic](https://github.com/FloatTech/ZeroBot-Plugin-Dynamic)
-
-
-
-### *高优先级*
-
- 聊天
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/chat"`
-
- - [x] [BOT名字]
-
- - [x] [戳一戳BOT]
-
- - [x] 空调开
-
- - [x] 空调关
-
- - [x] 群温度
-
- - [x] 设置温度[正整数]
-
-
-
- 聊天时长统计
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/chatcount"`
-
- - [x] 查询水群@xxx
-
- - [x] 查看水群排名
-
-
-
- 睡眠管理
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/sleep_manage"`
-
- - [x] 早安 | 晚安
-
-
-
- ATRI
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/atri"
- `
- - [x] 具体指令看 /用法 atri
-
- - 注:本插件基于 [ATRI](https://github.com/Kyomotoi/ATRI) ,为 Golang 移植版
-
-
-
- 群管
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/manager"`
-
- - [x] 禁言[@xxx][分钟]
-
- - [x] 解除禁言[@xxx]
-
- - [x] 我要自闭 | 禅定 x [分钟 | 小时 | 天]
-
- - [x] 开启全员禁言
-
- - [x] 解除全员禁言
-
- - [x] 升为管理[@xxx]
-
- - [x] 取消管理[@xxx]
-
- - [x] 修改名片[@xxx][xxx]
-
- - [x] 修改头衔[@xxx][xxx]
-
- - [x] 申请头衔[xxx]
-
- - [x] 踢出群聊[@xxx]
-
- - [x] 退出群聊[群号]@Bot
-
- - [x] \*入群欢迎
-
- - [x] \*退群通知
-
- - [x] 设置欢迎语[欢迎~] 可选添加 [{at}] [{nickname}] [{avatar}] [{id}]
-
- - [x] 在[MM]月[dd]日的[hh]点[mm]分时(用[url])提醒大家[xxx]
-
- - [x] 在[MM]月[每周 | 周几]的[hh]点[mm]分时(用[url])提醒大家[xxx]
-
- - [x] 取消在[MM]月[dd]日的[hh]点[mm]分的提醒
-
- - [x] 取消在[MM]月[每周 | 周几]的[hh]点[mm]分的提醒
-
- - [x] 在"cron"时(用[url])提醒大家[xxx]
-
- - [x] 取消在"cron"的提醒
-
- - [x] 列出所有提醒
-
- - [x] 翻牌
-
- - [x] 赞我
-
- - [x] [开启 | 关闭]入群验证
-
- - [x] [开启 | 关闭]gist加群自动审批
-
- - [x] 对信息回复:[设置 | 取消]精华
-
- - [x] 取消精华 [信息ID]
-
- - [x] /精华列表
-
- - [ ] 同意好友请求
-
- - [x] 对信息回复: 撤回
-
- - [ ] 警告[@xxx]
-
- - 注:使用gist加群自动审批,请在群介绍添加以下说明,同时开启`需要回答问题并由管理员审核`:加群请在github新建一个gist,其文件名为本群群号的字符串的md5(小写),内容为一行,是当前unix时间戳(10分钟内有效)。然后请将您的用户名和gist哈希(小写)按照username/gisthash的格式填写到回答即可。
-
- - 设置欢迎语可选添加参数说明:{at}可在发送时艾特被欢迎者 {nickname}是被欢迎者名字 {avatar}是被欢迎者头像 {uid}是被欢迎者QQ号 {gid}是当前群群号 {groupname} 是当前群群名
-
-
-
- 定时指令触发器
-
- `import _ "github.com/FloatTech/zbputils/job"`
-
- - 注意:触发器具有限速,每 2s 仅允许最多一次触发
-
- - [x] 记录以"完全匹配关键词"触发的(代表我执行的)指令
-
- - [x] 取消以"完全匹配关键词"触发的(代表我执行的)指令
-
- - [x] 记录在"cron"触发的(别名xxx的)指令
-
- - [x] 取消在"cron"触发的指令
-
- - [x] 查看所有触发指令
-
- - [x] 查看在"cron"触发的指令
-
- - [x] 查看以"完全匹配关键词"触发的(代表我执行的)指令
-
- - [x] 注入指令结果:任意指令
-
- - [x] 执行指令:任意指令
-
- - 注:任意指令可以使用形如`?::参数1提示语::1!`,`?::参数2提示语::2!`,`?::?可选参数3提示语,不回答将填入空值::3!`,`!::从url获取的参数::4!`,`!::?可选的从url获取的参数,出错将填入空值::5!`的未定参数,在注入时一一匹配
-
- - 一些示例
-
-> 每日9:30推送摸鱼人日历
-
-```
-记录在"30 9 * * *"触发的指令
-run[CQ:image,file=https://api.vvhan.com/api/moyu]
-```
-
-> 每日12:00以1/2概率执行coser指令
-
-```python
-记录在"0 12 * * *"触发的指令
-注入指令结果:>runcoderaw py
-from random import random
-if random() > 0.5: print('coser')
-else: print('今天没有coser哦~')
-```
-
-> 每日15:00询问设置定时者否想看coser
-
-```python
-记录在"0 15 * * *"触发的指令
-注入指令结果:>runcoderaw py
-if '?::想看coser吗?::1!' == '想': print('coser')
-else: print('好吧')
-```
-
-> 自行编写简易的选择困难症助手小插件
-
-```python
-记录以"简易的选择困难症助手"触发的指令
-执行指令:>runcoderaw py
-from random import random
-if random() > 0.5: print('您最终会选?::请输入您的选择1::1!')
-else: print('您最终会选?::请输入您的选择2::2!')
-简易的选择困难症助手
-```
-
-> 自行编写随机b站404页趣图插件
-
-```python
-记录以"随机b站404页趣图"触发的代表我执行的指令
-注入指令结果:>runcoderaw py
-import json
-j = json.loads(r'''!::https://api.iyk0.com/bili_chart::1!''')
-print("run[CQ:image,file="+j["img"]+"]")
-随机b站404页趣图
-```
-
-![随机b站404页趣图](https://user-images.githubusercontent.com/41315874/157371451-c09ad3bb-c61a-4a42-9c47-fab3305bc0f8.png)
-
- - [x] [我|大家|有人][说|问][正则表达式]你[答|说|做|执行][模版]
-
- - [x] [查看|看看][我|大家|有人][说|问][正则表达式]
-
- - [x] 删除[大家|有人|我][说|问|让你做|让你执行][正则表达式]
-
- - 注:模版是指含有`$1` `$2`这样的未定参数,会在正则匹配时按顺序填入子匹配对应值
-
-
-
-### *中优先级*
-
- ahsai tts
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/ahsai"`
-
- - [x] 使[ 伊織弓鶴 | 紲星あかり | 結月ゆかり | 京町セイカ |東北きりたん | 東北イタコ | ついなちゃん標準語 | ついなちゃん関西弁 | 音街ウナ | 琴葉茜 | 吉田くん | 民安ともえ | 桜乃そら | 月読アイ | 琴葉葵 | 東北ずん子 | 月読ショウタ | 水奈瀬コウ ]说(日语)
-
-
-
- AIfalse
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/ai_false"`
-
- - [x] 查询计算机当前活跃度: [检查身体 | 自检 | 启动自检 | 系统状态]
-
- - [x] 设置默认限速为每 m [分钟 | 秒] n 次触发
-
-
-
- AIWife
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/aiwife"`
-
- - [x] waifu | 随机waifu(从[100000个AI生成的waifu](https://www.thiswaifudoesnotexist.net/)中随机一位)
-
-
-
- 支付宝到账语音
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/alipayvoice"`
-
- - [x] 支付宝到账 1
-
-
-
- 触发者撤回时也自动撤回
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/autowithdraw"`
-
- - [x] 撤回一条消息
-
-
-
- base16384加解密
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/b14"`
-
- - [x] 加密xxx
-
- - [x] 解密xxx
-
- - [x] 用yyy加密xxx
-
- - [x] 用yyy解密xxx
-
-
-
- 百度内容审核
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/baiduaudit"`
-
- - [x] 获取BDAkey
-
- - [x] 配置BDAKey [API Key] [Secret Key]
-
- - [x] 获取BDAkey
-
- - [x] [开启|关闭]内容审核
-
- - [x] [开启|关闭]撤回提示
-
- - [x] [开启|关闭]详细提示
-
- - [x] [开启|关闭]撤回禁言
-
- - [x] [开启|关闭]禁言累加
-
- - [x] [开启|关闭]文本检测
-
- - [x] [开启|关闭]图像检测
-
- - [x] 设置最大禁言时间[分钟,默认:60,最大43200]
-
- - [x] 设置每次累加时间[分钟,默认:1]
-
- - [x] 设置撤回禁言时间[分钟,默认:1]
-
- - [x] 查看检测类型
-
- - [x] 查看检测配置
-
- - [x] 测试文本检测[文本内容]
-
- - [x] 测试图像检测[图片]
-
- - [x] 设置检测类型[类型编号]
-
- - [x] 设置不检测类型[类型编号]
-
- 检测类型编号列表:[1:违禁违规|2:文本色情|3:敏感信息|4:恶意推广|5:低俗辱骂|6:恶意推广-联系方式|7:恶意推广-软文推广]
-
-
- base64卦加解密
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/base64gua"`
-
- - [x] 六十四卦加密xxx
-
- - [x] 六十四卦解密xxx
-
- - [x] 六十四卦用yyy加密xxx
-
- - [x] 六十四卦用yyy解密xxx
-
-
-
- base天城文加解密
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/baseamasiro"`
-
- - [x] 天城文加密xxx
-
- - [x] 天城文解密xxx
-
- - [x] 天城文用yyy加密xxx
-
- - [x] 天城文用yyy解密xxx
-
-
-
- bilibili
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/bilibili"`
-
- - [x] >vup info [xxx]
-
- - [x] >user info [xxx]
-
- - [x] 查成分 [xxx]
-
- - [x] 查弹幕 [xxx] 2 (最后一个参数是页码)
-
- - [x] 设置b站cookie b_ut=7;buvid3=0;i-wanna-go-back=-1;innersign=0; (最好把cookie设全)
-
- 获取Cookie可以使用[这个工具](https://github.com/XiaoMiku01/login_bili_go)
-
- - [x] 更新vup
-
-
-
- b站动态、专栏、视频、直播解析
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/bilibili"`
-
- - [x] t.bilibili.com/642277677329285174 | bilibili.com/read/cv17134450 | bilibili.com/video/BV13B4y1x7pS | live.bilibili.com/22603245
-
-
-
- b站动态、直播推送,需要配合job一起使用
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/bilibili"`
-
- - [x] 添加b站订阅[uid|name]
-
- - [x] 取消b站订阅[uid|name]
-
- - [x] 取消b站动态订阅[uid|name]
-
- - [x] 取消b站直播订阅[uid|name]
-
- - [x] b站推送列表
-
- - [x] 拉取b站推送 (使用job执行定时任务------记录在"@every 5m"触发的指令)
-
-
-
- 书评
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/book_review"`
-
- - [x] 书评[xxx]
-
- - [x] 随机书评
-
-
-
- 选择困难症帮手
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/choose"`
-
- - [x] 选择[选择项1]还是[选项2]还是[更多选项]
-
-
-
- 抽象话
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/chouxianghua"`
-
- - [x] 抽象翻译[xxx]
-
-
-
- 英文字符翻转
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/chrev"`
-
- - [x] 翻转 I love you
-
-
-
- coser
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/coser" `
-
- - [x] coser
-
-
-
- cp短打
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/cpstory"`
-
- - [x] 组cp[@xxx][@xxx]
-
- - [x] 磕cp大老师 雪乃
-
-
-
- 今日早报
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/dailynews"`
-
- - [x] 今日早报
-
-
-
- DeepDanbooru二次元图标签识别
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/danbooru"`
-
- - [x] 鉴赏图片[图片]
-
-
-
- 嘉然
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/diana"`
-
- - [x] 小作文
-
- - [x] 发大病
-
- - [x] 教你一篇小作文[作文]
-
-
-
- 程序员做饭指南
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/dish"`
-
- - [x] 怎么做 | 烹饪[菜名]
-
- - [x] 随机菜谱 | 随便做点菜
-
-
-
- 多功能抽签
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/drawlots"`
-
- 支持图包文件夹和gif抽签
-
- - [x] (刷新)抽签列表
-
- - [x] 抽[签名]签
-
- - [x] 看签[gif签名]
-
- - [x] 加签[签名][gif图片]
-
- - [x] 删签[gif签名]
-
-
-
- 漂流瓶
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/drift_bottle"`
-
- - [x] @Bot pick (随机捞一个漂流瓶)
-
- - [x] @Bot throw xxx (投递内容xxx,支持图片文字,投递内容需要大于10个字符或者带有图片)
-
-
-
- 合成emoji
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/emojimix"`
-
- - [x] [emoji][emoji]
-
-
-
- 颜文字抽象转写
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/emozi"`
-
- - [x] 抽象转写[文段]
- - [x] 抽象还原[文段]
- - [x] 抽象登录[用户名]
-
-
-
- 好友申请及群聊邀请事件处理
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/event"`
-
- - [x] [开启|关闭]自动同意[申请|邀请|主人]
-
- - [x] [同意|拒绝][申请|邀请][flag]
-
- - flag跟随事件一起发送, 默认同意主人的事件
-
-
-
- 渲染任意文字到图片
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/font"`
-
- - [x] (用[终末体|终末变体|紫罗兰体|樱酥体|Consolas体|粗苹方体|未来荧黑体|Gugi体|八丸体|Impact体|猫啃体|苹方体])渲染(抖动)文字xxx
-
-
-
- 每日运势
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/fortune"`
-
- - [x] 运势 | 抽签
-
- - [x] 设置底图[车万 DC4 爱因斯坦 星空列车 樱云之恋 富婆妹 李清歌 公主连结 原神 明日方舟 碧蓝航线 碧蓝幻想 战双 阴阳师 赛马娘 东方归言录 奇异恩典 夏日口袋 ASoul Hololive]
-
-
-
- 笑话
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/funny"`
-
- - [x] 讲个笑话[@xxx|qq号|人名] | 夸夸[@xxx|qq号|人名]
-
-
-
- 原神抽卡
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/genshin"`
-
- - [x] 切换原神卡池
-
- - [x] 原神十连
-
-
-
- gif
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/gif"`
-
- - [x] 爬[@xxx]
-
- - [x] 摸[@xxx]
-
- - [x] 搓[@xxx]
-
- - 注:更多指令见项目 --> https://github.com/FloatTech/ZeroBot-Plugin-Gif
-
-
-
- GitHub仓库搜索
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/github"`
-
- - [x] >github [xxx]
-
- - [x] >github -p [xxx]
-
-
-
- 猜歌
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/guessmusic"`
-
- 猜歌插件(该插件依赖ffmpeg)
-
- ---------主 人 指 令---------
- - [x] 设置猜歌歌库路径 [绝对路径]
- - [x] [创建/删除]歌单 [歌单名称]
- - [x] 下载歌曲[歌曲名称/网易云歌曲ID]到[歌单名称]
-
- -------管 理 员 指 令--------
- - [x] 设置猜歌默认歌单 [歌单名称]
- - [x] 上传歌曲[群文件的音乐名]到[歌单名称]
-
- ------公 用 指 令------
- - [x] 歌单列表
- - [x] [个人/团队]猜歌
-
- ------插 件 扩 展------
-
- - 本插件内置了[NeteaseCloudMusicApi](https://binaryify.github.io/NeteaseCloudMusicApi/#/)框架的一些功能
- - [x] 设置猜歌API帮助
- - [x] 设置猜歌API [API首页网址]
- - [x] 猜歌[开启/关闭][歌单/歌词]自动下载
- - [ ] 登录网易云
- - [x] 歌单信息 [网易云歌单链接/ID]
- - [x] [歌单名称]绑定网易云[网易云歌单链接/ID]
- - [x] 下载歌单[网易云歌单链接/ID]到[歌单名称]
- - [x] 解除绑定 [歌单名称]
-
-
-
- 一言
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/hitokoto"`
-
- - [x] 一言[xxx]
-
- - [x] 系列一言
-
-
-
- 炉石
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/hs"`
-
- - [x] 搜卡[xxxx]
-
- - [x] [卡组代码xxx]
-
- - 注:更多搜卡指令参数:https://hs.fbigame.com/misc/searchhelp
-
-
-
- 百人一首
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/hyaku"`
-
- - [x] 百人一首
-
- - [x] 百人一首之n
-
-
-
- 注入指令
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/inject"`
-
- - [x] run[CQ码]
-
-
-
- 煎蛋网无聊图
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/jandan"`
-
- - [x] 来份[屌|弔|吊]图
-
- - [x] 更新[屌|弔|吊]图
-
-
-
- 日语听力学习材料
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/jptingroom"`
-
- - [x] 随机日语听力
-
- - [x] 随机日语歌曲
-
- - [x] 日语听力 xxx
-
- - [x] 日语歌曲 xxx
-
-
-
- 疯狂星期四
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/kfccrazythursday"`
-
- - [x] 疯狂星期四
-
-
-
- kokomi原神面板
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/kokomi"`
-
- - [x] kokomi菜单
-
- - [x] XX面板
-
- - 注:本插件未并入主仓库,需自行安装(须源码方式运行才能添加插件),安装地址[kokomi-原神面板查询插件](https://github.com/lianhong2758/kokomi-plugin)
-
-
-
- lolicon
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/lolicon"`
-
- - [x] 随机图片
-
- - [x] 随机图片 萝莉|少女
-
- - [x] 设置随机图片地址[http...]
-
- - 每一小时发一张图
-```
-记录在"@every 1h"触发的指令
-来份萝莉
-```
-
-
-
- 桑帛云 API
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/lolimi"`
-
- - [x] 随机妹子
-
- - [x] 随机绕口令
-
- - [x] 颜值鉴定[图片]
-
- - [x] 随机情话
-
- - [x] 发病 嘉然
-
- - [x] 让[嘉然|塔菲|东雪莲|懒羊羊|科比|孙笑川|陈泽|丁真|空|荧|派蒙|纳西妲|阿贝多|温迪|枫原万叶|钟离|荒泷一斗|八重神子|艾尔海森|提纳里|迪希雅|卡维|宵宫|莱依拉|赛诺|诺艾尔|托马|凝光|莫娜|北斗|神里绫华|雷电将军|芭芭拉|鹿野院平藏|五郎|迪奥娜|凯亚|安柏|班尼特|琴|柯莱|夜兰|妮露|辛焱|珐露珊|魈|香菱|达达利亚|砂糖|早柚|云堇|刻晴|丽莎|迪卢克|烟绯|重云|珊瑚宫心海|胡桃|可莉|流浪者|久岐忍|神里绫人|甘雨|戴因斯雷布|优菈|菲谢尔|行秋|白术|九条裟罗|雷泽|申鹤|迪娜泽黛|凯瑟琳|多莉|坎蒂丝|萍姥姥|罗莎莉亚|留云借风真君|绮良良|瑶瑶|七七|奥兹|米卡|夏洛蒂|埃洛伊|博士|女士|大慈树王|三月七|娜塔莎|希露瓦|虎克|克拉拉|丹恒|希儿|布洛妮娅|瓦尔特|杰帕德|佩拉|姬子|艾丝妲|白露|星|穹|桑博|伦纳德|停云|罗刹|卡芙卡|彦卿|史瓦罗|螺丝咕姆|阿兰|银狼|素裳|丹枢|黑塔|景元|帕姆|可可利亚|半夏|符玄|公输师傅|奥列格|青雀|大毫|青镞|费斯曼|绿芙蓉|镜流|信使|丽塔|失落迷迭|缭乱星棘|伊甸|伏特加女孩|狂热蓝调|莉莉娅|萝莎莉娅|八重樱|八重霞|卡莲|第六夜想曲|卡萝尔|姬子|极地战刃|布洛妮娅|次生银翼|理之律者|真理之律者|迷城骇兔|希儿|魇夜星渊|黑希儿|帕朵菲莉丝|天元骑英|幽兰黛尔|德丽莎|月下初拥|朔夜观星|暮光骑士|明日香|李素裳|格蕾修|梅比乌斯|渡鸦|人之律者|爱莉希雅|爱衣|天穹游侠|琪亚娜|空之律者|终焉之律者|薪炎之律者|云墨丹心|符华|识之律者|维尔薇|始源之律者|芽衣|雷之律者|苏莎娜|阿波尼亚|陆景和|莫弈|夏彦|左然]说我测尼玛
-
-
-
- MagicPrompt-Stable-Diffusion吟唱提示
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/magicprompt"`
-
- - [x] 吟唱提示[xxxx]
-
-
-
- 钓鱼模拟器
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/mcfish"`
-
- - [x] 钓鱼商店
- - [x] 购买xxx [数量]
- - [x] 出售[xxx [数量]|所有垃圾]
- - [x] 钓鱼背包
- - [x] 装备[xx竿|三叉戟|美西螈]
- - [x] 附魔[诱钓|海之眷顾]
- - [x] 修复鱼竿
- - [x] 合成[xx竿|三叉戟]
- - [x] 进行钓鱼
- - [x] 进行n次钓鱼
-
-
-
- 简易midi音乐制作
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/midicreate"`
-
- - [x] midi制作 CCGGAAGR FFEEDDCR GGFFEEDR GGFFEEDR CCGGAAGR FFEEDDCR
-
- - [x] 个人听音练习
-
- - [x] 团队听音练习
-
- - [x] *.mid (midi 转 txt)
-
- - [x] midi制作*.txt (txt 转 midi)
-
- - [x] 设置音色40 (0~127)
-
- - [x] 注: 该插件需要安装timidity, linux安装脚本可参考 https://gitcode.net/anto_july/midi/-/raw/master/timidity.sh, windows安装脚本可参考 https://gitcode.net/anto_july/midi/-/raw/master/timidity.bat?inline=false, windows需要管理员模式运行
-
- - [x] 符号说明: C5是中央C,后面不写数字,默认接5,Cb6<1,b代表降调,#代表升调,6比5高八度,<1代表音长×2,<3代表音长×8,<-1代表音长×0.5,<-3代表音长×0.125,R是休止符
-
-
-
- 日韩 VITS 模型拟声
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/moegoe"`
-
- - [x] 让[派蒙|空|荧|阿贝多|枫原万叶|温迪|八重神子|纳西妲|钟离|诺艾尔|凝光|托马|北斗|莫娜|荒泷一斗|提纳里|芭芭拉|艾尔海森|雷电将军|赛诺|琴|班尼特|五郎|神里绫华|迪希雅|夜兰|辛焱|安柏|宵宫|云堇|妮露|烟绯|鹿野院平藏|凯亚|达达利亚|迪卢克|可莉|早柚|香菱|重云|刻晴|久岐忍|珊瑚宫心海|迪奥娜|戴因斯雷布|魈|神里绫人|丽莎|优菈|凯瑟琳|雷泽|菲谢尔|九条裟罗|甘雨|行秋|胡桃|迪娜泽黛|柯莱|申鹤|砂糖|萍姥姥|奥兹|罗莎莉亚|式大将|哲平|坎蒂丝|托克|留云借风真君|昆钧|塞琉斯|多莉|大肉丸|莱依拉|散兵|拉赫曼|杜拉夫|阿守|玛乔丽|纳比尔|海芭夏|九条镰治|阿娜耶|阿晃|阿扎尔|七七|博士|白术|埃洛伊|大慈树王|女士|丽塔|失落迷迭|缭乱星棘|伊甸|伏特加女孩|狂热蓝调|莉莉娅|萝莎莉娅|八重樱|八重霞|卡莲|第六夜想曲|卡萝尔|姬子|极地战刃|布洛妮娅|次生银翼|理之律者|迷城骇兔|希儿|魇夜星渊|黑希儿|帕朵菲莉丝|天元骑英|幽兰黛尔|德丽莎|月下初拥|朔夜观星|暮光骑士|明日香|李素裳|格蕾修|梅比乌斯|渡鸦|人之律者|爱莉希雅|爱衣|天穹游侠|琪亚娜|空之律者|薪炎之律者|云墨丹心|符华|识之律者|维尔薇|芽衣|雷之律者|阿波尼亚]说(中文)
-
-
-
- 摸鱼
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/moyu"`
-
- - [x] /启用 moyu
-
- - [x] /禁用 moyu
-
-```
-记录在"0 10 * * *"触发的指令
-摸鱼提醒
-```
-
-
-
- 摸鱼人日历
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/moyu_calendar"`
-
- - [x] /启用 moyucalendar
-
- - [x] /禁用 moyucalendar
-
-```
-记录在"30 8 * * *"触发的指令
-摸鱼人日历
-```
-
-
-
- 点歌
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/music"`
-
- - [x] 点歌[xxx]
-
- - [x] 网易点歌[xxx]
-
- - [x] 酷我点歌[xxx]
-
- - [x] 酷狗点歌[xxx]
-
-
-
- 本地涩图
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/nativesetu"`
-
- - [x] 本地[xxx]
-
- - [x] 刷新本地[xxx]
-
- - [x] 设置本地setu绝对路径[xxx]
-
- - [x] 刷新所有本地setu
-
- - [x] 所有本地setu分类
-
- - 注:刷新文件夹较慢,请耐心等待刷新完成,会提示“成功”。
-
-
-
- 拼音首字母释义工具
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/nbnhhsh"`
-
- - [x] ?? [缩写]
-
-
-
- 日语语法学习
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/nihongo"`
-
- - [x] 日语语法 [xxx] (使用tag随机)
-
- - [x] 搜索日语语法 [xxx]
-
-
-
- 牛牛大作战
-
-`import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/niuniu" `
-
-- [x] 打胶
-
-- [x] 使用[道具名称]打胶
-
-- [x] jj[@xxx]
-
-- [x] 使用[道具名称]jj[@xxx]
-
-- [x] 赎牛牛
-
-- [x] 牛牛商店
-
-- [x] 牛牛背包
-
-- [x] 注册牛牛
-
-- [x] 注销牛牛
-
-- [x] 牛子长度排行
-
-- [x] 牛子深度排行
-
-- [x] 查看我的牛牛
-
-
-
- 小说
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/novel" `
-
- - [x] 小说[xxx]
-
- - 设置小说配置 zerobot 123456
-
- - 下载小说30298
-
- - 注: 建议去https://www.23qb.com/ 注册一个账号, 小说下载有积分限制
-
-
-
- nsfw图片识别
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/nsfw"`
-
- - [x] nsfw打分[图片]
-
- - [x] 当图片属于非 neutral 类别时自动发送评价(默认禁用,启用输入 /启用 nsfwauto)
-
-
-
- 抽wife
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/nwife"`
-
- - [x] 抽wife[@xxx]
-
- - [x] 添加wife[名字][图片]
-
- - [x] 删除wife[名字]
-
- - [x] [让 | 不让]所有人均可添加wife
-
- - 注:不同群添加后不会重叠
-
-
-
- 浅草寺求签
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/omikuji"`
-
- - [x] 求签 | 占卜
-
- - [x] 解签
-
-
-
- 抽扑克
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/poker"`
-
- - [x] 抽扑克牌
-
-
-
- 一群一天一夫一妻制群老婆
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/qqwife"`
-
- - 引入好感度系统,好感度越高,自由恋爱成功率越高
-
- - [x] 设置CD为xx小时
-
- - [x] [允许|禁止]自由恋爱
-
- - [x] [允许|禁止]牛头人
-
- - [x] 娶群友
-
- - [x] [娶|嫁][@对方QQ]
-
- - [x] 当[对方Q号|@对方QQ]的小三
-
- - [x] 做媒 @攻方QQ @受方QQ
-
- - [x] 买礼物给[对方Q号|@对方QQ]
-
- - [x] 群老婆列表
-
- - [x] 查好感度[对方Q号|@对方QQ]
-
- - [x] 好感度列表
-
- - [x] 重置花名册
-
-
-
- qq空间表白墙
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/qzone"`
-
- - [x] 登录QQ空间 (Cookie过期很快, 要经常登录)
-
- - [x] 发说说[xxx]
-
- - [x] (匿名)发表白墙[xxx]
-
- - [x] [ 同意 | 拒绝 ]表白墙 1,2,3 (最后一个参数是表白墙的序号数组, 用英文逗号连接)
-
- - [x] 查看[ 等待 | 同意 | 拒绝 | 所有 ]表白墙 0 (最后一个参数是页码, 建议私聊审稿)
-
-
-
- Real-CUGAN清晰术
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/realcugan"`
-
- - [x] 清晰术(双重吟唱|三重吟唱|四重吟唱)(强力术式|中等术式|弱术式|不变式|原式)[图片]
-
-
-
- 投胎
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/reborn"`
-
- - [x] reborn
-
- - 注:本插件来源于[tgbot](https://github.com/YukariChiba/tgbot/blob/main/modules/Reborn.py)
-
-
-
- 打劫
-
-`import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/robbery"`
-
-- [x] 打劫[对方Q号|@对方QQ]
-
-
-
- 在线代码运行
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/runcode"`
-
- - [x] >runcode [language] help
-
- - [x] >runcode [language] [code block]
-
- - [x] >runcoderaw [language] [code block]
-
-
-
- 搜图
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/saucenao"`
-
- - [x] 以图搜图 | 搜索图片 | 以图识图[图片]
-
- - [x] 搜图[P站图片ID]
-
- - [x] 设置 saucenao api key [apikey]
-
-
-
- 签到得分
-
-`import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/score"`
-
- - [x] 签到
- - [x] 获得签到背景[@xxx] | 获得签到背景
- - [x] 设置签到预设(0~3)
- - [x] 查看等级排名
- - 注:跨群排行
- - [x] 查看我的钱包
- - [x] 查看钱包排名
- - 注:本群排行,若群人数太多不建议使用该功能!!!
-
-
-
- 沙雕app
-
-`import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/shadiao"`
-
-- [x] 哄我
-- [x] 渣我
-- [x] 来碗绿茶
-- [x] 发个朋友圈
-- [x] 来碗毒鸡汤
-- [x] 讲个段子
-- [x] 马丁路德骂我
-
-
-
- shindan
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/shindan"`
-
- - [x] 今天是什么少女[@xxx]
-
- - [x] 异世界转生[@xxx]
-
- - [x] 卖萌[@xxx]
-
- - [x] 今日老婆[@xxx]
-
- - [x] 黄油角色[@xxx]
-
-
-
- steam
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/steam"`
-
- - [x] steam[添加|删除]订阅xxxxx
-
- - [x] steam查询订阅
-
- - [x] steam绑定 api key xxxxxxx
-
- - [x] 查看apikey
-
- - [x] 拉取steam订阅 (使用job执行定时任务------记录在"@every 1m"触发的指令)
-
-
-
- 抽塔罗牌
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/tarot"`
-
- - [x] 抽[塔罗牌|大阿卡纳|小阿卡纳]
- - [x] 抽n张[塔罗牌|大阿卡纳|小阿卡纳]
- - [x] 解塔罗牌[牌名]
- - [x] [塔罗|大阿卡纳|小阿卡纳|混合]牌阵[圣三角|时间之流|四要素|五牌阵|吉普赛十字|马蹄|六芒星]
-
-
-
- 舔狗日记
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/tiangou"`
-
- - [x] 舔狗日记
-
-
-
- 搜番
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/tracemoe"`
-
- - [x] 搜番 | 搜索番剧[图片]
-
-
-
- 翻译
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/translation"`
-
- - [x] >TL 你好
-
-
-
- vtb语录
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/vtb_quotation"`
-
- - [x] vtb语录
-
- - [x] 随机vtb
-
- - [x] 更新vtb
-
-
-
- 钱包
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wallet"`
-
- - [x] 查看钱包排名
-
- - [x] 设置硬币名称[ATRI币]
-
- - [x] 管理钱包余额[+金额|-金额][@xxx]
-
- - [x] 查看我的钱包|查看钱包余额[@xxx]
-
- - [x] 钱包转账[金额][@xxx]
-
- - 注:仅超级用户能"管理钱包余额",
-
-
-
- 据意查句
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wantquotes"`
-
- - [x] 据意查句 大海
-
- - [x] 登录据意查句
-
-
-
- 星际战甲
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/warframeapi"`
-
- - [x] wf时间同步
-
- - [x] [金星|地球|火卫二]平原状态
-
- - [x] .wm [物品名称]
-
- - [x] 仲裁
-
- - [x] 警报
-
- - [x] 每日特惠
-
-
- 百度文心AI
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wenxinAI"`
-
- 基于百度文心API的一些功能
-
- key申请链接:https://wenxin.baidu.com/moduleApi/key
-
- - [x] 为[自己/本群/QQ号/群+群号]设置文心key [API Key] [Secret Key]
-
- - [x] 为[自己/本群/QQ号/群+群号]设置画图key [API Key] [Secret Key]
-
- 例:“为10086设置画图key 123 456”;“为群10010设置画图key 789 101”
-
- 文心key和画图key的API key 可以是相同的,只是文心key日限为200,画图日限为50,以此作区别。
-
- - [x] 文心作文 (x字的)[作文题目]
-
- - [x] 文心提案 (x字的)[文案标题]
-
- - [x] 文心摘要 (x字的)[文章内容]
-
- - [x] 文心小说 (x字的)[小说上文]
-
- - [x] 文心对联 [上联]
-
- - [x] 文心问答 [问题]
-
- - [x] 文心补全 [带“_”的填空题]
-
- - [x] 文心自定义 [prompt]
-
- - [x] [bot名称]画几张[图片描述]的[图片类型][图片尺寸]
-
- 指令示例:
-
- - 文心作文 我的椛椛机器人
-
- - 文心作文 300字的我的椛椛机器人
-
- - 椛椛帮我画几张金凤凰,背景绚烂,高饱和,古风,仙境,高清,4K,古风的油画方图
-
-
-
- 抽老婆
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wife"`
-
- - [x] 抽老婆
-
-
-
- 聊天热词
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/word_count"`
-
- - [x] 热词 [群号] [消息数目]|热词 123456 1000
-
-
-
- 猜单词
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wordle"`
-
- - [x] 个人猜单词
-
- - [x] 团队猜单词
-
- - [x] 团队六阶猜单词
-
- - [x] 团队七阶猜单词
-
-
-
- 鬼东西
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wtf"`
-
- - [x] 鬼东西列表
-
- - [x] 查询鬼东西[序号][@xxx]
-
- - 注:由于需要科学,默认注释。
-
-
-
- 一些游戏王插件
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/ygo"`
-
- ##### 白鸽API卡查
-
- ###### `"github.com/FloatTech/ZeroBot-Plugin/plugin/ygo/ygocdb.go"`
- - [x] /ydp [xxx]
- - [x] /yds [xxx]
- - [x] /ydb [xxx]
- - 注:[xxx]为搜索内容;p:返回一张图片;s:返回一张效果描述;b:高级搜索
-
- ##### 集换社卡价查询
-
- ###### `"github.com/FloatTech/ZeroBot-Plugin/plugin/ygo/ygotrade.go"`
- - [x] 查卡价 [卡名]
- - [x] 查卡价 [卡名] -r [稀有度 稀有度 ...]
- - [x] 查卡店 [卡名]
- - [x] 查卡店 [卡名] -r [稀有度]
- - 注:卡店只支持单个稀有度查询
-
-
-
- 月幕galgame图
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/ymgal"`
-
- - [x] 随机galCG
-
- - [x] 随机gal表情包
-
- - [x] galCG[xxx]
-
- - [x] gal表情包[xxx]
-
- - [x] 更新gal
-
-
-
- 遇见API
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/yujn"`
-
- - [x] 小姐姐视频
- - [x] 小姐姐视频2
- - [x] 黑丝视频
- - [x] 白丝视频
- - [x] 欲梦视频
- - [x] 甜妹视频
- - [x] 双倍快乐
- - [x] 纯情女高
- - [x] 萝莉视频
- - [x] 玉足视频
- - [x] 帅哥视频
- - [x] 热舞视频
- - [x] 吊带视频
- - [x] 汉服视频
- - [x] 极品狱卒
- - [x] 清纯视频
- - [x] 快手变装
- - [x] 抖音变装
- - [x] 萌娃视频
- - [x] 穿搭视频
- - [x] 完美身材
- - [x] 御姐撒娇
- - [x] 绿茶语音
- - [x] 怼人语音
- - [x] 随机骚话
- - [x] 随机污句子
- - [x] 随机美句
- - [x] 土味情话
- - [x] 让[lulu]说我测尼玛
-
-
-
-### *低优先级*
-
-
- 骂人
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/curse"`
-
- - [x] 骂我
-
- - [x] 大力骂我
-
-
-
- 人工智能回复
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/aireply"`
-
- - [x] @Bot 任意文本(任意一句话回复)
-
- - [x] 设置文字回复模式[婧枫|沫沫|青云客|小爱|ChatGPT]
-
- - [x] 设置 ChatGPT api key xxx
-
-
-
- 词典匹配回复
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/thesaurus"`
-
- - [x] 切换[kimo|傲娇|可爱]词库
- - [x] 设置词库触发概率0.x (0
-
- 打断复读
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/breakrepeat"`
-
- - [x] (打断三次以上的复读)
-
-
-
-## 三种使用方法,推荐第一种
-
-### 1. 使用稳定版/测试版 (推荐)
-
-可以前往[Release](https://github.com/FloatTech/ZeroBot-Plugin/releases)页面下载对应系统版本可执行文件,编译时开启了全部插件。
-### 2. 本地直接运行
-
-1. 下载安装最新 [Go](https://studygolang.com/dl) 环境
-2. 下载本项目[压缩包](https://github.com/FloatTech/ZeroBot-Plugin/archive/master.zip),本地解压
-3. 编辑 main.go 文件,内容按需修改
-4. 运行 OneBot 框架
-5. `Windows`下双击 run.bat 文件,`Linux`下使用 run.sh 运行本插件
-
-### 3. 编译运行
-
-#### a. 利用 Actions 在线编译
-
-1. 点击右上角 Fork 本项目,并转跳到自己 Fork 的仓库
-2. 点击仓库上方的 Actions 按钮,确认使用 Actions
-3. 编辑 main.go 文件,内容按需修改
-4. 前往 Release 页面发布一个 Release,`tag`形如`v1.2.3`,以触发稳定版编译流程
-5. 点击 Actions 按钮,等待编译完成,回到 Release 页面下载编译好的文件
-6. 运行 OneBot 框架,并同时运行本插件
-7. 啾咪~
-
-#### b. 本地编译/交叉编译
-
-1. 下载安装最新 [Go](https://studygolang.com/dl) 环境
-2. clone 并进入本项目,下载所需包
-
-```bash
-git clone --depth=1 https://github.com/FloatTech/ZeroBot-Plugin.git
-cd ZeroBot-Plugin
-go version
-go env -w GOPROXY=https://goproxy.cn,direct
-go env -w GO111MODULE=auto
-go mod tidy
-```
-
-3. 编辑 main.go 文件,内容按需修改
-4. 按照平台输入命令编译,下面举了一些例子
-
-```bash
-# 本机平台
-go build -ldflags "-s -w" -o zerobot -trimpath
-# x64 Linux 平台 如各种云服务器
-GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o zerobot -trimpath
-# x64 Windows 平台 如大多数家用电脑
-GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -o zerobot.exe -trimpath
-# armv6 Linux 平台 如树莓派 zero W
-GOOS=linux GOARCH=arm GOARM=6 CGO_ENABLED=0 go build -ldflags "-s -w" -o zerobot -trimpath
-# (由于引入了github.com/fumiama/sqlite3,本项不再可用)mips Linux 平台 如 路由器 wndr4300
-GOOS=linux GOARCH=mips GOMIPS=softfloat CGO_ENABLED=0 go build -ldflags "-s -w" -o zerobot -trimpath
-```
-
-5. 运行 OneBot 框架,并同时运行本插件
-
-## 特别感谢
-
-- [ZeroBot](https://github.com/wdvxdr1123/ZeroBot)
-- [ATRI](https://github.com/Kyomotoi/ATRI)
-
-同时感谢以下开发者对 ZeroBot-Plugin 作出的贡献:
-
-
-
-
+
+
+
+
+
+
ZeroBot-Plugin
+
+ “椛椛是[真寻](https://github.com/HibiKier/zhenxun_bot)的好朋友!”
+
+ ZeroBot-Plugin 是 ZeroBot 的 实用插件合集
+
+
+
+
+ [![miraigo](https://img.shields.io/badge/OneBot-MiraiGo-green.svg?style=social&logo=appveyor)](https://github.com/Mrs4s/MiraiGo)
+ [![oicq](https://img.shields.io/badge/OneBot-OICQ-green.svg?style=social&logo=appveyor)](https://github.com/takayama-lily/oicq)
+ [![mirai](https://img.shields.io/badge/OneBot-Mirai-green.svg?style=social&logo=appveyor)](https://github.com/mamoe/mirai)
+
+
+
+ [![go](https://goreportcard.com/badge/github.com/FloatTech/ZeroBot-Plugin?style=flat-square&logo=go)](https://goreportcard.com/badge/github.com/FloatTech/ZeroBot-Plugin)
+ [![onebot](https://img.shields.io/badge/onebot-v11-black?style=flat-square&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAMAAADxPgR5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxQTFRF////29vbr6+vAAAAk1hCcwAAAAR0Uk5T////AEAqqfQAAAKcSURBVHja7NrbctswDATQXfD//zlpO7FlmwAWIOnOtNaTM5JwDMa8E+PNFz7g3waJ24fviyDPgfhz8fHP39cBcBL9KoJbQUxjA2iYqHL3FAnvzhL4GtVNUcoSZe6eSHizBcK5LL7dBr2AUZlev1ARRHCljzRALIEog6H3U6bCIyqIZdAT0eBuJYaGiJaHSjmkYIZd+qSGWAQnIaz2OArVnX6vrItQvbhZJtVGB5qX9wKqCMkb9W7aexfCO/rwQRBzsDIsYx4AOz0nhAtWu7bqkEQBO0Pr+Ftjt5fFCUEbm0Sbgdu8WSgJ5NgH2iu46R/o1UcBXJsFusWF/QUaz3RwJMEgngfaGGdSxJkE/Yg4lOBryBiMwvAhZrVMUUvwqU7F05b5WLaUIN4M4hRocQQRnEedgsn7TZB3UCpRrIJwQfqvGwsg18EnI2uSVNC8t+0QmMXogvbPg/xk+Mnw/6kW/rraUlvqgmFreAA09xW5t0AFlHrQZ3CsgvZm0FbHNKyBmheBKIF2cCA8A600aHPmFtRB1XvMsJAiza7LpPog0UJwccKdzw8rdf8MyN2ePYF896LC5hTzdZqxb6VNXInaupARLDNBWgI8spq4T0Qb5H4vWfPmHo8OyB1ito+AysNNz0oglj1U955sjUN9d41LnrX2D/u7eRwxyOaOpfyevCWbTgDEoilsOnu7zsKhjRCsnD/QzhdkYLBLXjiK4f3UWmcx2M7PO21CKVTH84638NTplt6JIQH0ZwCNuiWAfvuLhdrcOYPVO9eW3A67l7hZtgaY9GZo9AFc6cryjoeFBIWeU+npnk/nLE0OxCHL1eQsc1IciehjpJv5mqCsjeopaH6r15/MrxNnVhu7tmcslay2gO2Z1QfcfX0JMACG41/u0RrI9QAAAABJRU5ErkJggg==)](https://t.me/zerobotplugin)
+ [![zerobot](https://img.shields.io/badge/zerobot-v1.7.4-black?style=flat-square&logo=go)](https://github.com/wdvxdr1123/ZeroBot)
+
+
+
+ [![license](https://img.shields.io/github/license/FloatTech/ZeroBot-Plugin.svg?style=flat-square&logo=gnu)](https://raw.githubusercontent.com/FloatTech/ZeroBot-Plugin/master/LICENSE)
+ [![tencent-qq](https://img.shields.io/badge/%E7%BE%A4-1048452984-red?style=flat-square&logo=tencent-qq)](https://jq.qq.com/?_wv=1027&k=QMb7x1mM)
+ [![tencent-guild](https://img.shields.io/badge/%E9%A2%91%E9%81%93-Zer0BotPlugin-yellow?style=flat-square&logo=tencent-qq)](https://pd.qq.com/s/fjkx81mnr)
+ [![telegram](https://img.shields.io/badge/Telegram-click%20me-informational?style=flat-square&logo=telegram)](https://t.me/zerobotplugin)
+
+ 本项目符合 [OneBot](https://github.com/howmanybots/onebot) 标准,可基于以下项目与机器人框架/平台进行交互
+ | 项目地址 | 平台 | 核心作者 | 备注 |
+ | :---: | :---: | :---: | :---: |
+ | [LLOneBot](https://github.com/LLOneBot/LLOneBot) | NTQQ | linyuchen | 目前推荐使用 |
+ | [go-cqhttp](https://github.com/Mrs4s/go-cqhttp) | [MiraiGo](https://github.com/Mrs4s/MiraiGo) | Mrs4s | 因签名原因不再维护 |
+ | [onebot-kotlin](https://github.com/yyuueexxiinngg/onebot-kotlin) | [Mirai](https://github.com/mamoe/mirai) | yyuueexxiinngg | 不再积极维护 |
+ | [oicq/http-api](https://github.com/takayama-lily/oicq/tree/master/http-api) | [OICQ](https://github.com/takayama-lily/oicq) | takayama | 已归档不再维护 |
+
+ [![Star Trend](https://api.star-history.com/svg?repos=FloatTech/ZeroBot-Plugin&type=Timeline)](https://seladb.github.io/StarTrack-js/#/preload?r=FloatTech,ZeroBot-Plugin)
+
+
+
+> 专为[后 go-cqhttp 时代](https://github.com/Mrs4s/go-cqhttp/issues/2471)开发迁移的`类zbp`新机器人现已出炉,基于官方api,稳定不风控: [NanoBot-Plugin](https://github.com/FloatTech/NanoBot-Plugin)
+
+> 如果您对开发插件感兴趣,欢迎加入[ZeroBot-Plugin-Playground](https://github.com/FloatTech/ZeroBot-Plugin-Playground)
+
+> webui持续开发中, 欢迎加入[ZeroBot-Plugin-Webui](https://github.com/FloatTech/ZeroBot-Plugin-Webui)
+
+## 命令行参数
+> `[]`代表是可选参数
+```bash
+zerobot [-h] [-m] [-n nickname] [-t token] [-u url] [-g url] [-p prefix] [-d|w] [-c|s config.json] [-l latency] [-r ringlen] [-x max process time] [-mirror] [qq1 qq2 qq3 ...] [&]
+```
+- **-h**: 显示帮助
+- **-m**: 不自动标记消息为已读
+- **-n nickname**: 设置默认昵称,默认为`椛椛`
+- **-t token**: 设置`AccessToken`,默认为空
+- **-u url**: 设置`Url`,默认为`ws://127.0.0.1:6700`
+- ~~**-g url**~~(默认禁用): 设置`webui url`,默认为`127.0.0.1:3000`
+- **-p prefix**: 设置命令前缀,默认为`/`
+- **-d|w**: 开启 debug | warning 级别及以上日志输出
+- **-c config.json**: 从`config.json`加载`bot`配置
+- **-s config.json**: 保存现在`bot`配置到`config.json`
+- **-l latency**: 全局处理延时 (ms)
+- **-r ringlen**: 接收消息环缓冲区大小,`0`为不设缓冲,并发处理
+- **-x max process time**: 最大处理时间 (min)
+- **-mirror**: 直接使用镜像懒加载数据站而不尝试访问源站
+- **qqs**: superusers 的 qq 号
+- **&**: 驻留在后台,必须放在最后,仅`Linux`下有效
+
+默认配置文件格式如下。当选择从配置文件加载时,将忽略相应命令行参数。
+```json
+{
+ "zero": {
+ "nickname": ["椛椛", "ATRI", "atri", "亚托莉", "アトリ"],
+ "command_prefix": "/",
+ "super_users": [],
+ "ring_len": 4096,
+ "latency": 233000000,
+ "max_process_time": 240000000000,
+ "mark_message": true
+ },
+ "ws": [{ "Url": "ws://127.0.0.1:6700", "AccessToken": "" }],
+ "wss": null
+}
+```
+
+## 功能
+> 在编译时,以下功能除插件控制外,均可通过注释`main.go`中的相应`import`而物理禁用,减小插件体积。
+
+> 通过插件控制,还可动态管理某个功能在某个群的打开/关闭。
+
+> 插件的优先级为`import`的先后顺序。
+
+> `webui`默认禁用不编译,打开后会增加程序体积。
+
+
+ 插件控制
+
+ - [x] /响应 (在发送的群/用户开始工作)
+
+ - [x] /沉默 (在发送的群/用户停止工作)
+
+ - [x] /全局响应 (在所有位置开始工作,无视单独的沉默)
+
+ - [x] /全局沉默 (在所有本应沉默的位置停止工作,显式指定启用的位置不受影响)
+
+ - [x] /启用 xxx (在发送的群/用户启用xxx)
+
+ - [x] /禁用 xxx (在发送的群/用户禁用xxx)
+
+ - [x] /此处启用所有插件
+
+ - [x] /此处禁用所有插件
+
+ - [x] /全局启用 xxx
+
+ - [x] /全局禁用 xxx
+
+ - [x] /还原 xxx (在发送的群/用户还原xxx的开启状态到初始状态)
+
+ - 注:当全局未配置或与默认相同时,状态取决于单独配置,后备为默认配置;当全局与默认不同时,状态取决于全局配置,单独配置失效。
+
+ - [x] /改变默认启用状态 xxx
+
+ - [x] /禁止 service qq1 qq2... (禁止 qqs 使用服务 service)
+
+ - [x] /允许 service qq1 qq2... (重新允许 qqs 使用服务 service)
+
+ - [x] /封禁 qq1 qq2... (禁止 qqs 使用全部服务)
+
+ - [x] /解封 qq1 qq2... (允许 qqs 使用全部服务)
+
+ - [x] /用法 xxx
+
+ - [x] /服务列表
+
+ - [x] /设置服务列表显示行数 xx (默认值为 9, 该设置仅运行时有效, zbp 重启后重置)
+
+ - [x] (默认禁用) /设置webui用户名 zerobot 密码 123456
+
+ - [x] (默认禁用) /webui启动
+
+ - [x] (默认禁用) /webui停止
+
+ - [x] @Bot 插件冲突检测 (会在本群发送一条消息并在约 1s 后撤回以检测其它同类 bot 中已启用的插件并禁用)
+
+
+
+ 动态加载插件
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin-Dynamic/dyloader"`
+
+ - 本功能需要`cgo`,故已分离出主线。详见[ZeroBot-Plugin-Dynamic](https://github.com/FloatTech/ZeroBot-Plugin-Dynamic)
+
+
+
+### *高优先级*
+
+ 聊天
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/chat"`
+
+ - [x] [BOT名字]
+
+ - [x] [戳一戳BOT]
+
+ - [x] 空调开
+
+ - [x] 空调关
+
+ - [x] 群温度
+
+ - [x] 设置温度[正整数]
+
+
+
+ 聊天时长统计
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/chatcount"`
+
+ - [x] 查询水群@xxx
+
+ - [x] 查看水群排名
+
+
+
+ 睡眠管理
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/sleep_manage"`
+
+ - [x] 早安 | 晚安
+
+
+
+ ATRI
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/atri"
+ `
+ - [x] 具体指令看 /用法 atri
+
+ - 注:本插件基于 [ATRI](https://github.com/Kyomotoi/ATRI) ,为 Golang 移植版
+
+
+
+ 群管
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/manager"`
+
+ - [x] 禁言[@xxx][分钟]
+
+ - [x] 解除禁言[@xxx]
+
+ - [x] 我要自闭 | 禅定 x [分钟 | 小时 | 天]
+
+ - [x] 开启全员禁言
+
+ - [x] 解除全员禁言
+
+ - [x] 升为管理[@xxx]
+
+ - [x] 取消管理[@xxx]
+
+ - [x] 修改名片[@xxx][xxx]
+
+ - [x] 修改头衔[@xxx][xxx]
+
+ - [x] 申请头衔[xxx]
+
+ - [x] 踢出群聊[@xxx]
+
+ - [x] 退出群聊[群号]@Bot
+
+ - [x] \*入群欢迎
+
+ - [x] \*退群通知
+
+ - [x] 设置欢迎语[欢迎~] 可选添加 [{at}] [{nickname}] [{avatar}] [{id}]
+
+ - [x] 在[MM]月[dd]日的[hh]点[mm]分时(用[url])提醒大家[xxx]
+
+ - [x] 在[MM]月[每周 | 周几]的[hh]点[mm]分时(用[url])提醒大家[xxx]
+
+ - [x] 取消在[MM]月[dd]日的[hh]点[mm]分的提醒
+
+ - [x] 取消在[MM]月[每周 | 周几]的[hh]点[mm]分的提醒
+
+ - [x] 在"cron"时(用[url])提醒大家[xxx]
+
+ - [x] 取消在"cron"的提醒
+
+ - [x] 列出所有提醒
+
+ - [x] 翻牌
+
+ - [x] 赞我
+
+ - [x] [开启 | 关闭]入群验证
+
+ - [x] [开启 | 关闭]gist加群自动审批
+
+ - [x] 对信息回复:[设置 | 取消]精华
+
+ - [x] 取消精华 [信息ID]
+
+ - [x] /精华列表
+
+ - [ ] 同意好友请求
+
+ - [x] 对信息回复: 撤回
+
+ - [ ] 警告[@xxx]
+
+ - 注:使用gist加群自动审批,请在群介绍添加以下说明,同时开启`需要回答问题并由管理员审核`:加群请在github新建一个gist,其文件名为本群群号的字符串的md5(小写),内容为一行,是当前unix时间戳(10分钟内有效)。然后请将您的用户名和gist哈希(小写)按照username/gisthash的格式填写到回答即可。
+
+ - 设置欢迎语可选添加参数说明:{at}可在发送时艾特被欢迎者 {nickname}是被欢迎者名字 {avatar}是被欢迎者头像 {uid}是被欢迎者QQ号 {gid}是当前群群号 {groupname} 是当前群群名
+
+
+
+ 定时指令触发器
+
+ `import _ "github.com/FloatTech/zbputils/job"`
+
+ - 注意:触发器具有限速,每 2s 仅允许最多一次触发
+
+ - [x] 记录以"完全匹配关键词"触发的(代表我执行的)指令
+
+ - [x] 取消以"完全匹配关键词"触发的(代表我执行的)指令
+
+ - [x] 记录在"cron"触发的(别名xxx的)指令
+
+ - [x] 取消在"cron"触发的指令
+
+ - [x] 查看所有触发指令
+
+ - [x] 查看在"cron"触发的指令
+
+ - [x] 查看以"完全匹配关键词"触发的(代表我执行的)指令
+
+ - [x] 注入指令结果:任意指令
+
+ - [x] 执行指令:任意指令
+
+ - 注:任意指令可以使用形如`?::参数1提示语::1!`,`?::参数2提示语::2!`,`?::?可选参数3提示语,不回答将填入空值::3!`,`!::从url获取的参数::4!`,`!::?可选的从url获取的参数,出错将填入空值::5!`的未定参数,在注入时一一匹配
+
+ - 一些示例
+
+> 每日9:30推送摸鱼人日历
+
+```
+记录在"30 9 * * *"触发的指令
+run[CQ:image,file=https://api.vvhan.com/api/moyu]
+```
+
+> 每日12:00以1/2概率执行coser指令
+
+```python
+记录在"0 12 * * *"触发的指令
+注入指令结果:>runcoderaw py
+from random import random
+if random() > 0.5: print('coser')
+else: print('今天没有coser哦~')
+```
+
+> 每日15:00询问设置定时者否想看coser
+
+```python
+记录在"0 15 * * *"触发的指令
+注入指令结果:>runcoderaw py
+if '?::想看coser吗?::1!' == '想': print('coser')
+else: print('好吧')
+```
+
+> 自行编写简易的选择困难症助手小插件
+
+```python
+记录以"简易的选择困难症助手"触发的指令
+执行指令:>runcoderaw py
+from random import random
+if random() > 0.5: print('您最终会选?::请输入您的选择1::1!')
+else: print('您最终会选?::请输入您的选择2::2!')
+简易的选择困难症助手
+```
+
+> 自行编写随机b站404页趣图插件
+
+```python
+记录以"随机b站404页趣图"触发的代表我执行的指令
+注入指令结果:>runcoderaw py
+import json
+j = json.loads(r'''!::https://api.iyk0.com/bili_chart::1!''')
+print("run[CQ:image,file="+j["img"]+"]")
+随机b站404页趣图
+```
+
+![随机b站404页趣图](https://user-images.githubusercontent.com/41315874/157371451-c09ad3bb-c61a-4a42-9c47-fab3305bc0f8.png)
+
+ - [x] [我|大家|有人][说|问][正则表达式]你[答|说|做|执行][模版]
+
+ - [x] [查看|看看][我|大家|有人][说|问][正则表达式]
+
+ - [x] 删除[大家|有人|我][说|问|让你做|让你执行][正则表达式]
+
+ - 注:模版是指含有`$1` `$2`这样的未定参数,会在正则匹配时按顺序填入子匹配对应值
+
+
+
+### *中优先级*
+
+ ahsai tts
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/ahsai"`
+
+ - [x] 使[ 伊織弓鶴 | 紲星あかり | 結月ゆかり | 京町セイカ |東北きりたん | 東北イタコ | ついなちゃん標準語 | ついなちゃん関西弁 | 音街ウナ | 琴葉茜 | 吉田くん | 民安ともえ | 桜乃そら | 月読アイ | 琴葉葵 | 東北ずん子 | 月読ショウタ | 水奈瀬コウ ]说(日语)
+
+
+
+ AIfalse
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/ai_false"`
+
+ - [x] 查询计算机当前活跃度: [检查身体 | 自检 | 启动自检 | 系统状态]
+
+ - [x] 设置默认限速为每 m [分钟 | 秒] n 次触发
+
+
+
+ AIWife
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/aiwife"`
+
+ - [x] waifu | 随机waifu(从[100000个AI生成的waifu](https://www.thiswaifudoesnotexist.net/)中随机一位)
+
+
+
+ 支付宝到账语音
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/alipayvoice"`
+
+ - [x] 支付宝到账 1
+
+
+
+ 触发者撤回时也自动撤回
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/autowithdraw"`
+
+ - [x] 撤回一条消息
+
+
+
+ base16384加解密
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/b14"`
+
+ - [x] 加密xxx
+
+ - [x] 解密xxx
+
+ - [x] 用yyy加密xxx
+
+ - [x] 用yyy解密xxx
+
+
+
+ 百度内容审核
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/baiduaudit"`
+
+ - [x] 获取BDAkey
+
+ - [x] 配置BDAKey [API Key] [Secret Key]
+
+ - [x] 获取BDAkey
+
+ - [x] [开启|关闭]内容审核
+
+ - [x] [开启|关闭]撤回提示
+
+ - [x] [开启|关闭]详细提示
+
+ - [x] [开启|关闭]撤回禁言
+
+ - [x] [开启|关闭]禁言累加
+
+ - [x] [开启|关闭]文本检测
+
+ - [x] [开启|关闭]图像检测
+
+ - [x] 设置最大禁言时间[分钟,默认:60,最大43200]
+
+ - [x] 设置每次累加时间[分钟,默认:1]
+
+ - [x] 设置撤回禁言时间[分钟,默认:1]
+
+ - [x] 查看检测类型
+
+ - [x] 查看检测配置
+
+ - [x] 测试文本检测[文本内容]
+
+ - [x] 测试图像检测[图片]
+
+ - [x] 设置检测类型[类型编号]
+
+ - [x] 设置不检测类型[类型编号]
+
+ 检测类型编号列表:[1:违禁违规|2:文本色情|3:敏感信息|4:恶意推广|5:低俗辱骂|6:恶意推广-联系方式|7:恶意推广-软文推广]
+
+
+ base64卦加解密
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/base64gua"`
+
+ - [x] 六十四卦加密xxx
+
+ - [x] 六十四卦解密xxx
+
+ - [x] 六十四卦用yyy加密xxx
+
+ - [x] 六十四卦用yyy解密xxx
+
+
+
+ base天城文加解密
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/baseamasiro"`
+
+ - [x] 天城文加密xxx
+
+ - [x] 天城文解密xxx
+
+ - [x] 天城文用yyy加密xxx
+
+ - [x] 天城文用yyy解密xxx
+
+
+
+ bilibili
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/bilibili"`
+
+ - [x] >vup info [xxx]
+
+ - [x] >user info [xxx]
+
+ - [x] 查成分 [xxx]
+
+ - [x] 查弹幕 [xxx] 2 (最后一个参数是页码)
+
+ - [x] 设置b站cookie b_ut=7;buvid3=0;i-wanna-go-back=-1;innersign=0; (最好把cookie设全)
+
+ 获取Cookie可以使用[这个工具](https://github.com/XiaoMiku01/login_bili_go)
+
+ - [x] 更新vup
+
+
+
+ b站动态、专栏、视频、直播解析
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/bilibili"`
+
+ - [x] t.bilibili.com/642277677329285174 | bilibili.com/read/cv17134450 | bilibili.com/video/BV13B4y1x7pS | live.bilibili.com/22603245
+
+
+
+ b站动态、直播推送,需要配合job一起使用
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/bilibili"`
+
+ - [x] 添加b站订阅[uid|name]
+
+ - [x] 取消b站订阅[uid|name]
+
+ - [x] 取消b站动态订阅[uid|name]
+
+ - [x] 取消b站直播订阅[uid|name]
+
+ - [x] b站推送列表
+
+ - [x] 拉取b站推送 (使用job执行定时任务------记录在"@every 5m"触发的指令)
+
+
+
+ 书评
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/book_review"`
+
+ - [x] 书评[xxx]
+
+ - [x] 随机书评
+
+
+
+ 选择困难症帮手
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/choose"`
+
+ - [x] 选择[选择项1]还是[选项2]还是[更多选项]
+
+
+
+ 抽象话
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/chouxianghua"`
+
+ - [x] 抽象翻译[xxx]
+
+
+
+ 英文字符翻转
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/chrev"`
+
+ - [x] 翻转 I love you
+
+
+
+ coser
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/coser" `
+
+ - [x] coser
+
+
+
+ cp短打
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/cpstory"`
+
+ - [x] 组cp[@xxx][@xxx]
+
+ - [x] 磕cp大老师 雪乃
+
+
+
+ 今日早报
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/dailynews"`
+
+ - [x] 今日早报
+
+
+
+ DeepDanbooru二次元图标签识别
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/danbooru"`
+
+ - [x] 鉴赏图片[图片]
+
+
+
+ 嘉然
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/diana"`
+
+ - [x] 小作文
+
+ - [x] 发大病
+
+ - [x] 教你一篇小作文[作文]
+
+
+
+ 程序员做饭指南
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/dish"`
+
+ - [x] 怎么做 | 烹饪[菜名]
+
+ - [x] 随机菜谱 | 随便做点菜
+
+
+
+ 多功能抽签
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/drawlots"`
+
+ 支持图包文件夹和gif抽签
+
+ - [x] (刷新)抽签列表
+
+ - [x] 抽[签名]签
+
+ - [x] 看签[gif签名]
+
+ - [x] 加签[签名][gif图片]
+
+ - [x] 删签[gif签名]
+
+
+
+ 漂流瓶
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/drift_bottle"`
+
+ - [x] @Bot pick (随机捞一个漂流瓶)
+
+ - [x] @Bot throw xxx (投递内容xxx,支持图片文字,投递内容需要大于10个字符或者带有图片)
+
+
+
+ 合成emoji
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/emojimix"`
+
+ - [x] [emoji][emoji]
+
+
+
+ 颜文字抽象转写
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/emozi"`
+
+ - [x] 抽象转写[文段]
+ - [x] 抽象还原[文段]
+ - [x] 抽象登录[用户名]
+
+
+
+ 好友申请及群聊邀请事件处理
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/event"`
+
+ - [x] [开启|关闭]自动同意[申请|邀请|主人]
+
+ - [x] [同意|拒绝][申请|邀请][flag]
+
+ - flag跟随事件一起发送, 默认同意主人的事件
+
+
+
+ 渲染任意文字到图片
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/font"`
+
+ - [x] (用[终末体|终末变体|紫罗兰体|樱酥体|Consolas体|粗苹方体|未来荧黑体|Gugi体|八丸体|Impact体|猫啃体|苹方体])渲染(抖动)文字xxx
+
+
+
+ 每日运势
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/fortune"`
+
+ - [x] 运势 | 抽签
+
+ - [x] 设置底图[车万 DC4 爱因斯坦 星空列车 樱云之恋 富婆妹 李清歌 公主连结 原神 明日方舟 碧蓝航线 碧蓝幻想 战双 阴阳师 赛马娘 东方归言录 奇异恩典 夏日口袋 ASoul Hololive]
+
+
+
+ 笑话
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/funny"`
+
+ - [x] 讲个笑话[@xxx|qq号|人名] | 夸夸[@xxx|qq号|人名]
+
+
+
+ 原神抽卡
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/genshin"`
+
+ - [x] 切换原神卡池
+
+ - [x] 原神十连
+
+
+
+ gif
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/gif"`
+
+ - [x] 爬[@xxx]
+
+ - [x] 摸[@xxx]
+
+ - [x] 搓[@xxx]
+
+ - 注:更多指令见项目 --> https://github.com/FloatTech/ZeroBot-Plugin-Gif
+
+
+
+ GitHub仓库搜索
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/github"`
+
+ - [x] >github [xxx]
+
+ - [x] >github -p [xxx]
+
+
+
+ 猜歌
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/guessmusic"`
+
+ 猜歌插件(该插件依赖ffmpeg)
+
+ ---------主 人 指 令---------
+ - [x] 设置猜歌歌库路径 [绝对路径]
+ - [x] [创建/删除]歌单 [歌单名称]
+ - [x] 下载歌曲[歌曲名称/网易云歌曲ID]到[歌单名称]
+
+ -------管 理 员 指 令--------
+ - [x] 设置猜歌默认歌单 [歌单名称]
+ - [x] 上传歌曲[群文件的音乐名]到[歌单名称]
+
+ ------公 用 指 令------
+ - [x] 歌单列表
+ - [x] [个人/团队]猜歌
+
+ ------插 件 扩 展------
+
+ - 本插件内置了[NeteaseCloudMusicApi](https://binaryify.github.io/NeteaseCloudMusicApi/#/)框架的一些功能
+ - [x] 设置猜歌API帮助
+ - [x] 设置猜歌API [API首页网址]
+ - [x] 猜歌[开启/关闭][歌单/歌词]自动下载
+ - [ ] 登录网易云
+ - [x] 歌单信息 [网易云歌单链接/ID]
+ - [x] [歌单名称]绑定网易云[网易云歌单链接/ID]
+ - [x] 下载歌单[网易云歌单链接/ID]到[歌单名称]
+ - [x] 解除绑定 [歌单名称]
+
+
+
+ 一言
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/hitokoto"`
+
+ - [x] 一言[xxx]
+
+ - [x] 系列一言
+
+
+
+ 炉石
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/hs"`
+
+ - [x] 搜卡[xxxx]
+
+ - [x] [卡组代码xxx]
+
+ - 注:更多搜卡指令参数:https://hs.fbigame.com/misc/searchhelp
+
+
+
+ 百人一首
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/hyaku"`
+
+ - [x] 百人一首
+
+ - [x] 百人一首之n
+
+
+
+ 注入指令
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/inject"`
+
+ - [x] run[CQ码]
+
+
+
+ 煎蛋网无聊图
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/jandan"`
+
+ - [x] 来份[屌|弔|吊]图
+
+ - [x] 更新[屌|弔|吊]图
+
+
+
+ 日语听力学习材料
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/jptingroom"`
+
+ - [x] 随机日语听力
+
+ - [x] 随机日语歌曲
+
+ - [x] 日语听力 xxx
+
+ - [x] 日语歌曲 xxx
+
+
+
+ 疯狂星期四
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/kfccrazythursday"`
+
+ - [x] 疯狂星期四
+
+
+
+ kokomi原神面板
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/kokomi"`
+
+ - [x] kokomi菜单
+
+ - [x] XX面板
+
+ - 注:本插件未并入主仓库,需自行安装(须源码方式运行才能添加插件),安装地址[kokomi-原神面板查询插件](https://github.com/lianhong2758/kokomi-plugin)
+
+
+
+ lolicon
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/lolicon"`
+
+ - [x] 随机图片
+
+ - [x] 随机图片 萝莉|少女
+
+ - [x] 设置随机图片地址[http...]
+
+ - 每一小时发一张图
+```
+记录在"@every 1h"触发的指令
+来份萝莉
+```
+
+
+
+ 桑帛云 API
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/lolimi"`
+
+ - [x] 随机妹子
+
+ - [x] 随机绕口令
+
+ - [x] 颜值鉴定[图片]
+
+ - [x] 随机情话
+
+ - [x] 发病 嘉然
+
+ - [x] 让[嘉然|塔菲|东雪莲|懒羊羊|科比|孙笑川|陈泽|丁真|空|荧|派蒙|纳西妲|阿贝多|温迪|枫原万叶|钟离|荒泷一斗|八重神子|艾尔海森|提纳里|迪希雅|卡维|宵宫|莱依拉|赛诺|诺艾尔|托马|凝光|莫娜|北斗|神里绫华|雷电将军|芭芭拉|鹿野院平藏|五郎|迪奥娜|凯亚|安柏|班尼特|琴|柯莱|夜兰|妮露|辛焱|珐露珊|魈|香菱|达达利亚|砂糖|早柚|云堇|刻晴|丽莎|迪卢克|烟绯|重云|珊瑚宫心海|胡桃|可莉|流浪者|久岐忍|神里绫人|甘雨|戴因斯雷布|优菈|菲谢尔|行秋|白术|九条裟罗|雷泽|申鹤|迪娜泽黛|凯瑟琳|多莉|坎蒂丝|萍姥姥|罗莎莉亚|留云借风真君|绮良良|瑶瑶|七七|奥兹|米卡|夏洛蒂|埃洛伊|博士|女士|大慈树王|三月七|娜塔莎|希露瓦|虎克|克拉拉|丹恒|希儿|布洛妮娅|瓦尔特|杰帕德|佩拉|姬子|艾丝妲|白露|星|穹|桑博|伦纳德|停云|罗刹|卡芙卡|彦卿|史瓦罗|螺丝咕姆|阿兰|银狼|素裳|丹枢|黑塔|景元|帕姆|可可利亚|半夏|符玄|公输师傅|奥列格|青雀|大毫|青镞|费斯曼|绿芙蓉|镜流|信使|丽塔|失落迷迭|缭乱星棘|伊甸|伏特加女孩|狂热蓝调|莉莉娅|萝莎莉娅|八重樱|八重霞|卡莲|第六夜想曲|卡萝尔|姬子|极地战刃|布洛妮娅|次生银翼|理之律者|真理之律者|迷城骇兔|希儿|魇夜星渊|黑希儿|帕朵菲莉丝|天元骑英|幽兰黛尔|德丽莎|月下初拥|朔夜观星|暮光骑士|明日香|李素裳|格蕾修|梅比乌斯|渡鸦|人之律者|爱莉希雅|爱衣|天穹游侠|琪亚娜|空之律者|终焉之律者|薪炎之律者|云墨丹心|符华|识之律者|维尔薇|始源之律者|芽衣|雷之律者|苏莎娜|阿波尼亚|陆景和|莫弈|夏彦|左然]说我测尼玛
+
+
+
+ MagicPrompt-Stable-Diffusion吟唱提示
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/magicprompt"`
+
+ - [x] 吟唱提示[xxxx]
+
+
+
+ 钓鱼模拟器
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/mcfish"`
+
+ - [x] 钓鱼商店
+ - [x] 购买xxx [数量]
+ - [x] 出售[xxx [数量]|所有垃圾]
+ - [x] 钓鱼背包
+ - [x] 装备[xx竿|三叉戟|美西螈]
+ - [x] 附魔[诱钓|海之眷顾]
+ - [x] 修复鱼竿
+ - [x] 合成[xx竿|三叉戟]
+ - [x] 进行钓鱼
+ - [x] 进行n次钓鱼
+
+
+
+ 简易midi音乐制作
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/midicreate"`
+
+ - [x] midi制作 CCGGAAGR FFEEDDCR GGFFEEDR GGFFEEDR CCGGAAGR FFEEDDCR
+
+ - [x] 个人听音练习
+
+ - [x] 团队听音练习
+
+ - [x] *.mid (midi 转 txt)
+
+ - [x] midi制作*.txt (txt 转 midi)
+
+ - [x] 设置音色40 (0~127)
+
+ - [x] 注: 该插件需要安装timidity, linux安装脚本可参考 https://gitcode.net/anto_july/midi/-/raw/master/timidity.sh, windows安装脚本可参考 https://gitcode.net/anto_july/midi/-/raw/master/timidity.bat?inline=false, windows需要管理员模式运行
+
+ - [x] 符号说明: C5是中央C,后面不写数字,默认接5,Cb6<1,b代表降调,#代表升调,6比5高八度,<1代表音长×2,<3代表音长×8,<-1代表音长×0.5,<-3代表音长×0.125,R是休止符
+
+
+
+ 日韩 VITS 模型拟声
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/moegoe"`
+
+ - [x] 让[派蒙|空|荧|阿贝多|枫原万叶|温迪|八重神子|纳西妲|钟离|诺艾尔|凝光|托马|北斗|莫娜|荒泷一斗|提纳里|芭芭拉|艾尔海森|雷电将军|赛诺|琴|班尼特|五郎|神里绫华|迪希雅|夜兰|辛焱|安柏|宵宫|云堇|妮露|烟绯|鹿野院平藏|凯亚|达达利亚|迪卢克|可莉|早柚|香菱|重云|刻晴|久岐忍|珊瑚宫心海|迪奥娜|戴因斯雷布|魈|神里绫人|丽莎|优菈|凯瑟琳|雷泽|菲谢尔|九条裟罗|甘雨|行秋|胡桃|迪娜泽黛|柯莱|申鹤|砂糖|萍姥姥|奥兹|罗莎莉亚|式大将|哲平|坎蒂丝|托克|留云借风真君|昆钧|塞琉斯|多莉|大肉丸|莱依拉|散兵|拉赫曼|杜拉夫|阿守|玛乔丽|纳比尔|海芭夏|九条镰治|阿娜耶|阿晃|阿扎尔|七七|博士|白术|埃洛伊|大慈树王|女士|丽塔|失落迷迭|缭乱星棘|伊甸|伏特加女孩|狂热蓝调|莉莉娅|萝莎莉娅|八重樱|八重霞|卡莲|第六夜想曲|卡萝尔|姬子|极地战刃|布洛妮娅|次生银翼|理之律者|迷城骇兔|希儿|魇夜星渊|黑希儿|帕朵菲莉丝|天元骑英|幽兰黛尔|德丽莎|月下初拥|朔夜观星|暮光骑士|明日香|李素裳|格蕾修|梅比乌斯|渡鸦|人之律者|爱莉希雅|爱衣|天穹游侠|琪亚娜|空之律者|薪炎之律者|云墨丹心|符华|识之律者|维尔薇|芽衣|雷之律者|阿波尼亚]说(中文)
+
+
+
+ 摸鱼
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/moyu"`
+
+ - [x] /启用 moyu
+
+ - [x] /禁用 moyu
+
+```
+记录在"0 10 * * *"触发的指令
+摸鱼提醒
+```
+
+
+
+ 摸鱼人日历
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/moyu_calendar"`
+
+ - [x] /启用 moyucalendar
+
+ - [x] /禁用 moyucalendar
+
+```
+记录在"30 8 * * *"触发的指令
+摸鱼人日历
+```
+
+
+
+ 点歌
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/music"`
+
+ - [x] 点歌[xxx]
+
+ - [x] 网易点歌[xxx]
+
+ - [x] 酷我点歌[xxx]
+
+ - [x] 酷狗点歌[xxx]
+
+
+
+ 本地涩图
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/nativesetu"`
+
+ - [x] 本地[xxx]
+
+ - [x] 刷新本地[xxx]
+
+ - [x] 设置本地setu绝对路径[xxx]
+
+ - [x] 刷新所有本地setu
+
+ - [x] 所有本地setu分类
+
+ - 注:刷新文件夹较慢,请耐心等待刷新完成,会提示“成功”。
+
+
+
+ 拼音首字母释义工具
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/nbnhhsh"`
+
+ - [x] ?? [缩写]
+
+
+
+ 日语语法学习
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/nihongo"`
+
+ - [x] 日语语法 [xxx] (使用tag随机)
+
+ - [x] 搜索日语语法 [xxx]
+
+
+
+ 牛牛大作战
+
+`import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/niuniu" `
+
+- [x] 打胶
+
+- [x] 使用[道具名称]打胶
+
+- [x] jj[@xxx]
+
+- [x] 使用[道具名称]jj[@xxx]
+
+- [x] 赎牛牛
+
+- [x] 出售牛牛
+
+- [x] 牛牛商店
+
+- [x] 牛牛背包
+
+- [x] 注册牛牛
+
+- [x] 注销牛牛
+
+- [x] 牛子长度排行
+
+- [x] 牛子深度排行
+
+- [x] 查看我的牛牛
+
+
+
+ 小说
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/novel" `
+
+ - [x] 小说[xxx]
+
+ - 设置小说配置 zerobot 123456
+
+ - 下载小说30298
+
+ - 注: 建议去https://www.23qb.com/ 注册一个账号, 小说下载有积分限制
+
+
+
+ nsfw图片识别
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/nsfw"`
+
+ - [x] nsfw打分[图片]
+
+ - [x] 当图片属于非 neutral 类别时自动发送评价(默认禁用,启用输入 /启用 nsfwauto)
+
+
+
+ 抽wife
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/nwife"`
+
+ - [x] 抽wife[@xxx]
+
+ - [x] 添加wife[名字][图片]
+
+ - [x] 删除wife[名字]
+
+ - [x] [让 | 不让]所有人均可添加wife
+
+ - 注:不同群添加后不会重叠
+
+
+
+ 浅草寺求签
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/omikuji"`
+
+ - [x] 求签 | 占卜
+
+ - [x] 解签
+
+
+
+ 抽扑克
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/poker"`
+
+ - [x] 抽扑克牌
+
+
+
+ 一群一天一夫一妻制群老婆
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/qqwife"`
+
+ - 引入好感度系统,好感度越高,自由恋爱成功率越高
+
+ - [x] 设置CD为xx小时
+
+ - [x] [允许|禁止]自由恋爱
+
+ - [x] [允许|禁止]牛头人
+
+ - [x] 娶群友
+
+ - [x] [娶|嫁][@对方QQ]
+
+ - [x] 当[对方Q号|@对方QQ]的小三
+
+ - [x] 做媒 @攻方QQ @受方QQ
+
+ - [x] 买礼物给[对方Q号|@对方QQ]
+
+ - [x] 群老婆列表
+
+ - [x] 查好感度[对方Q号|@对方QQ]
+
+ - [x] 好感度列表
+
+ - [x] 重置花名册
+
+
+
+ qq空间表白墙
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/qzone"`
+
+ - [x] 登录QQ空间 (Cookie过期很快, 要经常登录)
+
+ - [x] 发说说[xxx]
+
+ - [x] (匿名)发表白墙[xxx]
+
+ - [x] [ 同意 | 拒绝 ]表白墙 1,2,3 (最后一个参数是表白墙的序号数组, 用英文逗号连接)
+
+ - [x] 查看[ 等待 | 同意 | 拒绝 | 所有 ]表白墙 0 (最后一个参数是页码, 建议私聊审稿)
+
+
+
+ Real-CUGAN清晰术
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/realcugan"`
+
+ - [x] 清晰术(双重吟唱|三重吟唱|四重吟唱)(强力术式|中等术式|弱术式|不变式|原式)[图片]
+
+
+
+ 投胎
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/reborn"`
+
+ - [x] reborn
+
+ - 注:本插件来源于[tgbot](https://github.com/YukariChiba/tgbot/blob/main/modules/Reborn.py)
+
+
+
+ 打劫
+
+`import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/robbery"`
+
+- [x] 打劫[对方Q号|@对方QQ]
+
+
+
+ 在线代码运行
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/runcode"`
+
+ - [x] >runcode [language] help
+
+ - [x] >runcode [language] [code block]
+
+ - [x] >runcoderaw [language] [code block]
+
+
+
+ 搜图
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/saucenao"`
+
+ - [x] 以图搜图 | 搜索图片 | 以图识图[图片]
+
+ - [x] 搜图[P站图片ID]
+
+ - [x] 设置 saucenao api key [apikey]
+
+
+
+ 签到得分
+
+`import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/score"`
+
+ - [x] 签到
+ - [x] 获得签到背景[@xxx] | 获得签到背景
+ - [x] 设置签到预设(0~3)
+ - [x] 查看等级排名
+ - 注:跨群排行
+ - [x] 查看我的钱包
+ - [x] 查看钱包排名
+ - 注:本群排行,若群人数太多不建议使用该功能!!!
+
+
+
+ 沙雕app
+
+`import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/shadiao"`
+
+- [x] 哄我
+- [x] 渣我
+- [x] 来碗绿茶
+- [x] 发个朋友圈
+- [x] 来碗毒鸡汤
+- [x] 讲个段子
+- [x] 马丁路德骂我
+
+
+
+ shindan
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/shindan"`
+
+ - [x] 今天是什么少女[@xxx]
+
+ - [x] 异世界转生[@xxx]
+
+ - [x] 卖萌[@xxx]
+
+ - [x] 今日老婆[@xxx]
+
+ - [x] 黄油角色[@xxx]
+
+
+
+ steam
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/steam"`
+
+ - [x] steam[添加|删除]订阅xxxxx
+
+ - [x] steam查询订阅
+
+ - [x] steam绑定 api key xxxxxxx
+
+ - [x] 查看apikey
+
+ - [x] 拉取steam订阅 (使用job执行定时任务------记录在"@every 1m"触发的指令)
+
+
+
+ 抽塔罗牌
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/tarot"`
+
+ - [x] 抽[塔罗牌|大阿卡纳|小阿卡纳]
+ - [x] 抽n张[塔罗牌|大阿卡纳|小阿卡纳]
+ - [x] 解塔罗牌[牌名]
+ - [x] [塔罗|大阿卡纳|小阿卡纳|混合]牌阵[圣三角|时间之流|四要素|五牌阵|吉普赛十字|马蹄|六芒星]
+
+
+
+ 舔狗日记
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/tiangou"`
+
+ - [x] 舔狗日记
+
+
+
+ 搜番
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/tracemoe"`
+
+ - [x] 搜番 | 搜索番剧[图片]
+
+
+
+ 翻译
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/translation"`
+
+ - [x] >TL 你好
+
+
+
+ vtb语录
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/vtb_quotation"`
+
+ - [x] vtb语录
+
+ - [x] 随机vtb
+
+ - [x] 更新vtb
+
+
+
+ 钱包
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wallet"`
+
+ - [x] 查看钱包排名
+
+ - [x] 设置硬币名称[ATRI币]
+
+ - [x] 管理钱包余额[+金额|-金额][@xxx]
+
+ - [x] 查看我的钱包|查看钱包余额[@xxx]
+
+ - [x] 钱包转账[金额][@xxx]
+
+ - 注:仅超级用户能"管理钱包余额",
+
+
+
+ 据意查句
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wantquotes"`
+
+ - [x] 据意查句 大海
+
+ - [x] 登录据意查句
+
+
+
+ 星际战甲
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/warframeapi"`
+
+ - [x] wf时间同步
+
+ - [x] [金星|地球|火卫二]平原状态
+
+ - [x] .wm [物品名称]
+
+ - [x] 仲裁
+
+ - [x] 警报
+
+ - [x] 每日特惠
+
+
+ 百度文心AI
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wenxinAI"`
+
+ 基于百度文心API的一些功能
+
+ key申请链接:https://wenxin.baidu.com/moduleApi/key
+
+ - [x] 为[自己/本群/QQ号/群+群号]设置文心key [API Key] [Secret Key]
+
+ - [x] 为[自己/本群/QQ号/群+群号]设置画图key [API Key] [Secret Key]
+
+ 例:“为10086设置画图key 123 456”;“为群10010设置画图key 789 101”
+
+ 文心key和画图key的API key 可以是相同的,只是文心key日限为200,画图日限为50,以此作区别。
+
+ - [x] 文心作文 (x字的)[作文题目]
+
+ - [x] 文心提案 (x字的)[文案标题]
+
+ - [x] 文心摘要 (x字的)[文章内容]
+
+ - [x] 文心小说 (x字的)[小说上文]
+
+ - [x] 文心对联 [上联]
+
+ - [x] 文心问答 [问题]
+
+ - [x] 文心补全 [带“_”的填空题]
+
+ - [x] 文心自定义 [prompt]
+
+ - [x] [bot名称]画几张[图片描述]的[图片类型][图片尺寸]
+
+ 指令示例:
+
+ - 文心作文 我的椛椛机器人
+
+ - 文心作文 300字的我的椛椛机器人
+
+ - 椛椛帮我画几张金凤凰,背景绚烂,高饱和,古风,仙境,高清,4K,古风的油画方图
+
+
+
+ 抽老婆
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wife"`
+
+ - [x] 抽老婆
+
+
+
+ 聊天热词
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/word_count"`
+
+ - [x] 热词 [群号] [消息数目]|热词 123456 1000
+
+
+
+ 猜单词
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wordle"`
+
+ - [x] 个人猜单词
+
+ - [x] 团队猜单词
+
+ - [x] 团队六阶猜单词
+
+ - [x] 团队七阶猜单词
+
+
+
+ 鬼东西
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wtf"`
+
+ - [x] 鬼东西列表
+
+ - [x] 查询鬼东西[序号][@xxx]
+
+ - 注:由于需要科学,默认注释。
+
+
+
+ 一些游戏王插件
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/ygo"`
+
+ ##### 白鸽API卡查
+
+ ###### `"github.com/FloatTech/ZeroBot-Plugin/plugin/ygo/ygocdb.go"`
+ - [x] /ydp [xxx]
+ - [x] /yds [xxx]
+ - [x] /ydb [xxx]
+ - 注:[xxx]为搜索内容;p:返回一张图片;s:返回一张效果描述;b:高级搜索
+
+ ##### 集换社卡价查询
+
+ ###### `"github.com/FloatTech/ZeroBot-Plugin/plugin/ygo/ygotrade.go"`
+ - [x] 查卡价 [卡名]
+ - [x] 查卡价 [卡名] -r [稀有度 稀有度 ...]
+ - [x] 查卡店 [卡名]
+ - [x] 查卡店 [卡名] -r [稀有度]
+ - 注:卡店只支持单个稀有度查询
+
+
+
+ 月幕galgame图
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/ymgal"`
+
+ - [x] 随机galCG
+
+ - [x] 随机gal表情包
+
+ - [x] galCG[xxx]
+
+ - [x] gal表情包[xxx]
+
+ - [x] 更新gal
+
+
+
+ 遇见API
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/yujn"`
+
+ - [x] 小姐姐视频
+ - [x] 小姐姐视频2
+ - [x] 黑丝视频
+ - [x] 白丝视频
+ - [x] 欲梦视频
+ - [x] 甜妹视频
+ - [x] 双倍快乐
+ - [x] 纯情女高
+ - [x] 萝莉视频
+ - [x] 玉足视频
+ - [x] 帅哥视频
+ - [x] 热舞视频
+ - [x] 吊带视频
+ - [x] 汉服视频
+ - [x] 极品狱卒
+ - [x] 清纯视频
+ - [x] 快手变装
+ - [x] 抖音变装
+ - [x] 萌娃视频
+ - [x] 穿搭视频
+ - [x] 完美身材
+ - [x] 御姐撒娇
+ - [x] 绿茶语音
+ - [x] 怼人语音
+ - [x] 随机骚话
+ - [x] 随机污句子
+ - [x] 随机美句
+ - [x] 土味情话
+ - [x] 让[lulu]说我测尼玛
+
+
+
+### *低优先级*
+
+
+ 骂人
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/curse"`
+
+ - [x] 骂我
+
+ - [x] 大力骂我
+
+
+
+ 人工智能回复
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/aireply"`
+
+ - [x] @Bot 任意文本(任意一句话回复)
+
+ - [x] 设置文字回复模式[婧枫|沫沫|青云客|小爱|ChatGPT]
+
+ - [x] 设置 ChatGPT api key xxx
+
+
+
+ 词典匹配回复
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/thesaurus"`
+
+ - [x] 切换[kimo|傲娇|可爱]词库
+ - [x] 设置词库触发概率0.x (0
+
+ 打断复读
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/breakrepeat"`
+
+ - [x] (打断三次以上的复读)
+
+
+
+## 三种使用方法,推荐第一种
+
+### 1. 使用稳定版/测试版 (推荐)
+
+可以前往[Release](https://github.com/FloatTech/ZeroBot-Plugin/releases)页面下载对应系统版本可执行文件,编译时开启了全部插件。
+### 2. 本地直接运行
+
+1. 下载安装最新 [Go](https://studygolang.com/dl) 环境
+2. 下载本项目[压缩包](https://github.com/FloatTech/ZeroBot-Plugin/archive/master.zip),本地解压
+3. 编辑 main.go 文件,内容按需修改
+4. 运行 OneBot 框架
+5. `Windows`下双击 run.bat 文件,`Linux`下使用 run.sh 运行本插件
+
+### 3. 编译运行
+
+#### a. 利用 Actions 在线编译
+
+1. 点击右上角 Fork 本项目,并转跳到自己 Fork 的仓库
+2. 点击仓库上方的 Actions 按钮,确认使用 Actions
+3. 编辑 main.go 文件,内容按需修改
+4. 前往 Release 页面发布一个 Release,`tag`形如`v1.2.3`,以触发稳定版编译流程
+5. 点击 Actions 按钮,等待编译完成,回到 Release 页面下载编译好的文件
+6. 运行 OneBot 框架,并同时运行本插件
+7. 啾咪~
+
+#### b. 本地编译/交叉编译
+
+1. 下载安装最新 [Go](https://studygolang.com/dl) 环境
+2. clone 并进入本项目,下载所需包
+
+```bash
+git clone --depth=1 https://github.com/FloatTech/ZeroBot-Plugin.git
+cd ZeroBot-Plugin
+go version
+go env -w GOPROXY=https://goproxy.cn,direct
+go env -w GO111MODULE=auto
+go mod tidy
+```
+
+3. 编辑 main.go 文件,内容按需修改
+4. 按照平台输入命令编译,下面举了一些例子
+
+```bash
+# 本机平台
+go build -ldflags "-s -w" -o zerobot -trimpath
+# x64 Linux 平台 如各种云服务器
+GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o zerobot -trimpath
+# x64 Windows 平台 如大多数家用电脑
+GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -o zerobot.exe -trimpath
+# armv6 Linux 平台 如树莓派 zero W
+GOOS=linux GOARCH=arm GOARM=6 CGO_ENABLED=0 go build -ldflags "-s -w" -o zerobot -trimpath
+# (由于引入了github.com/fumiama/sqlite3,本项不再可用)mips Linux 平台 如 路由器 wndr4300
+GOOS=linux GOARCH=mips GOMIPS=softfloat CGO_ENABLED=0 go build -ldflags "-s -w" -o zerobot -trimpath
+```
+
+5. 运行 OneBot 框架,并同时运行本插件
+
+## 特别感谢
+
+- [ZeroBot](https://github.com/wdvxdr1123/ZeroBot)
+- [ATRI](https://github.com/Kyomotoi/ATRI)
+
+同时感谢以下开发者对 ZeroBot-Plugin 作出的贡献:
+
+
+
+
diff --git a/plugin/niuniu/niuniu/main.go b/plugin/niuniu/niuniu/main.go
new file mode 100644
index 0000000000..79501a6f6d
--- /dev/null
+++ b/plugin/niuniu/niuniu/main.go
@@ -0,0 +1,517 @@
+// Package niuniu 牛牛大作战
+package niuniu
+
+import (
+ "fmt"
+ "strconv"
+ "strings"
+ "time"
+
+ "github.com/FloatTech/AnimeAPI/wallet"
+ ctrl "github.com/FloatTech/zbpctrl"
+ "github.com/FloatTech/zbputils/control"
+ "github.com/FloatTech/zbputils/ctxext"
+ "github.com/RomiChan/syncx"
+ zero "github.com/wdvxdr1123/ZeroBot"
+ "github.com/wdvxdr1123/ZeroBot/extension/rate"
+ "github.com/wdvxdr1123/ZeroBot/message"
+)
+
+type lastLength struct {
+ TimeLimit time.Time
+ Count int
+ Length float64
+}
+
+type propsCount struct {
+ Count int
+ TimeLimit time.Time
+}
+
+var (
+ en = control.AutoRegister(&ctrl.Options[*zero.Ctx]{
+ DisableOnDefault: false,
+ Brief: "牛牛大作战",
+ Help: "- 打胶\n" +
+ "- 使用[道具名称]打胶\n" +
+ "- jj@xxx\n" +
+ "- 使用[道具名称]jj@xxx\n" +
+ "- 注册牛牛\n" +
+ "- 赎牛牛(cd:60分钟)\n" +
+ "- 出售牛牛\n" +
+ "- 牛牛商店\n" +
+ "- 牛牛背包\n" +
+ "- 注销牛牛\n" +
+ "- 查看我的牛牛\n" +
+ "- 牛子长度排行\n" +
+ "- 牛子深度排行\n",
+ PrivateDataFolder: "niuniu",
+ })
+ dajiaoLimiter = rate.NewManager[string](time.Second*90, 1)
+ jjLimiter = rate.NewManager[string](time.Second*150, 1)
+ jjCount = syncx.Map[string, *lastLength]{}
+ prop = syncx.Map[string, *propsCount]{}
+ countDeleteNiuNiu = syncx.Map[string, *propsCount]{} // 结构一样所以用同一个结构体
+)
+
+func init() {
+ en.OnFullMatch("出售牛牛", zero.OnlyGroup, getdb).SetBlock(true).Handle(func(ctx *zero.Ctx) {
+ gid := ctx.Event.GroupID
+ uid := ctx.Event.UserID
+ info, err := db.findNiuNiu(gid, uid)
+ if err != nil {
+ ctx.SendChain(message.Text("ERROR:", err))
+ return
+ }
+
+ money, msg := niuNiuProfit(info.Length)
+ if money == 0 {
+ ctx.SendChain(message.Text(msg))
+ return
+ }
+
+ if err = wallet.InsertWalletOf(uid, money); err != nil {
+ ctx.SendChain(message.Text("ERROR:", err))
+ return
+ }
+
+ ctx.SendChain(message.Text(msg))
+ })
+ en.OnFullMatch("牛牛背包", zero.OnlyGroup, getdb).SetBlock(true).Handle(func(ctx *zero.Ctx) {
+ gid := ctx.Event.GroupID
+ uid := ctx.Event.UserID
+ niu, err := db.findNiuNiu(gid, uid)
+ if err != nil {
+ ctx.SendChain(message.Text("你还没有牛牛呢快去注册一个吧!"))
+ return
+ }
+ ctx.SendChain(message.Text("当前牛牛背包如下",
+ "\n伟哥:", niu.WeiGe,
+ "\n媚药:", niu.Philter,
+ "\n击剑神器:", niu.Artifact,
+ "\n击剑神稽:", niu.ShenJi))
+ })
+ en.OnFullMatch("牛牛商店", zero.OnlyGroup, getdb).SetBlock(true).Handle(func(ctx *zero.Ctx) {
+ gid := ctx.Event.GroupID
+ uid := ctx.Event.UserID
+
+ if _, err := db.findNiuNiu(gid, uid); err != nil {
+ ctx.SendChain(message.Text("你还没有牛牛呢快去注册一个吧!"))
+ return
+ }
+
+ var messages message.Message
+ messages = append(messages, ctxext.FakeSenderForwardNode(ctx, message.Text("牛牛商店当前售卖的物品如下")))
+ messages = append(messages,
+ ctxext.FakeSenderForwardNode(ctx,
+ message.Text("商品1\n商品名:伟哥\n商品价格:300ATRI币\n商品描述:可以让你打胶每次都增长,有效5次")))
+ messages = append(messages,
+ ctxext.FakeSenderForwardNode(ctx,
+ message.Text("商品2\n商品名:媚药\n商品价格:300ATRI币\n商品描述:可以让你打胶每次都减少,有效5次")))
+ messages = append(messages,
+ ctxext.FakeSenderForwardNode(ctx,
+ message.Text("商品3\n商品名:击剑神器\n商品价格:500ATRI币\n商品描述:可以让你每次击剑都立于不败之地,有效2次")))
+ messages = append(messages,
+ ctxext.FakeSenderForwardNode(ctx,
+ message.Text("商品4\n商品名:击剑神稽\n商品价格:500ATRI币\n商品描述:可以让你每次击剑都失败,有效2次")))
+
+ if id := ctx.Send(messages).ID(); id == 0 {
+ ctx.Send(message.Text("发送商店失败"))
+ return
+ }
+
+ ctx.SendChain(message.Text("输入对应序号进行购买商品"))
+ recv, cancel := zero.NewFutureEvent("message", 999, false, zero.CheckUser(uid), zero.CheckGroup(gid), zero.RegexRule(`^(\d+)$`)).Repeat()
+ defer cancel()
+ timer := time.NewTimer(120 * time.Second)
+ answer := ""
+ defer timer.Stop()
+ for {
+ select {
+ case <-timer.C:
+ ctx.SendChain(message.At(uid), message.Text(" 超时,已自动取消"))
+ return
+ case r := <-recv:
+ answer = r.Event.Message.String()
+ n, err := strconv.Atoi(answer)
+ if err != nil {
+ ctx.SendChain(message.Text("ERROR: ", err))
+ return
+ }
+
+ info, err := db.findNiuNiu(gid, uid)
+ if err != nil {
+ ctx.SendChain(message.Text("ERROR: ", err))
+ return
+ }
+
+ money, err := info.purchaseItem(n)
+ if err != nil {
+ ctx.SendChain(message.Text("ERROR: ", err))
+ return
+ }
+
+ if wallet.GetWalletOf(uid) < money {
+ ctx.SendChain(message.Text("你还没有足够的ATRI币呢,不能购买"))
+ return
+ }
+
+ if err = wallet.InsertWalletOf(uid, -money); err != nil {
+ ctx.SendChain(message.Text("ERROR: ", err))
+ return
+ }
+
+ if err = db.insertNiuNiu(info, gid); err != nil {
+ ctx.SendChain(message.Text("ERROR: ", err))
+ return
+ }
+
+ ctx.SendChain(message.Text("购买成功!"))
+ return
+ }
+ }
+ })
+ en.OnFullMatch("赎牛牛", zero.OnlyGroup, getdb).SetBlock(true).Handle(func(ctx *zero.Ctx) {
+ gid := ctx.Event.GroupID
+ uid := ctx.Event.UserID
+ last, ok := jjCount.Load(fmt.Sprintf("%d_%d", gid, uid))
+
+ if !ok {
+ ctx.SendChain(message.Text("你还没有被厥呢"))
+ return
+ }
+
+ if time.Since(last.TimeLimit) > time.Minute*60 {
+ ctx.SendChain(message.Text("时间已经过期了,牛牛已被收回!"))
+ jjCount.Delete(fmt.Sprintf("%d_%d", gid, uid))
+ return
+ }
+
+ if last.Count < 4 {
+ ctx.SendChain(message.Text("你还没有被厥够4次呢,不能赎牛牛"))
+ return
+ }
+ ctx.SendChain(message.Text("再次确认一下哦,这次赎牛牛,牛牛长度将会变成", last.Length, "cm\n还需要嘛【是|否】"))
+ recv, cancel := zero.NewFutureEvent("message", 999, false, zero.CheckUser(uid), zero.CheckGroup(gid), zero.RegexRule(`^(是|否)$`)).Repeat()
+ defer cancel()
+ timer := time.NewTimer(2 * time.Minute)
+ defer timer.Stop()
+ for {
+ select {
+ case <-timer.C:
+ ctx.SendChain(message.Text("操作超时,已自动取消"))
+ return
+ case c := <-recv:
+ answer := c.Event.Message.String()
+ if answer == "否" {
+ ctx.SendChain(message.Text("取消成功!"))
+ return
+ }
+ money := wallet.GetWalletOf(uid)
+ if money < 150 {
+ ctx.SendChain(message.Text("赎牛牛需要150ATRI币,快去赚钱吧,目前仅有:", money, "个ATRI币"))
+ return
+ }
+
+ if err := wallet.InsertWalletOf(uid, -150); err != nil {
+ ctx.SendChain(message.Text("ERROR: ", err))
+ return
+ }
+
+ niuniu, err := db.findNiuNiu(gid, uid)
+ if err != nil {
+ ctx.SendChain(message.Text("ERROR: ", err))
+ return
+ }
+
+ niuniu.Length = last.Length
+
+ if err = db.insertNiuNiu(niuniu, gid); err != nil {
+ ctx.SendChain(message.Text("ERROR: ", err))
+ return
+ }
+
+ jjCount.Delete(fmt.Sprintf("%d_%d", gid, uid))
+
+ ctx.SendChain(message.At(uid), message.Text(fmt.Sprintf("恭喜你!成功赎回牛牛,当前长度为:%.2fcm", last.Length)))
+ return
+ }
+ }
+ })
+ en.OnFullMatch("牛子长度排行", zero.OnlyGroup, getdb).SetBlock(true).Handle(func(ctx *zero.Ctx) {
+ gid := ctx.Event.GroupID
+ niuniuList, err := db.readAllTable(gid)
+ if err != nil {
+ ctx.SendChain(message.Text("ERROR: ", err))
+ return
+ }
+ m := niuniuList.positive()
+ if m == nil {
+ ctx.SendChain(message.Text("暂时没有男孩子哦"))
+ return
+ }
+ m.sort(true)
+ buf, err := m.setupDrawList(ctx, true)
+ if err != nil {
+ ctx.SendChain(message.Text("ERROR: ", err))
+ return
+ }
+ ctx.SendChain(message.ImageBytes(buf))
+ })
+ en.OnFullMatch("牛子深度排行", zero.OnlyGroup, getdb).SetBlock(true).Handle(func(ctx *zero.Ctx) {
+ gid := ctx.Event.GroupID
+ niuniuList, err := db.readAllTable(gid)
+ if err != nil {
+ ctx.SendChain(message.Text("ERROR: ", err))
+ return
+ }
+ m := niuniuList.negative()
+ if m == nil {
+ ctx.SendChain(message.Text("暂时没有女孩子哦"))
+ return
+ }
+ m.sort(false)
+ buf, err := m.setupDrawList(ctx, false)
+ if err != nil {
+ ctx.SendChain(message.Text("ERROR: ", err))
+ return
+ }
+
+ ctx.SendChain(message.ImageBytes(buf))
+ })
+ en.OnFullMatch("查看我的牛牛", getdb, zero.OnlyGroup).SetBlock(true).Handle(func(ctx *zero.Ctx) {
+ uid := ctx.Event.UserID
+ gid := ctx.Event.GroupID
+ i, err := db.findNiuNiu(gid, uid)
+ if err != nil {
+ ctx.SendChain(message.Text("你还没有牛牛呢不能查看!"))
+ return
+ }
+ niuniu := i.Length
+ var result strings.Builder
+ sexLong := "长"
+ sex := "♂️"
+ if niuniu < 0 {
+ sexLong = "深"
+ sex = "♀️"
+ }
+ niuniuList, err := db.readAllTable(gid)
+ if err != nil {
+ ctx.SendChain(message.Text("ERROR: ", err))
+ return
+ }
+ result.WriteString(fmt.Sprintf("\n📛%s<%s>的牛牛信息\n⭕性别:%s\n⭕%s度:%.2fcm\n⭕排行:%d\n⭕%s ",
+ ctx.CardOrNickName(uid), strconv.FormatInt(uid, 10),
+ sex, sexLong, niuniu, niuniuList.ranking(niuniu, uid), generateRandomString(niuniu)))
+ ctx.SendChain(message.Text(&result))
+ })
+ en.OnRegex(`^(?:.*使用(.*))??打胶$`, zero.OnlyGroup,
+ getdb).SetBlock(true).Limit(func(ctx *zero.Ctx) *rate.Limiter {
+ lt := dajiaoLimiter.Load(fmt.Sprintf("%d_%d", ctx.Event.GroupID, ctx.Event.UserID))
+ ctx.State["dajiao_last_touch"] = lt.LastTouch()
+ return lt
+ }, func(ctx *zero.Ctx) {
+ timePass := int(time.Since(time.Unix(ctx.State["dajiao_last_touch"].(int64), 0)).Seconds())
+ ctx.SendChain(message.Text(randomChoice([]string{
+ fmt.Sprintf("才过去了%ds时间,你就又要打🦶了,身体受得住吗", timePass),
+ fmt.Sprintf("不行不行,你的身体会受不了的,歇%ds再来吧", 90-timePass),
+ fmt.Sprintf("休息一下吧,会炸膛的!%ds后再来吧", 90-timePass),
+ fmt.Sprintf("打咩哟,你的牛牛会爆炸的,休息%ds再来吧", 90-timePass),
+ })))
+ }).Handle(func(ctx *zero.Ctx) {
+ // 获取群号和用户ID
+ gid := ctx.Event.GroupID
+ uid := ctx.Event.UserID
+ t := fmt.Sprintf("%d_%d", gid, uid)
+ fiancee := ctx.State["regex_matched"].([]string)
+ updateMap(t, false)
+
+ niuniu, err := db.findNiuNiu(gid, uid)
+ if err != nil {
+ ctx.SendChain(message.Text("请先注册牛牛!"))
+ dajiaoLimiter.Delete(fmt.Sprintf("%d_%d", gid, uid))
+ return
+ }
+
+ messages, err := niuniu.processNiuNiuAction(t, fiancee[1])
+ if err != nil {
+ ctx.SendChain(message.Text(err))
+ dajiaoLimiter.Delete(fmt.Sprintf("%d_%d", gid, uid))
+ return
+ }
+ if err = db.insertNiuNiu(niuniu, gid); err != nil {
+ ctx.SendChain(message.Text("ERROR: ", err))
+ return
+ }
+
+ ctx.SendChain(message.Text(messages))
+ })
+ en.OnFullMatch("注册牛牛", zero.OnlyGroup, getdb).SetBlock(true).Handle(func(ctx *zero.Ctx) {
+ gid := ctx.Event.GroupID
+ uid := ctx.Event.UserID
+ if _, err := db.findNiuNiu(gid, uid); err == nil {
+ ctx.SendChain(message.Text("你已经注册过了"))
+ return
+ }
+ // 获取初始长度
+ length := db.randLength()
+ u := userInfo{
+ UID: uid,
+ Length: length,
+ }
+ // 添加数据进入表
+ if err := db.insertNiuNiu(&u, gid); err != nil {
+ if err = db.createGIDTable(gid); err != nil {
+ ctx.SendChain(message.Text("ERROR: ", err))
+ return
+ }
+
+ if err = db.insertNiuNiu(&u, gid); err != nil {
+ ctx.SendChain(message.Text("ERROR: ", err))
+ return
+ }
+ }
+ ctx.SendChain(message.At(uid),
+ message.Text("注册成功,你的牛牛现在有", u.Length, "cm"))
+ })
+ en.OnRegex(`^(?:.*使用(.*))??jj\s?(\[CQ:at,(?:\S*,)?qq=(\d+)(?:,\S*)?\]|(\d+))$`, getdb,
+ zero.OnlyGroup).SetBlock(true).Limit(func(ctx *zero.Ctx) *rate.Limiter {
+ lt := jjLimiter.Load(fmt.Sprintf("%d_%d", ctx.Event.GroupID, ctx.Event.UserID))
+ ctx.State["jj_last_touch"] = lt.LastTouch()
+ return lt
+ }, func(ctx *zero.Ctx) {
+ timePass := int(time.Since(time.Unix(ctx.State["jj_last_touch"].(int64), 0)).Seconds())
+ ctx.SendChain(message.Text(randomChoice([]string{
+ fmt.Sprintf("才过去了%ds时间,你就又要击剑了,真是饥渴难耐啊", timePass),
+ fmt.Sprintf("不行不行,你的身体会受不了的,歇%ds再来吧", 150-timePass),
+ fmt.Sprintf("你这种男同就应该被送去集中营!等待%ds再来吧", 150-timePass),
+ fmt.Sprintf("打咩哟!你的牛牛会炸的,休息%ds再来吧", 150-timePass),
+ })))
+ },
+ ).Handle(func(ctx *zero.Ctx) {
+ fiancee := ctx.State["regex_matched"].([]string)
+ adduser, err := strconv.ParseInt(fiancee[3]+fiancee[4], 10, 64)
+ if err != nil {
+ ctx.SendChain(message.Text("ERROR: ", err))
+ return
+ }
+ uid := ctx.Event.UserID
+ gid := ctx.Event.GroupID
+ t := fmt.Sprintf("%d_%d", gid, uid)
+ updateMap(t, false)
+ myniuniu, err := db.findNiuNiu(gid, uid)
+ if err != nil {
+ ctx.SendChain(message.Text("你还没有牛牛快去注册一个吧!"))
+ jjLimiter.Delete(t)
+ return
+ }
+ adduserniuniu, err := db.findNiuNiu(gid, adduser)
+ if err != nil {
+ ctx.SendChain(message.At(uid), message.Text("对方还没有牛牛呢,不能🤺"))
+ jjLimiter.Delete(t)
+ return
+ }
+ if uid == adduser {
+ ctx.SendChain(message.Text("你要和谁🤺?你自己吗?"))
+ jjLimiter.Delete(t)
+ return
+ }
+ fencingResult, err := myniuniu.processJJuAction(adduserniuniu, t, fiancee[1])
+ if err != nil {
+ ctx.SendChain(message.Text(err))
+ return
+ }
+
+ if err = db.insertNiuNiu(myniuniu, gid); err != nil {
+ ctx.SendChain(message.Text("ERROR: ", err))
+ return
+ }
+
+ if err = db.insertNiuNiu(adduserniuniu, gid); err != nil {
+ ctx.SendChain(message.Text("ERROR: ", err))
+ return
+ }
+
+ ctx.SendChain(message.At(uid), message.Text(" ", fencingResult))
+ j := fmt.Sprintf("%d_%d", gid, adduser)
+ count, ok := jjCount.Load(j)
+ var c lastLength
+ // 按照第一次jj时的时间计算,超过45分钟则重置
+ if !ok {
+ c = lastLength{
+ TimeLimit: time.Now(),
+ Count: 1,
+ Length: adduserniuniu.Length,
+ }
+ } else {
+ c = lastLength{
+ TimeLimit: c.TimeLimit,
+ Count: count.Count + 1,
+ Length: count.Length,
+ }
+ if time.Since(c.TimeLimit) > time.Minute*60 {
+ c = lastLength{
+ TimeLimit: time.Now(),
+ Count: 1,
+ Length: adduserniuniu.Length,
+ }
+ }
+ }
+
+ jjCount.Store(j, &c)
+ if c.Count > 2 {
+ ctx.SendChain(message.Text(randomChoice([]string{fmt.Sprintf("你们太厉害了,对方已经被你们打了%d次了,你们可以继续找他🤺", c.Count),
+ "你们不要再找ta🤺啦!"})))
+ // 保证只发送一次
+ if c.Count < 4 {
+ id := ctx.SendPrivateMessage(adduser,
+ message.Text(fmt.Sprintf("你在%d群里已经被厥冒烟了,快去群里赎回你原本的牛牛!\n发送:`赎牛牛`即可!", gid)))
+ if id == 0 {
+ ctx.SendChain(message.At(adduser), message.Text("快发送`赎牛牛`来赎回你原本的牛牛!"))
+ }
+ }
+ }
+ })
+ en.OnFullMatch("注销牛牛", getdb, zero.OnlyGroup).SetBlock(true).Handle(func(ctx *zero.Ctx) {
+ uid := ctx.Event.UserID
+ gid := ctx.Event.GroupID
+ _, err := db.findNiuNiu(gid, uid)
+ if err != nil {
+ ctx.SendChain(message.Text("你还没有牛牛呢,咋的你想凭空造一个啊"))
+ return
+ }
+ t := fmt.Sprintf("%d_%d", gid, uid)
+ value, ok := countDeleteNiuNiu.Load(t)
+ if ok {
+ if time.Since(value.TimeLimit) < 24*time.Hour {
+ money := getMoneyForNumber(value.Count)
+ walletOf := wallet.GetWalletOf(uid)
+ if !(walletOf > money) {
+ ctx.SendChain(message.Text(fmt.Sprintf("你今天已经注销了%d次了,此次注销需要%d个ATRI币,没钱就等待明天重置吧", value.Count+1, money)))
+ return
+ }
+ if err = wallet.InsertWalletOf(uid, -money); err != nil {
+ ctx.SendChain(message.Text("ERROR:", err))
+ return
+ }
+ countDeleteNiuNiu.Store(t, &propsCount{
+ Count: value.Count + 1,
+ })
+ } else {
+ countDeleteNiuNiu.Delete(t)
+ }
+ } else {
+ countDeleteNiuNiu.Store(t, &propsCount{
+ Count: 1,
+ TimeLimit: time.Now(),
+ })
+ value = &propsCount{}
+ }
+ err = db.deleteniuniu(gid, uid)
+ if err != nil {
+ ctx.SendChain(message.Text("注销失败"))
+ return
+ }
+ ctx.SendChain(message.Text("这是你今天第", value.Count+1, "次注销,注销成功,你已经没有牛牛了"))
+ })
+}
diff --git a/plugin/niuniu/niuniu/model.go b/plugin/niuniu/niuniu/model.go
new file mode 100644
index 0000000000..b980c419c0
--- /dev/null
+++ b/plugin/niuniu/niuniu/model.go
@@ -0,0 +1,385 @@
+// Package niuniu 牛牛大作战
+package niuniu
+
+import (
+ "bytes"
+ "errors"
+ "fmt"
+ "image/png"
+ "math"
+ "math/rand"
+ "sort"
+ "strconv"
+ "sync"
+ "time"
+
+ fcext "github.com/FloatTech/floatbox/ctxext"
+ sql "github.com/FloatTech/sqlite"
+ zero "github.com/wdvxdr1123/ZeroBot"
+ "github.com/wdvxdr1123/ZeroBot/message"
+)
+
+type model struct {
+ sql sql.Sqlite
+ sync.RWMutex
+}
+
+type userInfo struct {
+ UID int64
+ Length float64
+ UserCount int
+ WeiGe int // 伟哥
+ Philter int // 媚药
+ Artifact int // 击剑神器
+ ShenJi int // 击剑神稽
+ Buff1 int // 暂定
+ Buff2 int // 暂定
+ Buff3 int // 暂定
+ Buff4 int // 暂定
+ Buff5 int // 暂定
+}
+
+type users []*userInfo
+
+var (
+ db = &model{}
+ getdb = fcext.DoOnceOnSuccess(func(ctx *zero.Ctx) bool {
+ db.sql.DBPath = en.DataFolder() + "niuniu.db"
+ err := db.sql.Open(time.Hour * 24)
+ if err != nil {
+ ctx.SendChain(message.Text("ERROR: ", err))
+ return false
+ }
+ return true
+ })
+)
+
+// useWeiGe 使用道具伟哥
+func (u *userInfo) useWeiGe() (string, float64) {
+ niuniu := u.Length
+ reduce := math.Abs(hitGlue(niuniu))
+ niuniu += reduce
+ return randomChoice([]string{
+ fmt.Sprintf("哈哈,你这一用道具,牛牛就像是被激发了潜能,增加了%.2fcm!看来今天是个大日子呢!", reduce),
+ fmt.Sprintf("你这是用了什么神奇的道具?牛牛竟然增加了%.2fcm,简直是牛气冲天!", reduce),
+ fmt.Sprintf("使用道具后,你的牛牛就像是开启了加速模式,一下增加了%.2fcm,这成长速度让人惊叹!", reduce),
+ }), niuniu
+}
+
+// usePhilter 使用道具媚药
+func (u *userInfo) usePhilter() (string, float64) {
+ niuniu := u.Length
+ reduce := math.Abs(hitGlue(niuniu))
+ niuniu -= reduce
+ return randomChoice([]string{
+ fmt.Sprintf("你使用媚药,咿呀咿呀一下使当前长度发生了一些变化,当前长度%.2f", niuniu),
+ fmt.Sprintf("看来你追求的是‘微观之美’,故意使用道具让牛牛凹进去了%.2fcm!", reduce),
+ fmt.Sprintf("缩小奇迹’在你身上发生了,牛牛凹进去了%.2fcm,你的选择真是独特!", reduce),
+ }), niuniu
+}
+
+// useArtifact 使用道具击剑神器
+func (u *userInfo) useArtifact(adduserniuniu float64) (string, float64, float64) {
+ myLength := u.Length
+ difference := myLength - adduserniuniu
+ var (
+ change float64
+ )
+ if difference > 0 {
+ change = hitGlue(myLength + adduserniuniu)
+ } else {
+ change = hitGlue((myLength + adduserniuniu) / 2)
+ }
+ myLength += change
+ return randomChoice([]string{
+ fmt.Sprintf("凭借神秘道具的力量,你让对方在你的长度面前俯首称臣!你的长度增加了%.2fcm,当前长度达到了%.2fcm", change, myLength),
+ fmt.Sprintf("神器在手,天下我有!你使用道具后,长度猛增%.2fcm,现在的总长度是%.2fcm,无人能敌!", change, myLength),
+ fmt.Sprintf("这就是道具的魔力!你轻松增加了%.2fcm,让对手望尘莫及,当前长度为%.2fcm!", change, myLength),
+ fmt.Sprintf("道具一出,谁与争锋!你的长度因道具而增长%.2fcm,现在的长度是%.2fcm,霸气尽显!", change, myLength),
+ fmt.Sprintf("使用道具的你,如同获得神助!你的长度增长了%.2fcm,达到%.2fcm的惊人长度,胜利自然到手!", change, myLength),
+ }), myLength, adduserniuniu - change/1.3
+}
+
+// useShenJi 使用道具击剑神稽
+func (u *userInfo) useShenJi(adduserniuniu float64) (string, float64, float64) {
+ myLength := u.Length
+ difference := myLength - adduserniuniu
+ var (
+ change float64
+ )
+ if difference > 0 {
+ change = hitGlue(myLength + adduserniuniu)
+ } else {
+ change = hitGlue((myLength + adduserniuniu) / 2)
+ }
+ myLength -= change
+ var r string
+ if myLength > 0 {
+ r = randomChoice([]string{
+ fmt.Sprintf("哦吼!?看来你的牛牛因为使用了神秘道具而缩水了呢🤣🤣🤣!缩小了%.2fcm!", change),
+ fmt.Sprintf("哈哈,看来这个道具有点儿调皮,让你的长度缩水了%.2fcm!现在你的长度是%.2fcm,下次可得小心使用哦!", change, myLength),
+ fmt.Sprintf("使用道具后,你的牛牛似乎有点儿害羞,缩水了%.2fcm!现在的长度是%.2fcm,希望下次它能挺直腰板!", change, myLength),
+ fmt.Sprintf("哎呀,这个道具的效果有点儿意外,你的长度减少了%.2fcm,现在只有%.2fcm了!下次选道具可得睁大眼睛!", change, myLength),
+ })
+ } else {
+ r = randomChoice([]string{
+ fmt.Sprintf("哦哟,小姐姐真是玩得一手好游戏,使用道具后数值又降低了%.2fcm,小巧得更显魅力!", change),
+ fmt.Sprintf("看来小姐姐喜欢更加精致的风格,使用道具后,数值减少了%.2fcm,更加迷人了!", change),
+ fmt.Sprintf("小姐姐的每一次变化都让人惊喜,使用道具后,数值减少了%.2fcm,更加优雅动人!", change),
+ fmt.Sprintf("小姐姐这是在展示什么是真正的精致小巧,使用道具后,数值减少了%.2fcm,美得不可方物!", change),
+ })
+ }
+ return r, myLength, adduserniuniu + 0.7*change
+}
+
+func (u *userInfo) processNiuNiuAction(t string, props string) (string, error) {
+ var (
+ messages string
+ info userInfo
+ err error
+ f float64
+ )
+ load, ok := prop.Load(t)
+ info = *u
+ if props != "" {
+ if props != "伟哥" && props != "媚药" {
+ err = errors.New("道具不存在")
+ }
+ if props == "击剑神器" || props == "击剑神稽" {
+ err = errors.New("道具不能混着用哦")
+ }
+ if err != nil {
+ return "", err
+ }
+ if err = u.createUserInfoByProps(props); err != nil {
+ return "", err
+ }
+ }
+ switch {
+ case ok && load.Count > 1 && time.Since(load.TimeLimit) < time.Minute*8:
+ messages, f = generateRandomStingTwo(u.Length)
+ u.Length = f
+ errMessage := fmt.Sprintf("你使用道具次数太快了,此次道具不会生效,等待%d再来吧", time.Minute*8-time.Since(load.TimeLimit))
+ err = errors.New(errMessage)
+
+ case u.WeiGe-info.WeiGe != 0:
+ messages, f = u.useWeiGe()
+ u.Length = f
+ updateMap(t, true)
+
+ case u.Philter-info.Philter != 0:
+ messages, f = u.usePhilter()
+ u.Length = f
+ updateMap(t, true)
+
+ default:
+ messages, f = generateRandomStingTwo(u.Length)
+ u.Length = f
+ }
+ return messages, err
+}
+
+func (u *userInfo) createUserInfoByProps(props string) error {
+ var (
+ err error
+ )
+ switch props {
+ case "伟哥":
+ if u.WeiGe > 0 {
+ u.WeiGe--
+ } else {
+ err = errors.New("你还没有伟哥呢,不能使用")
+ }
+ case "媚药":
+ if u.Philter > 0 {
+ u.Philter--
+ } else {
+ err = errors.New("你还没有媚药呢,不能使用")
+ }
+ case "击剑神器":
+ if u.Artifact > 0 {
+ u.Artifact--
+ } else {
+ err = errors.New("你还没有击剑神器呢,不能使用")
+ }
+ case "击剑神稽":
+ if u.ShenJi > 0 {
+ u.ShenJi--
+ } else {
+ err = errors.New("你还没有击剑神稽呢,不能使用")
+ }
+ default:
+ err = errors.New("道具不存在")
+ }
+ return err
+}
+
+// 接收值依次是 被jj用户的信息 记录gid和uid的字符串 道具名称
+// 返回值依次是 要发送的消息 错误信息
+func (u *userInfo) processJJuAction(adduserniuniu *userInfo, t string, props string) (string, error) {
+ var (
+ fencingResult string
+ f float64
+ f1 float64
+ info userInfo
+ err error
+ )
+ v, ok := prop.Load(t)
+ info = *u
+ if props != "" {
+ if props != "击剑神器" && props != "击剑神稽" {
+ err = errors.New("道具不存在")
+ }
+ if props == "伟哥" || props == "媚药" {
+ err = errors.New("道具不能混着用哦")
+ }
+ if err = u.createUserInfoByProps(props); err != nil {
+ return "", err
+ }
+ }
+ switch {
+ case ok && v.Count > 1 && time.Since(v.TimeLimit) < time.Minute*8:
+ fencingResult, f, f1 = fencing(u.Length, adduserniuniu.Length)
+ u.Length = f
+ adduserniuniu.Length = f1
+ errMessage := fmt.Sprintf("你使用道具次数太快了,此次道具不会生效,等待%d再来吧", time.Minute*8-time.Since(v.TimeLimit))
+ err = errors.New(errMessage)
+ case u.ShenJi-info.ShenJi != 0:
+ fencingResult, f, f1 = u.useShenJi(adduserniuniu.Length)
+ u.Length = f
+ adduserniuniu.Length = f1
+ updateMap(t, true)
+ case u.Artifact-info.Artifact != 0:
+ fencingResult, f, f1 = u.useArtifact(adduserniuniu.Length)
+ u.Length = f
+ adduserniuniu.Length = f1
+ updateMap(t, true)
+ default:
+ fencingResult, f, f1 = fencing(u.Length, adduserniuniu.Length)
+ u.Length = f
+ adduserniuniu.Length = f1
+ }
+ return fencingResult, err
+}
+
+func (u *userInfo) purchaseItem(n int) (int, error) {
+ var (
+ money int
+ err error
+ )
+ switch n {
+ case 1:
+ money = 300
+ u.WeiGe += 5
+ case 2:
+ money = 300
+ u.Philter += 5
+ case 3:
+ money = 500
+ u.Artifact += 2
+ case 4:
+ money = 500
+ u.ShenJi += 2
+ default:
+ err = errors.New("无效的选择")
+ }
+ return money, err
+}
+
+func (m users) setupDrawList(ctx *zero.Ctx, t bool) ([]byte, error) {
+ allUsers := make(drawer, len(m))
+ for i, info := range m {
+ allUsers[i] = drawUserRanking{
+ name: ctx.CardOrNickName(info.UID),
+ user: info,
+ }
+ }
+ image, err := allUsers.draw(t)
+ if err != nil {
+ return nil, err
+ }
+ var buf bytes.Buffer
+ err = png.Encode(&buf, image)
+ return buf.Bytes(), err
+}
+
+func (m users) positive() users {
+ var m1 []*userInfo
+ for _, i2 := range m {
+ if i2.Length > 0 {
+ m1 = append(m1, i2)
+ }
+ }
+ return m1
+}
+
+func (m users) negative() users {
+ var m1 []*userInfo
+ for _, i2 := range m {
+ if i2.Length <= 0 {
+ m1 = append(m1, i2)
+ }
+ }
+ return m1
+}
+
+func (m users) sort(isDesc bool) {
+ t := func(i, j int) bool {
+ return m[i].Length < m[j].Length
+ }
+ if isDesc {
+ t = func(i, j int) bool {
+ return m[i].Length > m[j].Length
+ }
+ }
+ sort.Slice(m, t)
+}
+
+func (m users) ranking(niuniu float64, uid int64) int {
+ m.sort(niuniu > 0)
+ for i, user := range m {
+ if user.UID == uid {
+ return i + 1
+ }
+ }
+ return -1
+}
+
+func (db *model) randLength() float64 {
+ return float64(rand.Intn(9)+1) + (float64(rand.Intn(100)) / 100)
+}
+
+func (db *model) createGIDTable(gid int64) error {
+ db.Lock()
+ defer db.Unlock()
+ return db.sql.Create(strconv.FormatInt(gid, 10), &userInfo{})
+}
+
+// findNiuNiu 返回一个用户的牛牛信息
+func (db *model) findNiuNiu(gid, uid int64) (*userInfo, error) {
+ db.RLock()
+ defer db.RUnlock()
+ u := userInfo{}
+ err := db.sql.Find(strconv.FormatInt(gid, 10), &u, "where UID = "+strconv.FormatInt(uid, 10))
+ return &u, err
+}
+
+// insertNiuNiu 更新一个用户的牛牛信息
+func (db *model) insertNiuNiu(u *userInfo, gid int64) error {
+ db.Lock()
+ defer db.Unlock()
+ return db.sql.Insert(strconv.FormatInt(gid, 10), u)
+}
+
+func (db *model) deleteniuniu(gid, uid int64) error {
+ db.Lock()
+ defer db.Unlock()
+ return db.sql.Del(strconv.FormatInt(gid, 10), "where UID = "+strconv.FormatInt(uid, 10))
+}
+
+func (db *model) readAllTable(gid int64) (users, error) {
+ db.Lock()
+ defer db.Unlock()
+ a, err := sql.FindAll[userInfo](&db.sql, strconv.FormatInt(gid, 10), "where UserCount = 0")
+ return a, err
+}
diff --git a/plugin/niuniu/niuniu/utils.go b/plugin/niuniu/niuniu/utils.go
new file mode 100644
index 0000000000..8bd83337a6
--- /dev/null
+++ b/plugin/niuniu/niuniu/utils.go
@@ -0,0 +1,274 @@
+// Package niuniu 牛牛大作战
+package niuniu
+
+import (
+ "fmt"
+ "math"
+ "math/rand"
+ "time"
+)
+
+func randomChoice(options []string) string {
+ return options[rand.Intn(len(options))]
+}
+
+func updateMap(t string, d bool) {
+ value, ok := prop.Load(t)
+ if value == nil {
+ return
+ }
+ // 检查一次是否已经过期
+ if !d {
+ if time.Since(value.TimeLimit) > time.Minute*8 {
+ prop.Delete(t)
+ }
+ return
+ }
+ if ok {
+ prop.Store(t, &propsCount{
+ Count: value.Count + 1,
+ TimeLimit: value.TimeLimit,
+ })
+ } else {
+ prop.Store(t, &propsCount{
+ Count: 1,
+ TimeLimit: time.Now(),
+ })
+ }
+ if time.Since(value.TimeLimit) > time.Minute*8 {
+ prop.Delete(t)
+ }
+}
+
+func getMoneyForNumber(n int) (money int) {
+ switch n {
+ case 1:
+ money = 5
+ case 2:
+ money = 10
+ default:
+ money = n * 10
+ }
+ return
+}
+
+func niuNiuProfit(niuniu float64) (money int, message string) {
+ switch {
+ case 0 < niuniu && niuniu <= 15:
+ message = randomChoice([]string{
+ "你的牛牛太小啦",
+ "这么小的牛牛就要肩负起这么大的责任吗?快去打胶吧!",
+ })
+ case niuniu > 15:
+ money = int(niuniu * 10)
+ message = randomChoice([]string{
+ fmt.Sprintf("你的牛牛已经离你而去了,你赚取了%d个ATRI币", money),
+ fmt.Sprintf("啊!你的牛☞已经没啦🤣,为了这点钱就出卖你的牛牛可真不值,你赚取了%d个ATRI币", money),
+ })
+ case niuniu <= 0 && niuniu >= -15:
+ message = randomChoice([]string{
+ "你的牛牛太小啦",
+ "这么小的牛牛就要肩负起这么大的责任吗?快去找别人玩吧!",
+ })
+ case niuniu < -15:
+ money = int(math.Abs(niuniu * 10))
+ message = randomChoice([]string{
+ fmt.Sprintf("此世做了女孩子来世来当男孩子(bushi),你赚取了%d个ATRI币", money),
+ fmt.Sprintf("呜呜呜,不哭不哭当女孩子不委屈的,你赚取了%d个ATRI币", money),
+ })
+ }
+ return
+}
+
+func generateRandomStingTwo(niuniu float64) (string, float64) {
+ probability := rand.Intn(100 + 1)
+ reduce := math.Abs(hitGlue(niuniu))
+ switch {
+ case probability <= 40:
+ niuniu += reduce
+ return randomChoice([]string{
+ fmt.Sprintf("你嘿咻嘿咻一下,促进了牛牛发育,牛牛增加%.2fcm了呢!", reduce),
+ fmt.Sprintf("你打了个舒服痛快的🦶呐,牛牛增加了%.2fcm呢!", reduce),
+ }), niuniu
+ case probability <= 60:
+ return randomChoice([]string{
+ "你打了个🦶,但是什么变化也没有,好奇怪捏~",
+ "你的牛牛刚开始变长了,可过了一会又回来了,什么变化也没有,好奇怪捏~",
+ }), niuniu
+ default:
+ niuniu -= reduce
+ if niuniu < 0 {
+ return randomChoice([]string{
+ fmt.Sprintf("哦吼!?看来你的牛牛凹进去了%.2fcm呢!", reduce),
+ fmt.Sprintf("你突发恶疾!你的牛牛凹进去了%.2fcm!", reduce),
+ fmt.Sprintf("笑死,你因为打🦶过度导致牛牛凹进去了%.2fcm!🤣🤣🤣", reduce),
+ }), niuniu
+ }
+ return randomChoice([]string{
+ fmt.Sprintf("阿哦,你过度打🦶,牛牛缩短%.2fcm了呢!", reduce),
+ fmt.Sprintf("你的牛牛变长了很多,你很激动地继续打🦶,然后牛牛缩短了%.2fcm呢!", reduce),
+ fmt.Sprintf("小打怡情,大打伤身,强打灰飞烟灭!你过度打🦶,牛牛缩短了%.2fcm捏!", reduce),
+ }), niuniu
+ }
+}
+
+func generateRandomString(niuniu float64) string {
+ switch {
+ case niuniu <= -100:
+ return "wtf?你已经进化成魅魔了!魅魔在击剑时有20%的几率消耗自身长度吞噬对方牛牛呢。"
+ case niuniu <= -50:
+ return "嗯....好像已经穿过了身体吧..从另一面来看也可以算是凸出来的吧?"
+ case niuniu <= -25:
+ return randomChoice([]string{
+ "这名女生,你的身体很健康哦!",
+ "WOW,真的凹进去了好多呢!",
+ "你已经是我们女孩子的一员啦!",
+ })
+ case niuniu <= -10:
+ return randomChoice([]string{
+ "你已经是一名女生了呢,",
+ "从女生的角度来说,你发育良好(,",
+ "你醒啦?你已经是一名女孩子啦!",
+ "唔...可以放进去一根手指了都...",
+ })
+ case niuniu <= 0:
+ return randomChoice([]string{
+ "安了安了,不要伤心嘛,做女生有什么不好的啊。",
+ "不哭不哭,摸摸头,虽然很难再长出来,但是请不要伤心啦啊!",
+ "加油加油!我看好你哦!",
+ "你醒啦?你现在已经是一名女孩子啦!",
+ })
+ case niuniu <= 10:
+ return randomChoice([]string{
+ "你行不行啊?细狗!",
+ "虽然短,但是小小的也很可爱呢。",
+ "像一只蚕宝宝。",
+ "长大了。",
+ })
+ case niuniu <= 25:
+ return randomChoice([]string{
+ "唔...没话说",
+ "已经很长了呢!",
+ })
+ case niuniu <= 50:
+ return randomChoice([]string{
+ "话说这种真的有可能吗?",
+ "厚礼谢!",
+ })
+ case niuniu <= 100:
+ return randomChoice([]string{
+ "已经突破天际了嘛...",
+ "唔...这玩意应该不会变得比我高吧?",
+ "你这个长度会死人的...!",
+ "你马上要进化成牛头人了!!",
+ "你是什么怪物,不要过来啊!!",
+ })
+ default:
+ return "惊世骇俗!你已经进化成牛头人了!牛头人在击剑时有20%的几率消耗自身长度吞噬对方牛牛呢。"
+ }
+}
+
+// fencing 击剑对决逻辑,返回对决结果和myLength的变化值
+func fencing(myLength, oppoLength float64) (string, float64, float64) {
+ devourLimit := 0.27
+
+ probability := rand.Intn(100) + 1
+
+ switch {
+ case oppoLength <= -100 && myLength > 0 && 10 < probability && probability <= 20:
+ change := hitGlue(oppoLength) + rand.Float64()*math.Log2(math.Abs(0.5*(myLength+oppoLength)))
+ myLength += change
+ return fmt.Sprintf("对方身为魅魔诱惑了你,你同化成魅魔!当前长度%.2fcm!", -myLength), -myLength, oppoLength
+
+ case oppoLength >= 100 && myLength > 0 && 10 < probability && probability <= 20:
+ change := math.Min(math.Abs(devourLimit*myLength), math.Abs(1.5*myLength))
+ myLength += change
+ return fmt.Sprintf("对方以牛头人的荣誉摧毁了你的牛牛!当前长度%.2fcm!", myLength), myLength, oppoLength
+
+ case myLength <= -100 && oppoLength > 0 && 10 < probability && probability <= 20:
+ change := hitGlue(myLength+oppoLength) + rand.Float64()*math.Log2(math.Abs(0.5*(myLength+oppoLength)))
+ oppoLength -= change
+ myLength -= change
+ return fmt.Sprintf("你身为魅魔诱惑了对方,吞噬了对方部分长度!当前长度%.2fcm!", myLength), myLength, oppoLength
+
+ case myLength >= 100 && oppoLength > 0 && 10 < probability && probability <= 20:
+ myLength -= oppoLength
+ oppoLength = 0.01
+ return fmt.Sprintf("你以牛头人的荣誉摧毁了对方的牛牛!当前长度%.2fcm!", myLength), myLength, oppoLength
+
+ default:
+ return determineResultBySkill(myLength, oppoLength)
+ }
+}
+
+// determineResultBySkill 根据击剑技巧决定结果
+func determineResultBySkill(myLength, oppoLength float64) (string, float64, float64) {
+ probability := rand.Intn(100) + 1
+ winProbability := calculateWinProbability(myLength, oppoLength) * 100
+ return applySkill(myLength, oppoLength,
+ float64(probability) <= winProbability)
+}
+
+// calculateWinProbability 计算胜率
+func calculateWinProbability(heightA, heightB float64) float64 {
+ pA := 0.9
+ heightRatio := math.Max(heightA, heightB) / math.Min(heightA, heightB)
+ reductionRate := 0.1 * (heightRatio - 1)
+ reduction := pA * reductionRate
+
+ adjustedPA := pA - reduction
+ return math.Max(adjustedPA, 0.01)
+}
+
+// applySkill 应用击剑技巧并生成结果
+func applySkill(myLength, oppoLength float64, increaseLength1 bool) (string, float64, float64) {
+ reduce := fence(oppoLength)
+ // 兜底操作
+ if reduce == 0 {
+ reduce = rand.Float64() + float64(rand.Intn(3))
+ }
+ if increaseLength1 {
+ myLength += reduce
+ oppoLength -= 0.8 * reduce
+ if myLength < 0 {
+ return fmt.Sprintf("哦吼!?你的牛牛在长大欸!长大了%.2fcm!", reduce), myLength, oppoLength
+ }
+ return fmt.Sprintf("你以绝对的长度让对方屈服了呢!你的长度增加%.2fcm,当前长度%.2fcm!", reduce, myLength), myLength, oppoLength
+ }
+ myLength -= reduce
+ oppoLength += 0.8 * reduce
+ if myLength < 0 {
+ return fmt.Sprintf("哦吼!?看来你的牛牛因为击剑而凹进去了呢🤣🤣🤣!凹进去了%.2fcm!", reduce), myLength, oppoLength
+ }
+ return fmt.Sprintf("对方以绝对的长度让你屈服了呢!你的长度减少%.2fcm,当前长度%.2fcm!", reduce, myLength), myLength, oppoLength
+}
+
+// fence 根据长度计算减少的长度
+func fence(rd float64) float64 {
+ rd = math.Abs(rd)
+ if rd == 0 {
+ rd = 1
+ }
+ r := hitGlue(rd)*2 + rand.Float64()*math.Log2(rd)
+
+ return float64(int(r * rand.Float64()))
+}
+
+func hitGlue(l float64) float64 {
+ if l == 0 {
+ l = 0.1
+ }
+ l = math.Abs(l)
+ switch {
+ case l > 1 && l <= 10:
+ return rand.Float64() * math.Log2(l*2)
+ case 10 < l && l <= 100:
+ return rand.Float64() * math.Log2(l*1.5)
+ case 100 < l && l <= 1000:
+ return rand.Float64() * (math.Log10(l*1.5) * 2)
+ case l > 1000:
+ return rand.Float64() * (math.Log10(l) * 2)
+ default:
+ return rand.Float64()
+ }
+}