维护花了一点时间,抱歉。。。。。。。。。
在本次攻击事件中暴露了一些网站安全性相关的问题。为了应对未来可能遭遇的各种类型的攻击。在这段时间里我们可能会进行各种安全相关的更新。
本次更新新增了发帖验证码系统,任何人发布新主题或者是回帖都需要完成验证码。
此外我们建立了MiraiForumGithub组织,开放了几个由我们编写的插件,欢迎大家提出意见或者是建议。如果无法通过论坛联系我们也可以通过组织联系我们。
请阅读: 论坛规则 常见问题QA 无法登录的临时处理方案
源代码和文档: mamoe/mirai, docs.mirai.mamoe.net
闲聊TG群: @mirai_mamoe, Gitter群 mamoe/mirai
大佬们好,本人因一个月内千人群被封两次故寻求自动撤回黄图的方案,发现一个叫MirariNsfwBot的项目,但此项目需要Mirai的支持,故此我来使用Mrari。
首先我使用了我的一台闲置电脑去安装Mrari,全程回车默认(说明已经仔细阅读),
然后我打开了Mrari确认没问题之后我加入了NSFW插件最新版的插件到plugins文件夹,
随后我使用login XXXXX XXXXX登录了我刚用手机号注册的小号,但是需要过验证码,于是我安装了mirai-login-solver-sakura的jar插件
和手机版
然后我再次登录,通过扫码(后面还试过手动复制粘贴链接获取ticket)验证登录,回报了Code45拒绝登录
接着我翻找论坛,发现一个帖子
我翻找了一下,选择了fix-protocol-version的傻瓜最新版来进行登录尝试,这次我在不做更改的情况下重新扫码验证登录,
结果回报了237(code=237, title=安全提醒, message=当前网络不稳定,登录失败。推荐使用常用设备或通过手机号登录。, errorInfo=))注:我曾尝试过删除device.json,但没有作用
于是我注意到这个傻瓜版protocol工具的开头运行会提示
ANDROID_PHONE 8.9.58.11170 2023-05-19T11:35+08:00
ANDROID_PAD 9.0.56.16830 2024-04-18T15:12:37+08:00
ANDROID_WATCH 9.0.3 2022-03-23T10:14:56+08:00
IPAD 8.9.50.611 2023-02-16T15:10:14+08:00
MACOS 6.8.2.21241 2022-03-14T11:11:35+08:00
于是我修改了network.json
{ "github_mirror": "https://github.moeyy.xyz/${url}", "protocol_source": "MrXiaoM/protocol-versions", "protocol_version": "latest", "main": { "base_url": "wss://qsign.trpgbot.com/ws" }, "try_cdn_first": false, "cdn": [ { "base_url": "https://zyr15r-astralqsign.hf.space", "key": "selfshare" }, { "base_url": "http://qsign-v3.trpgbot.com", "key": "selfshare" }, { "base_url": "https://qsign.trpgbot.com", "key": "miraibbs" } ], "qq_config": { "apk_id": "com.tencent.mobileqq", "app_id": 537220362, "sub_app_id": 537220362, "app_key": "0S200MNJT807V3GE", "sort_version_name": "9.0.56.16830", "build_time": 1713424357, "apk_sign": "a6b745bf24a2c277527716f6f36eb68d", "sdk_version": "6.0.0.2560", "sso_version": 21, "misc_bitmap": 150470524, "main_sig_map": 34869472, "sub_sig_map": 66560, "dump_time": 1713424357, "qua": "V1_AND_SQ_9.0.56_6372_YYB_D", "protocol_type": 6 } }本来是没有下面这段qq_config的,这段是我在那篇帖子里面找到的,找AI合并了进去,上面的网络配置是原来的
注:我后面才发现
{ "apk_id": "com.tencent.mobileqq", "app_id": 537220362, "sub_app_id": 537220362, "app_key": "0S200MNJT807V3GE", "sort_version_name": "9.0.56.16830", "build_time": 1713424357, "apk_sign": "a6b745bf24a2c277527716f6f36eb68d", "sdk_version": "6.0.0.2560", "sso_version": 21, "misc_bitmap": 150470524, "main_sig_map": 16724722, "sub_sig_map": 66560, "dump_time": "1713424357", "qua": "V1_AND_SQ_9.0.56_6372_YYB_D", "protocol_type": 6 }在MCL/protocol下面已经有内容是这段ANDROID_PAD的json了,但实际上我改没改结果都是Code237
以下是我的版本信息
Running MiraiConsole v2.16.0, built on 2023-10-20 06:28:10. Frontend Terminal: version 2.16.0, provided by Mamoe Technologies Permission Service: Built In Permission Service Plugins: mirai-login-solver-sakura v0.0.12, nsfw v1.1.2, trpgbot v1.13.5, MCL Addon v2.1.1我虽然已经注意到那篇帖子写到的支持QQ版本不支持我已经安装的QQNT9.9.18,但正因如此我才想来寻求大佬们的帮助🙏
日志文件已经上传到蓝奏云盘
使用俺维护的GOCQ维护分支:https://github.com/ProtocolScience/AstralGocq
登录流程巨大优化(如果出现签名异常,可以修改config移除ws协议的签名,该属于实验性特性)
开源了一个没有完全过检测的版本,可以正常运行高版本的so文件,希望起到抛砖引玉,促进研究的作用 https://github.com/zhaodice/Astral-QSignigngnn
——出现CC攻击后的措施——当服务器负载较大时,优先拒绝消耗量较大的IP的请求,如需IP白名单请联系。
——服务器目前开放的版本——9.0.55-9.0.95
9.1.0-9.1.15
(这就是直连的下场,由于被打流量打成黑洞,已无法连接)
服务器地址(自2024-08,租赁1年时间):http://8.216.82.28/
服务器地址(主要A,cloudflare):https://qsign.trpgbot.com
服务器地址(CDN线路):http://qsign-v3.trpgbot.com
服务器地址(端口转发,月流限制1G):http://qsign.w1.luyouxia.net
服务器地址(主要B,huggingface):https://zyr15r-astralqsign.hf.space
——注意事项——新的key:miraibbs
对本贴内容做了门户:https://qsign-guide.trpgbot.com/
1.服务器已全部迁移至主服务器,处理了一下主机的散热器问题,现在性能应该足够了。
2.除了 qsign.trpgbot.com ,其他的都是它的镜像,如果有条件也可以自己反向代理
ANDROID_PAD
{ "apk_id": "com.tencent.mobileqq", "app_id": 537220362, "sub_app_id": 537220362, "app_key": "0S200MNJT807V3GE", "sort_version_name": "9.0.56.16830", "build_time": 1713424357, "apk_sign": "a6b745bf24a2c277527716f6f36eb68d", "sdk_version": "6.0.0.2560", "sso_version": 21, "misc_bitmap": 150470524, "main_sig_map": 34869472, "sub_sig_map": 66560, "dump_time": 1713424357, "qua": "V1_AND_SQ_9.0.56_6372_YYB_D", "protocol_type": 6 } Mirai - 傻瓜式插件直接安装插件即可正常登录 https://github.com/MrXiaoM/fpv/releases/tag/v1.13.1
(它属于 fix-protocol-version 插件的开发分支,因为功能相同所以可能冲突,一山不容二虎哦,使用时请注意禁用相关插件)
mirai KFCFactory.json 使用配置:
{ "9.0.56": { "base_url": "https://qsign.trpgbot.com", "type": "fuqiuluo/unidbg-fetch-qsign", "key": "miraibbs" } }同时请另存为 协议配置文件(ANDROID_PAD)的数据内容到 ANDROID_PAD.json ,数据内容上文已给出
控制台输入 protocol load ANDROID_PAD
即可用ANDROID_PAD协议登录你的QQ
gocq config.yml使用配置:
sign-servers: - url: 'http://8.216.82.28/' key: 'miraibbs' authorization: '-' - url: https://qsign.trpgbot.com/' key: 'miraibbs' authorization: '-' auto-register: true同时请另存为 协议配置文件(ANDROID_PAD)的数据内容到 /data/versions/6.json ,数据内容上文已给出
测试结果607af2d3-ed77-49ea-a9b5-b3ac8adb98c4.png
新注册的账号使用本sign,在24小时后仍未出现冻结现象,证明已经通关。
有任何问题欢迎进行交流讨论,最后感谢fuqiuluo提供的unidbg调用思路以及各位逆向工作者的支持。
提取码:T61O,点击下载 DeepseekMirai[1.1]废.exe(123云盘)
提取码4NmD,点击下载 DeepseekMirai[1.1](123云盘)
更新的有点着急了(笑),没怎么测试,但是我猜应该没什么问题吧(叉腰)
配置文件内容更新:
请按照下方详解,重新修改配置文件
或查看修改详情:
在chatConfig里加入了atUser,和adminMode两个布尔值,
在chatConfig.commandPrefix里加入了addAdmin 文本值,默认为“%adda”
当你遇到TypeError: startswith first arg must be str or a tuple of str, not NoneType这样的问题,就是没有更新配置文件导致的
新增功能:
1.多人同时触发回复时会在回复内容中@触发者,并在拆开的长句的每一句前面都加上了随机的小前缀(共11种)
2.加入了白名单模式,如果开启将只回复所有群中的被配置的管理员,其他任何人无法触发,私聊不受影响。
3.加入快捷添加管理员的指令,默认前缀为“%adda”
4.(链接2)新增可以自定义temperature和max_tokens的配置文件
下次许愿什么功能呢?
修复问题:
1.当一次性收到太多的消息时会出现多提供参数的问题,导致没有一条消息被回复。
2.(链接2)当不拆开长句时开启atUser导致消息链没有被正确组装
提取码:qzhV,点击下载 DeepseekMirai-1.0.exe(123云盘)
(运行效果可能不太好,尽力了)
小提示:
1.将commandPrefix中的answerUser设置为空,同时打开atBot,可以做到@bot直接触发,无需其他前缀。私聊直接触发,无需@。
2.你可以去Deepseek官网的聊天页面,让它帮你生成人设,然后填到提醒词里,这样你就拥有了属于自己的“QQ智能体?”
配置文件详解:
{ "code": "0", "host": "你的api插件地址,只支持http/s协议,末尾要带斜杠/", "verifykeys": "你的api插件的密钥", "botqq": "绑定的机器人", "deepseekapiaddress": "https://api.deepseek.com", "deepseekapikey": "去Deepseek官网申请来的api密钥", "deepseekapimodel": "支持deepseek-chat和deepseek-reasoner", "requesttimeSleep": (int)刷新消息延迟,默认为1秒,过长可能出问题, "chatConfig": { "chatMode": "answerUser", "annoyingBotModeConfig": { "annoyingBotDefaultPrompt": "自动骚扰的默认提醒词,写的不太好,尝试优化中...(预计1.3加入?)", "hitChance": 100, "getChatHistoryCount": 1, "replyAlltime":[] }, "tipsA0": "没什么用", "listenGroups": [ 123456, 789109 ], "listenFriends": [ 10000, 10011 ], "blockuserList": [ 12345678 ], "showblockMessages": true, 是否提醒被拉黑的用户 "atBot": false, 触发是否需要@bot "atUser":false, 1.1新增项,回复中是否@触发者 "adminMode":false, 1.1新增项,是否为白名单(管理员)模式 "breaklongSentence": true, 把长句拆开,分开发送 "commandPrefix": { "answerUser": "%chat,触发提问的消息前缀", "adminQQs": [ 2146187991 ], "tipsA1": "还是没啥用。以下涉及到写文件的操作只有管理员qq列表的第一位可以使用,比如说保存。", "changeModel": "%model,快速更改模型的命令前缀", "changePrompt": "%prompt,快速修改当前群/私聊提醒词的命令前缀", "clearChatLog": "%rmrf,删除当前聊天历史", "checkApiBalance": "%apibalance,查询已配置的API密钥的余额", "addBlackList": "%black,拉黑某用户的命令前缀", "memorySync": "%memory,大记忆恢复术(加载其他会话或保存的聊天历史)的命令前缀", "addGroupList": "%addg,添加检测群的命令前缀", "addFriendsList": "%addf,添加检测私聊的命令前缀", "memorySave":"%save,保存当前对话的命令前缀,没提供名字默认群号/私聊QQ号" "addAdmin":"%adda 1.1新增,添加管理员的命令前缀,只有管理员列表第一位能用" }, "defaultPrompt": "默认提醒词,没填就是猫娘咯" } } ...六百六十六我们某群群友已经把机器人哄成npy了
“不好!这里要撑不下去了”
“A4 求救,A4 求救,A32 地区的沙雕数量超过阈值,即将突破防线!”
“什么!?啧。。”
“B8 已完成沙雕清除任务,现赶往 A32 地区”
“这样。。什么时候是个头啊。。”
如果想订阅本贴更新可以点击右上角铃铛🔔按钮
【持续时间】
1970.1.1 ~ 114514.12.31
【活动内容】
糟糕!沙雕小别墅遭到了从未知之处涌出的沙雕攻击,防御工事濒临崩溃,如果能用其他的方法击退它们的话。。
对了!沙雕图!
【参与方式】
在本贴中回复沙雕图,协助沙雕防御工事击退沙雕。
【活动奖励】
从其他 miraier 获取的沙雕图!是不是非常丰厚呢?
【注意事项】
遵守摸鱼区规则。
是沙雕图不是涩图!
【样例】
3c2dfb62-5555-4c00-a17b-d76715bf2088-image.png
在隔壁群看到的,但是无论怎么搜关键字都找不到类似的,有没有用过的大佬知道
3647b18f-97f6-425a-979a-e29c79522b39-image.png
Petpet - 生成各种奇怪的图片 已更新 6.2 版本, 支持多线程, 可自定义 头像 文字 坐标 概率 关键词 频率限制 等参数项目地址 releases 前端版本 / 功能预览
如果你觉得此插件对你有帮助, 请在此帖下回复不错的插件 让更多人看到, 这对我非常重要!
PetpetMirai version
GitHub
GitHub all releases
GitHub Repo stars
GitHub release (latest by date)
GitHub issues
GitHub closed issues
GitHub closed pull requests
自定义合成图片的 Mirai 插件 / 独立程序 / gocq-http插件, 灵感/部分数据来自 nonebot-plugin-petpet。
原生 java 编写, kotlin仅用于数据序列化, 使用底层API, 多线程优化: 轻量, 高性能, 易拓展
使用方法 单独运行下载 最新版本 petpet.jar 或 petpet-no-ws.jar
下载 图片素材
将图片素材放入 ./data/xmmt.dituon.petpet/ 目录
运行 start.bat 或 start.sh, 可自行更改配置文件 config.json, 重启后生效
参考WebServer一节 发起网络请求 / 或使用WebUI
Mirai插件部署 Mirai 机器人框架
下载 最新版本
将插件放入 Mirai/plugins/
下载 图片素材
将图片素材放入 Mirai/data/xmmt.dituon.petpet/
启动 Mirai, 可自行更改配置文件 Petpet.yml, 重启后生效 (参考 配置项说明)
使用 戳一戳 有 30% 的概率触发; 或发送 pet @xxxpet key @xxx 或 key @xxx 可返回指定图片 例如 pet kiss @xxx kiss @xxx
可通过发送的图片生成Petpet kiss [图片], 支持GIF
可通过回复构造图片, 例如 [图片] -> [回复[图片]] 对称
gocq-http插件可使用 pet指令 获取 keyList
Warning
此功能处于测试阶段, 目前仅能通过key生成图片, 请期待后续开发!
部署 gocq-http 机器人框架, 设置正向 WebSocket 监听 (默认端口为8080)
更改 gocq-http 配置项 message.post-format 为 array
下载 最新版本 petpet.jar
下载 图片素材
将图片素材放入 ./data/xmmt.dituon.petpet/ 目录
cd ./ java -jar petpet.jar -gocq, 可自行更改配置文件 gocq-config.json, 重启后生效
配置文件 配置项说明<details>
<summary>展开/收起</summary>
<br/>
probability: 30触发petpet指令, 默认为pet
例: pet @xxx pet kiss @xxx
仅发送pet时会返回keyList
<br/>
antialias: true戳一戳 触发概率, 0-100整数, 默认为 30%
<br/>
resampling: true画布抗锯齿, 默认为true
<br/>
disabled: []重采样缩放, 启用后头像质量更高, 可对模板单独配置
<br/>
keyCommandHead: ''禁用表列, 默认为空, 在此数组中的key不会被随机触发 (会覆盖data.json中的配置)
<br/>
respondReply: truekey作为指令头时的前缀, 默认为空
例 (配置项为'#'时): #kiss @xxx osu hso!
<br/>
cachePoolSize: 10000响应回复的消息, 默认为true
可通过回复消息 定位到之前发送的图片并构造petpet
启用后 会缓存接收到的图片(见cachePoolSize)
例 : [回复[图片]]kiss(等价于 kiss [图片])
<br/>
respondSelfNudge: falserespondReply=true时, 图片消息缓存池大小, 默认为10000
本质为HashMap<imageId(long), imageUrl(String)>, 超过此限制会清空Map
<br/>
keyListFormat: FORWARD某些情况下, 机器人会主动戳其他成员, 响应机器人自己发出的戳一戳, 默认为false
<br/>
disablePolicy: FULL发送pet时 keyList响应格式, 默认为FORWARD
枚举: MESSAGE(发送普通消息) FORWARD(发送转发消息) IMAGE(发送图片)
<br/>
fuzzy: false发送pet on/off时 禁用哪些功能, 默认为FULL
枚举: NONE(无效) NUDGE(只禁用戳一戳) MESSAGE(只禁用指令) FULL(同时禁用戳一戳和指令)
strictCommand: true模糊匹配用户名, 默认为false
例 : (配置项为true时): kiss @田所浩二(响应) kiss 浩二(响应)
<br/>
synchronized: false严格匹配指令, 默认为true
人话: 可以省略key后的空格
例 : (配置项为false时): kiss 田所(响应) kiss田所(响应)
<br/>
gifEncoder: ANIMATED_LIB消息事件同步锁, 会锁住相同的消息事件, 默认为false
人话: 多机器人对于同一条指令只有一个会响应
<br/>
GIF编码器, 默认为ANIMATED_LIB
枚举:
编码速度较慢, 所需堆内存小, 生成Gif体积小
BUFFERED_STREAM:
基于缓存的STREAM流, 在编码过程中对Gif进行压缩;ANIMATED_LIB:
编码速度极快, 所需堆内存较多, 生成Gif体积较小
基于byte[]序列, 使用多线程分析像素;
<br/>
gifMaxSize: []gifQuality: 5GIF缩放阈值/尺寸, 默认为空 (不限制)
[width, height, frameLength]:
当Gif长度超过frameLength时, 会对Gif进行等比例缩放
注: 缩放在图片合成时进行, 不会影响性能
例: (配置项为[200, 200, 32]时)
当Gif长度超过32帧时, 检查Gif尺寸 当Gif尺寸大于200*200时, 对Gif进行等比例缩放 Gif缩放后 最长边不会超过设定值
(当Gif中包含40帧, 尺寸为300*500时) 输出的Gif长度不变, 尺寸为120*200
headless: trueGif编码质量(1-49), 默认为5
数字越小, 速度越慢, 质量越好 (大于20时, 速度不会有明显提升)
仅适用于ANIMATED_LIB编码器
autoUpdate: true启用headless模式, 默认为true
人话: 有些服务器没有输入输出设备, 画图库无法正常运行, 启用这个配置项可以修复, 因为总是有人不看常见问题, 干脆默认启用了(
<br/>
repositoryUrl: 'https://dituon.github.io/petpet'自动更新PetData, 每次启动时都会检查并自动下载船新pet, 默认为true
注: 仅更新PetData, 不会更新插件版本, 请放心食用
人话: 每次启动都会自动下载新的超赞梗图, 墙裂推荐
<br/>
devMode: false仓库地址, 用于自动更新, 默认为此仓库的github page
messageHook: false开发模式, 启用后任何人都能使用pet reload指令热重载PetData, 默认为false
<br/>
coolDown: 1000消息注入, 参考MessageHook, 默认为false
<br/>
groupCoolDown: -1成功触发指令后对该用户的冷却时间(单位为毫秒), 默认为 1000
设置为 -1 可禁用冷却
<br/>
inCoolDownMessage: 技能冷却中...成功触发指令后对该群聊的冷却时间, 默认为 -1
<br/>
在冷却时间中触发命令的回复消息
配置项为[nudge]时, 会以戳一戳形式回复
<br/>
</details>
修改后重启 Mirai 以重新加载
权限管理群主或管理员使用 pet on pet off 以 启用/禁用 戳一戳
pet on/off指令控制的事件可在配置文件中更改
图片预览 自定义 data.json可在配置文件中禁用指定key, 被禁用的key不会随机触发, 但仍可以通过指令使用
./data/xmmt.dituon.petpet/ 下的目录名为 key ,插件启动时会遍历 ./data/xmmt.dituon.petpet/$key/data.json
data.json 是模板配置文件, 程序解析此文件以生成图像
{ "type": "GIF", "avatar": [], "text": [], "delay": 50, "alias": [ "别名1", "别名2" ] } 属性 类型 注释 默认值 type 模板类型枚举 图片类型枚举, IMG或GIF 必须 avatar Avatar 数组 头像配置数组, 见下文 必须 text Text 数组 文本配置数组, 见下文 必须 inRandomList 布尔值 是否在随机列表中 false reverse 布尔值 GIF是否倒放 false delay 整数 帧间延时 (毫秒) 65 background Background 背景配置, 见下文 null alias 字符串数组 别名数组 [] hidden 布尔值 是否隐藏 false 模板类型枚举 GIF 动图, 程序会读取目录下所有.png格式的图像 IMG 静态图片, 程序会读取目录下随机.png格式的图像 头像程序支持复杂的图像处理, 包括裁切, 旋转, 透明度, 滤镜等
{ "avatar": [ { "type": "FROM", "pos": [[92, 64, 40, 40], [135, 40, 40, 40], [84, 105, 40, 40]], "round": true, "rotate": false, "avatarOnTop": true, "angle": 90 }, { "type": "TO", "pos": [[5, 8], [60, 90], [50, 90], [50, 0], [60, 120]], "posType": "DEFORM", "opacity": 0.5 } ] } 属性 类型 注释 默认值 type 头像类型枚举 见下文, 例如FROM或TO 必须 pos 坐标数组 头像的坐标信息 必须 posType 坐标格式枚举 坐标格式枚举, ZOOM或DEFORM ZOOM round 布尔值 头像是否裁切为圆形 false avatarOnTop 布尔值 头像图层是否在背景之上 true angle 整数 头像的初始角度 0 origin 旋转原点枚举 头像的旋转原点 DEFAULT opacity 浮点数 头像的不透明度 1.0 rotate 布尔值 GIF类型的头像是否旋转 false fit 填充模式枚举 填充模式枚举, 可以是CONTAIN或FILL FILL crop 裁切坐标数组 头像裁切坐标信息 null cropType 裁切格式枚举 见下文 NONE style 风格化枚举数组 风格化枚举数组, 见下文 [] filter 滤镜对象数组 滤镜数组, 见下文 [] antialias 布尔值 是否使用抗锯齿算法, 默认跟随全局配置 null resampling 布尔值 是否使用重采样缩放, 默认跟随全局配置 null头像类型枚举 type
FROM 发送者头像 TO 接收者头像, 或构造的图片 GROUP 群头像 BOT 机器人头像 RANDOM 随机头像 (随机从群聊成员中选择, 不会重复) 坐标坐标格式枚举posType
ZOOM 缩放, 通过 x, y, width, height 表示图像 DEFORM 变形, 通过四点坐标来表示图像 ZOOMZOOM 缩放坐标的基本组成单位是 4长度 int[] 数组
其中,前两项为 左上角顶点坐标, 后两项为 宽度和高度
例:
[65, 128, 77, 72] 即 头像的左上角顶点坐标是 (65,128), 宽度为 77, 高度为 72
如果是 GIF 类型,坐标应为二维数组,GIF 的每一帧视为单个图像文件
{ // pos的元素对应GIF的4帧 "pos": [[65, 128, 77, 72], [67, 128, 73, 72], [54, 139, 94, 61], [57, 135, 86, 65]] }如果是IMG类型, 可以使用一维数组
{ "pos": [0, 0, 200, 200] }坐标支持变量运算, 例如 [100,100,"width/2","height*1.5^2"]
坐标变量
width 原图宽度 height 原图高度 DEFORMDEFORM 仿射变换坐标格式为 [[x1,y1],[x2,y2],[x3,y3],[x4,y4],[x_anchor,y_anchor]];
分别对应图片的[[左上角],[左下角],[右下角],[右上角],[锚点]],四角坐标用相对于锚点的偏移量表示
旋转原点枚举 origin
DEFAULT 左上角 CENTER 中心 裁切图片裁切坐标 [x1, y1, x2, y2], [0, 0, x2, y2] 可简写为 [x2, y2]
裁切格式枚举 cropType
NONE 不裁切 PIXEL 按像素裁切 PERCENT 按百分比裁切填充模式 fit
CONTAIN 缩小以适应画布, 不改变原比例 COVER 裁切以适应画布, 不改变原比例 FILL 拉伸, 改变原比例风格化枚举 style
MIRROR 水平镜像 FLIP 上下翻转 GRAY 灰度化 BINARIZATION 二值化 滤镜 filter通过滤镜实现头像特效, Java 与 JavaScript 版本实现有偏差, 并非完全相同
{ "filter": [ { "type": "SWIRL", "radius": 200, "angle": 5.0 } ] } 滤镜类型 type SWIRL 对应 AvatarSwirlFilter BULGE 对应 AvatarBulgeFilter BLUR 对应 AvatarBlurFilter CONTRAST 对应 AvatarContrastFilter HSB 对应 AvatarHSBFilter HALFTONE 对应 AvatarHalftoneFilter DOT_SCREEN 对应 AvatarDotScreenFilter NOISE 对应 AvatarNoiseFilter DENOISE 对应 AvatarDenoiseFilter 滤镜对象 AvatarSwirlFilter 对象, 漩涡滤镜 属性 类型 注释 默认值 radius 浮点数 涡旋半径, 值为0时表示图片半径 0.0 angle 浮点数 涡旋角度 3.0 x 浮点数 中心点X坐标百分比 0.5 y 浮点数 中心点Y坐标百分比 0.5 AvatarBulgeFilter 对象, 膨胀收缩滤镜 属性 类型 注释 默认值 radius 浮点数 膨胀半径, 值为0时表示图片半径 0.0 strength 浮点数 膨胀强度 [-1, 1], 负数时产生收缩效果 0.5 x 浮点数 中心点X坐标百分比 0.5 y 浮点数 中心点Y坐标百分比 0.5 AvatarBlurFilter 对象, 模糊滤镜 属性 类型 注释 默认值 radius 浮点数 模糊半径 10.0 AvatarContrastFilter 对象, 亮度对比度滤镜 属性 类型 注释 默认值 brightness 浮点数 亮度 0.0 contrast 浮点数 对比度 0.0 AvatarHSBFilter 对象, 相对HSB (色相, 饱和度, 亮度) 滤镜 属性 类型 注释 默认值 hue 浮点数 色相 0.0 saturation 浮点数 饱和度 0.0 brightness 浮点数 亮度 0.0 AvatarHalftoneFilter 对象, 半色调滤镜 (模仿彩色印刷的CMYK色彩) 属性 类型 注释 默认值 angle 浮点数 角度 0.0 radius 浮点数 半径 4.0 x 浮点数 中心点X坐标百分比 0.5 y 浮点数 中心点Y坐标百分比 0.5 AvatarDotScreenFilter 对象, 单色点阵滤镜 (模仿黑白印刷品) 属性 类型 注释 默认值 angle 浮点数 角度 0.0 radius 浮点数 半径 4.0 x 浮点数 中心点X坐标百分比 0.5 y 浮点数 中心点Y坐标百分比 0.5 AvatarNoiseFilter 对象, 噪声滤镜 属性 类型 注释 默认值 amount 浮点数 噪声强度 0.25 AvatarDenoiseFilter 对象, 降噪滤镜 属性 类型 注释 默认值 exponent 短整数 指数 20 文字如果你想在图片上添加文字,可以编辑 text
{ "text": [ { "text": "Petpet!", // 文字内容 "color": "#66ccff", // 颜色, 默认为#191919 "pos": [100, 100], // 坐标 "size": 24 // 字号, 默认为12 }, { "text": "发送者: $from, 接收者: $to", // 支持变量 "pos": [20, 150], // 坐标 "position": ["CENTER", "BOTTOM"], //坐标计算基准([x, y]) "font": "宋体", // 字体, 默认为黑体 "strokeColor": "#ffffff", // 描边颜色 "strokeSize": 2 // 描边宽度 }, { "text": "$txt1[我]超市$txt2[你]!", // 支持关键词变量 "pos": [0,200,300], // 第三个值为文本最大宽度 "align": "CENTER", // 对齐方式, 默认为LEFT "wrap": "ZOOM", // 显示设置, 默认为NONE "style": "BOLD" // 字体样式, 默认为PLAIN } ] } 属性 类型 注释 默认值 text 字符串 文本内容 必须 pos 数组 文本的坐标信息 必须 color 字符串 文本颜色 #191919 size 整数 文本字号 12 angle 整数 头像的初始角度 0 origin 旋转原点枚举 文字的旋转原点 DEFAULT position 数组 文本坐标计算基准 [LEFT, TOP] font 字符串 字体 黑体 strokeColor 字符串 文本描边颜色 null strokeSize 整数 文本描边宽度 0 align 字符串 文本对齐方式 LEFT wrap 字符串 文本显示设置 NONE style 字符串 字体样式 PLAIN greedy 布尔值 是否贪婪匹配多余的关键词 false变量
$from : 发送者, 会被替换为发送者昵称 $to : 接收者, 被戳或At的对象 $group : 群名称 $txt(i)[(xxx)] : 文本变量, 可用于生成meme图, i为关键词索引, xxx为默认值; 例: $txt1[我]超市$txt2[你] 指令为 pet [key] 我 你font
在data/fonts目录下的字体文件会注册到环境中
align
LEFT: 左对齐, 文本基线是标准的字母基线 RIGHT: 右对齐, 文本基线是标准的字母基线 CENTER: 居中对齐, 文本基线在文本块的中间wrap
NONE: 不换行 BREAK: 自动换行, 超过最大宽度的文本会显示在下一行 ZOOM: 自动缩放, 缩放字体大小以填充最大宽度使用BREAK或ZOOM时, maxWidth 默认为 200
style
PLAIN: 默认 BOLD: 粗体 ITALIC: 斜体 BOLD_ITALIC: 粗体与斜体position
LEFT: 左定位(默认) RIGHT: 右定位 TOP: 上定位(默认) BOTTOM: 下定位 CENTER: 居中定位 background程序支持动态创建画布
{ "background": { "size": ["avatar0Width*2","avatar0Height"], //支持变量运算 "color": "#f0f0f0" } }坐标变量
avatar(i)Width i号头像(i为定义头像时的顺序, 从0开始)处理后的宽度 avatar(i)Height i号头像处理后的高度 text(i)Width i号文本渲染后的宽度 text(i)Height i号文本渲染后的高度 MessageHook本特性仅适用于 Mirai 插件, 消息注入, 插件会检查将要发送的消息 解析后注入图片, 可配合各类消息回复插件使用
<pet></pet> 标签中的JSON会被解析, 请求格式参考 WebServer.POST
用例:
这段文字之后的标签会变成一张图片发送<pet>{ "key": "petpet", "to": { "qq": 2544193782 }, "textList": [ "text1" ] }</pet>消息的顺序会被正确处理, 支持多张图片不同于 POST 请求格式, 你可以用 "qq" 令程序自动获取头像和昵称, 也可以自定义"name" "avatar"
(更推荐自定义的做法, 程序可能在某些情况下无法推断出正确的"name")
WebServer被"hidden": true隐藏的模板会正常调用
此功能默认禁用, 需在配置文件中启用messageHook: true
程序可作为http服务器 / API单独运行, 被其它项目/语言使用
java -jar petpet.jar
启动时会生成 config.json:
{ "port": 2333, // 监听端口 "webServerThreadPoolSize": 10, // HTTP服务器线程池容量 "dataPath": "data/xmmt.dituon.petpet", // PetData路径 "preview": false, // 启用动态预览 (启动时生成所有模板预览) "antialias": true, // 启用抗锯齿, 详见上文 "resampling": true, // 启用重采样, 详见上文 "gifMaxSize": [200, 200, 32], // GIF缩放阈值, 详见上文 "gifEncoder": "ANIMATED_LIB", // GIF编码器, 详见上文 "gifQuality": 5, // GIF质量, 详见上文 "threadPoolSize": 0, // GIF编码器线程池容量, 详见上文 "headless": true // 使用headless模式 }程序使用com.sun.net.httpserver实现http服务器
PetServer API访问 127.0.0.1:2333/petpet 以获取 PetDataList
GET使用 GET 传递参数, 例如 127.0.0.1:2333/petpet?key=petpet&toAvatar=$avatarUrl
127.0.0.1:2333/petpet?key=osu&textList=hso!
结构
<details>
<summary>展开/收起</summary>
使用 POST 传递参数, 例如 127.0.0.1:2333/petpet
{ "key": "petpet", "to": { "name":"d2n", "avatar":"https://q1.qlogo.cn/g?b=qq&nk=2544193782&s=640" }, "randomAvatarList": [ "url" ], "textList": [ "text" ] }其中, key为必须项, 其它可以省略
form-data可直接将图片二进制文件上传至服务器进行处理
类似于 GET数据结构, 使用 multipart/form-data
语言 示例 javascript post.js get.js python example.py php example.php WebUI可参考example-script中的代码实现请求
启动WebServer后即可使用WebUI
启用preview配置项以加载WebUI模板预览 (可选, 默认关闭)
修改 server-config.json preview: true 常见问题戳一戳无法触发?
检查 Mirai 登录协议, 仅 ANDORID_PHONE 可以收到 戳一戳 消息
没有生成配置文件?
Mirai 2.11.0 提供了新的 JavaAutoSaveConfig 方法, 请更新Mirai版本至 2.11.0 (不是2.11.0-M1), 旧版本不支持自定义配置项
Could not initialize class java.awt.Toolkit?
对于无输入输出设备的服务器 需要启用headless
自动更新下载速度慢 / 无法连接远程资源?
修改Petpet.yml中repositoryUrl的值为'https://ghproxy.com/https://raw.githubusercontent.com/Dituon/petpet/main'(高速镜像)
自动更新后 读取data.json出错?
自动更新时网络出错导致, 删除出错的文件 重新获取即可
其它错误? 问题?
性能 & 兼容性若此文档无法解决您的问题, 欢迎提交issue
程序使用底层java.awt类合成图片, 渲染时使用多线程, 静态图片渲染时间一般不会超过1ms
对GIF编码器的分析, 转换, 映射部分进行多线程优化, 速度极快
Android JVM没有实现java.awt, 推荐使用JDK 11+版本
分享你的作品 (模板)如果你想分享自定义的 Petpet, 欢迎Pr
二次开发程序提供超多实用API 拓展性极强, 附有互动式开发实例, 欢迎初学者学习!
互动式开发实例 参见test.moe.dituon.petpet.example.HelloPetpet
在别的项目二次开发: mirai-simplepetpet-plugin
后话如果此插件和您预期的一样正常工作,请给我一个 star
欢迎提交任何请求
交流群: 922959760
life-restart-botやり直すんだ。そして、次はうまくやる。
基于 mirai-console 的人生重开模拟器一则
由于 skiko 不支持 x86 系统,本插件无法在 x86 位数系统中运行!
如果您须要在 x86 系统中运行,请使用 Release v0.3.0
支持功能 支持自定义并添加模拟器事件 在群聊/好友 中使用指令模拟重开 支持绘图返回功能(使用 skia) 如何使用?项目地址: https://github.com/HatoYuze/life-restart-bot
您可能需要前置插件 project-mirai/chat-command如果您愿意为本项目点一个 star 的话,就是对本项目最好的支持✨
下载 release 中的 life-restart-bot-xxx-mirai2.jar 随后丢进你的 mcl 的 plugins 中 对目标授予 com.github.hatoyuze.restarter.life-restarter:command-execute 权限可详见项目 README 中的描述
如果您想要添加自定义事件,可前往 /mcl/config/com.github.hatoyuze.restarter.life-restarter/register.yml 文件
将文件的 enabledCustomizedEvent 设定为 true
随后按照所要求的格式填写文件即可,例如
dcb0b8af-4de3-4845-9f98-2857df9cf9f3-image.png
53227d9b-3dc2-4be0-8f9c-3b86a2fad020-image.png
聊天记录内容:
自版本 0.4.0 以后,将默认使用图片结果返回,您也可以使用 remake text 获取聊天记录结果
6911321c-0e23-480c-bb82-a59010e40317-image.png
71d5ef35-aa3b-4322-b65e-40b6e35f62d8-image.png
一个可低延迟检测 B 站动态/直播并转发到 Q 群的 Mirai 插件
Stars
Downloads
Release
无论多少订阅均可在最低 10s 内检测所有动态
使用 skiko 绘图
动态过滤
扫码登录
可配置性高
v3需 >= mirai 2.12.0
v3完全重构, 使用 skiko 绘图, 更加美观。同时增加稳定性与可配置性
v2版本
建了个QQ群,有问题可即时反馈 734922374
V3样式预览demo1.png
demo2.png
demo3.png
前置插件: mirai-skia-plugin
插件命令依赖: chat-command
插件本体: releases
MCL 指令安装 (与上面二选一)中央仓库会延迟几个小时
./mcl --update-package top.colter:bilibili-dynamic-mirai-plugin --channel maven --type plugin
常用指令帮助图
可通过 /bili help 指令获取
如果你对这张图有什么建议也可以反馈
<img src="docs/img/help.png" width="500" alt="帮助">
推荐使用 config 指令配置 模板 过滤器
扫码登录请在配置文件中填写管理员账号
<..> 尖括号为必填参数 [..] 中括号为可选参数
[群/Q号] 不填的话默认对话所在地
<HEX颜色> 必须带#号 支持多个值自定义渐变 中间用分号‘;’分隔 例: #fde8ed;#fde8ed
单个值会自动生成渐变色
uid / 用户名 使用名称可以本地模糊匹配(只有订阅过才能匹配)
推荐使用 /bili config 交互式配置
两种过滤器:
类型过滤器: 通过动态类型进行过滤 可选类型 动态 转发动态 视频 音乐 专栏 直播 内容正则过滤器: 对动态进行正则匹配过滤过滤器的两种模式:
黑名单:当动态匹配过滤器时不推送动态 白名单:仅当动态匹配过滤器时推送动态过滤器模式黑名单模式
指令 描述 /bili <filterType / ft / 类型过滤> <类型> [uid] [群/Q号] 为目标 [群/Q号] 添加 uid 的动态类型过滤器 /bili <filterReg / fr / 正则过滤> <正则表达式> [uid] [群/Q号] 为目标 [群/Q号] 添加 uid 的动态正则过滤器 /bili <filterMode / fm / 过滤模式> <过滤器类型> <过滤器模式> [uid] [群/Q号] 切换过滤器模式 <br/>过滤器类型: t(类型过滤器) r(正则过滤器) <br/>过滤器模式: w(白名单模式) b(黑名单模式) /bili <filterList / fl / 过滤列表> [uid] [群/Q号] 列出 uid 的过滤器列表 /bili <filterDel / fd / 过滤删除> <index> [uid] [群/Q号] 删除 uid 中 index 的过滤器 # 栗子 /bili ft 转发动态 487550002 # 为当前群/好友订阅的 487550002 设置类型为“转发动态”的过滤 # 当 487550002 用户动态类型为“转发动态”时触发过滤器(是否推送要看过滤器模式) /bili fr ^新年好 0 111111 # 为 111111 群/好友订阅的所有用户设置内容为“^新年好”的包含 # 当 111111 群/好友订阅的所有用户的动态内容开头包含“新年好”时触发过滤器(是否推送要看过滤器模式) /bili fl 487550002 # 查询当前群/好友订阅的 487550002 设置过的过滤列表 # 当前目标过滤器: # # 动态类型过滤器: # 模式: 黑名单 # t0: 转发动态 # t1: 视频 # 正则过滤器: # 模式: 黑名单 # r0: 转发抽奖 # # t0 t1 r0 等为删除的索引<index> /bili fd t1 487550002 # 删除上面t1的过滤 # 特例 # uid 为 0 时,代表群/好友订阅的所有用户 # 不填默认也为 0 权限插件命令依赖 chat-command 来正确处理聊天环境下的命令,请确保有此插件,否则插件可能无法正常工作
权限名 ID 基础权限ID top.colter.bilibili-dynamic-mirai-plugin:* 动态指令ID top.colter.bilibili-dynamic-mirai-plugin:command.bili 跨通讯录控制 top.colter.bilibili-dynamic-mirai-plugin:crossContact跨通讯录控制可以让你修改查看别人的配置
如果你不会给权限可以点击下面展开查看简略教程
...在控制台输入 /perm add <许可人 ID> top.colter.bilibili-dynamic-mirai-plugin:command.bili
其中的 许可人 ID 如果你要让所有群所有人都可以用此插件就是 * 即 /perm add * top.colter.bilibili-dynamic-mirai-plugin:command.bili
具体的用户: u123456789 全部用户: u*
具体的群: g123456789 全部群: g*
更多的配置见 被许可人 ID 字符串表示
At全体权限3.0.0-BETA4 后废弃
废弃后仍可使用, 但不推荐, 推荐使用前面的指令进行配置
配置文件位于 mirai 根目录/config/top.colter.bilibili-dynamic-mirai-plugin/
基础配置文件 BiliConfig.yml
图片分辨率配置 ImageQuality.yml
图片主题配置 ImageTheme.yml
分辨率与主题配置已经内置了多套数据
{draw}: 绘制的动态图
{name}: 名称
{uid}: 用户ID
{did}: 动态ID
{type}: 动态类型
{time}: 时间
{content}: 动态内容
{images}: 动态中的图
{link}: 动态链接
{links}: 视频专栏等有多个链接
\n: 换行
\r: 分割对话(会生成多个QQ消息)
{>>} {<<}: 包装成转发消息
栗子: {draw}{>>}作者:{name}\nUID:{uid}\n时间:{time}\n类型:{type}\n链接:{link}\r{content}\r{images}{<<}
直播模板配置项{draw}: 绘制的直播图
{name}: 名称
{uid}: 用户ID
{rid}: 房间号
{time}: 直播开始时间
{title}: 直播标题
{area}: 直播分区
{cover}: 直播封面
{link}: 直播链接
\n: 换行
\r: 分割对话(会生成多个QQ消息)
注: 直播模板不支持 ({>>}{<<}) 转发消息
转发卡片配置项{name}: 名称
{uid}: 用户ID
{did}: 动态ID
{type}: 动态类型
{time}: 时间
{content}: 动态内容
{link}: 链接
{name}: 名称
{uid}: 用户ID
{id}: 动态/直播ID
{type}: 类型
{time}: 时间
因此,本插件需要一个 B 站账号来订阅用户。
强烈推荐使用小号 如果让bot用你经常使用的账号可能会出现长期多次异地访问造成风控 无法添加关注
(插件有扫码登陆和自动关注自动添加分组功能,详细见下文)
如果账号没有关注过此人,bot 会自动关注并把他分到一个新分组中,方便管理
是否开启自动关注以及新分组的名称都可以在配置文件中进行配置
如果关闭自动关注,那么在 QQ 中订阅一个未关注的人时会提示 未关注
开启自动关注后,bot 会生成一个新分组(分组名可以在配置中设置),由 bot 新关注的人会被分到这个分组内,之前就关注过的不会移动
如果你想让 bot 关注就保存在默认分组中,请在配置中替换 followGroup 后面的值为两个引号 ""
选择下载 52.2MB 的字体压缩包文件, 请使用压缩包内 HarmonyOS_Sans_SC 目录下的字体, 此目录下的字体为简体中文
里面不同文件代表不同的粗细, 建议使用 Medium
推荐使用 /bili login 指令进行登录
通过开发者工具获取建议开启浏览器无痕模式
浏览器打开 BiliBili 并登陆
注:登陆后不要点退出登陆
按F12,打开开发者工具,找到Network / 网络并点击
按F5刷新页面,按下图复制 Cookie
<img src="docs/img/cookie.png" width="500">
把复制的 cookie 粘贴到配置文件中对应的位置, 并使用双引号包裹
通过 EditThisCookie 获取 在浏览器中安装 EditThisCookie 插件 在b站打开EditThisCookie面板, 点击刷新按钮, 再点击导出按钮 在插件数据路径 data/top.colter.bilibili-dynamic-mirai-plugin 下新建 cookies.json 文件 把第二步中复制的数据粘贴到文件中 图片缓存所有的图片都会缓存在 data/top.colter.bilibili-dynamic-mirai-plugin/cache 下
更新日志 相关链接Mirai
ViViD按钮
B站: 猫芒ベル_Official 这么可爱不关注一下吗(❁´◡`❁)
B站: Colter_null 如果 GitHub 或论坛太长时间没回复可以去 B 站私信
cssxsh: bilibili-helper
Twitter Emoji: Twemoji
本插件参考和使用了OpenAI ChatBot 插件,已添加预设功能(为啥你们都想整猫娘)的源代码,因此遵循AGPL-3.0协议公开源代码
目前实现了:chat功能
https://github.com/Tki-sor/mirai-deepai-plugin
额外实现了,多模型支持,流式输出兼容(ds这种的)
效果:
8fbd684c-148a-4aac-8b1e-2e30f2546a56-image.png
由于功能有些从头写的,还没做到原插件所有功能(才...才不是偷懒)
要什么功能发issues吧...
寻会写企鹅协议的ZC 算法 来个技术长期合作
寻求一款插件,自动转发私聊接收的文件至qq群,qq群文件进行文件保存。
本人没有什么插件制作经验,借鉴了前辈@yorin 的思路
GITHUB地址 https://github.com/BestBcz/BiliURL
--2025/3/17--
BiliVideoParser 1.1.0正式版发布,在原先简易插件的基础上做了很多更新
已拥有的功能
这个插件仍然有许多已知未知的BUG,已知BUG会在Readme中列入代办清单,未知BUG可以通过#issue来进行反馈或催更
...356a4b0d-57b0-4a12-acac-8435e5e4aafa.png
^fold
e1ffac4d-3043-4d6b-a814-d6be1497e997.png
^fold
QQ_1742202849146.png
^fold
QQ_1742202875264.png
https://github.com/Hellobaka/Another-Mirai-Native
下载https://github.com/Hellobaka/Another-Mirai-Native/releases/latest
特点相较于Mirai-Native具有以下特点:
由插件异常导致程序崩溃时,不会导致Mirai框架崩溃 图形化界面 可对单个插件重载 可对单个插件进行消息逻辑测试,省去在群内发消息 服务器端可使用64位的JRE了 部署更加自由,比如可以Linux服务器部署Mirai主体,之后随便找个Win机器/虚拟机再跑本程序 依赖 .net framework 4.8 mirai-api-http v2 安装与配置mirai-api-httphttps://github.com/project-mirai/mirai-api-http#安装mirai-api-http
开放ws,配置verifyKey 如需公网访问,请将ws-host设置为0.0.0.0,服务器开放ws的监听端口 注意 能够使用的插件仅限为直接编译出的dll与json,不支持cqk与使用json修补的dll(缺少导出表) 插件需要特殊依赖文件时,没有特殊说明直接放在根目录即可 三天糊出来的程序,免不了有bug,有问题请务必反馈 目录说明├─conf:程序配置与插件启用状态记录
├─data
│ ├─app:插件配置
│ │ └─me.cqp.luohuaming.SteamHeyboxQuery:每个插件的配置文件夹
│ ├─image:图片缓存与发送图片的相对目录
│ ├─plugins:需要读取插件的目录
│ │ └─tmp:插件临时目录
│ └─record:语音未实现
├─logs:日志目录
│ ├─3020887057:每个QQ号所属的日志
│ └─cqp:cqp.dll生成的日志
想看看图片?
...c246f8f8-8d30-4d6c-84f6-0bfa68955cd0-image.png
19e2835d-32cc-404a-a11e-bd8ce2366b25-image.png
baa00da3-0e6f-4d43-8419-22f24364d8fa-image.png
欢迎大家查看、批评、指正、优化代码
Github地址:https://github.com/AfeiBaili/Gobang插件配置项,在首次运行会抛出PropertiesFileNotFoundException异常,
此异常是提醒配置群聊过滤文件(防止不该出现的群聊发出消息),异常信息会有指定的路径提示,
当然也可以在mirai主目录下的, config目录下找到gobang.properties配置key为groups的群聊使用"|"符号可以配置多个群聊。
机器人指令简单来说,首次运行后再退出,根据控制台的报错信息拿到配置文件路径,填写想要启用的群聊使用|分割多群聊
没有等级限制,群里面的所有人都可以使用
菜单:打印可用命令 下棋:通过下棋@QQ进行邀请 接受:接受下棋的邀请 拒绝:拒绝下棋的邀请 认输:认输并结束此局 取消:取消发送的邀请使用棋盘序号 0-14、a-o 匹配格子,大小写兼容,越界不会计算在内
4e2dbdcc52965e998a5d8d48119e38bf.png
请教一个论坛里的大神们,小弟有几个群需要管理,有时候需要发布一些重要通知,但是很多人群消息都是直接忽略的,所有有没有办法基于Mirai框架实现自动批量私聊群里的成员,发送一些重要通知呢?在线急等!!!
感谢各路大神