diff --git a/.github/workflows/clean-unreachable-plugins.yml b/.github/workflows/clean-unreachable-plugins.yml new file mode 100644 index 00000000..435a676b --- /dev/null +++ b/.github/workflows/clean-unreachable-plugins.yml @@ -0,0 +1,69 @@ +name: Clean Unreachable Plugins + +on: + workflow_dispatch: + +jobs: + clean-unreachable-plugins: + runs-on: ubuntu-latest + steps: + - name: Checkout the repository + uses: actions/checkout@v2 + + - name: Set up jq and curl + run: | + sudo apt-get update + sudo apt-get install -y jq curl + + - name: Clean unreachable plugins + run: | + echo "Cleaning unreachable plugins from plugins.json..." + + # 初始化无效插件列表 + invalid_plugins=() + + # 遍历 plugins.json 的每个键 + jq -r 'keys[]' plugins.json | while read -r plugin; do + # 获取 repo 地址 + repo=$(jq -r ".[\"$plugin\"].repo" plugins.json) + + # 检查 repo 地址的可访问性 + if curl --head --silent --fail --max-time 5 "$repo" > /dev/null; then + echo "Plugin $plugin repository is accessible." + else + echo "Plugin $plugin repository is NOT accessible." + invalid_plugins+=("$plugin") # 将无效插件名添加到列表 + # 通过 jq 删除插件 + jq "del(.\"$plugin\")" plugins.json > temp.json && mv temp.json plugins.json + fi + done + + # 打印输出所有无效插件名 + if [ ${#invalid_plugins[@]} -ne 0 ]; then + echo "Removed the following unreachable plugins:" + for plugin in "${invalid_plugins[@]}"; do + echo "$plugin" + done + else + echo "No unreachable plugins found." + fi + + - name: Output the cleaned plugins.json + run: | + echo "Cleaned plugins.json:" + cat plugins.json + + - name: Commit and push changes + run: | + git config --local user.name "github-actions[bot]" + git config --local user.email "github-actions[bot]@users.noreply.github.com" + + # 检查是否有需要提交的更改 + if [[ $(git status --porcelain) ]]; then + echo "Changes detected. Proceeding to commit and push." + git add plugins.json + git commit -m "Clean unreachable plugins from plugins.json" + git push origin HEAD + else + echo "No changes detected. Skipping commit and push." + fi \ No newline at end of file diff --git a/.github/workflows/validate_json.yml b/.github/workflows/validate_json.yml index 4c7db6bb..ed776ba9 100644 --- a/.github/workflows/validate_json.yml +++ b/.github/workflows/validate_json.yml @@ -3,10 +3,11 @@ name: Validate plugin.json on: push: paths: - - 'plugin.json' + - 'plugins.json' pull_request: paths: - - 'plugin.json' + - 'plugins.json' + workflow_dispatch: # 支持手动触发 jobs: validate-json: @@ -16,7 +17,34 @@ jobs: - name: Checkout code uses: actions/checkout@v2 - - name: Validate plugin.json format + - name: Validate plugins.json format run: | sudo apt-get install jq - jq . plugin.json + jq . plugins.json > /dev/null + + - name: Check repository URLs + run: | + # 提取 plugins.json 中的 repo 字段并检查可访问性 + repos=$(jq -r '.. | objects | .repo? // empty' plugins.json) + unreachable_urls=() # 初始化一个数组用于记录不可访问的 URL + + for repo in $repos; do + if curl --output /dev/null --silent --head --fail "$repo"; then + echo "Repository $repo is accessible." + else + echo "Repository $repo is NOT accessible." + unreachable_urls+=("$repo") # 将不可访问的 URL 添加到数组 + fi + done + + # 检查是否有不可访问的 URL + if [ ${#unreachable_urls[@]} -ne 0 ]; then + echo "The following repositories are NOT accessible:" + for url in "${unreachable_urls[@]}"; do + echo "$url" # 输出每个不可访问的 URL + done + exit 1 # 结束运行并标记失败状态 + else + echo "All repositories are accessible." + fi + diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..1c2d52b6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea/* diff --git a/README.md b/README.md index 420104aa..fd35f687 100644 --- a/README.md +++ b/README.md @@ -4,5 +4,5 @@ AstrBot Plugin 插件集合站,用于在 AstrBot 仪表盘-插件页中作为 ## 提交插件 -> [!NOTE] +> [NOTE!] > 请点击链接前往 AstrBot 主仓库提交插件:[🥳 发布插件](https://github.com/Soulter/AstrBot/issues/new?template=PLUGIN_PUBLISH.yml) diff --git a/plugins.json b/plugins.json index e4f7a12e..9ad3eb57 100644 --- a/plugins.json +++ b/plugins.json @@ -3,19 +3,29 @@ "desc": "使bot在用户长时间未发送消息时主动与用户对话的插件", "author": "Jason", "repo": "https://github.com/advent259141/astrbot_plugin_InitiativeDialogue", - "tags": ["主动对话"] + "tags": [ + "主动对话" + ] }, "astrbot_plugin_sensoji": { "desc": "这是一个模拟日本浅草寺抽签功能的插件。用户可以通过发送 /抽签 命令随机抽取一个签文,获取运势提示。签文包含吉凶结果(如“大吉”、“凶”等)以及对应的运势描述。", "author": "Shouugou", "repo": "https://github.com/Shouugou/astrbot_plugin_sensoji", - "tags": ["抽签", "运势", "浅草寺", "趣味"] + "tags": [ + "抽签", + "运势", + "浅草寺", + "趣味" + ] }, "astrbot_plugin_daily_news": { "desc": "[仅 aiocqhttp] anka - 每日60s新闻推送插件, 请先设置推送目标和时间, 详情见github页面!", "author": "anka", "repo": "https://github.com/anka-afk/astrbot_plugin_daily_news", - "tags": ["功能", "推送"] + "tags": [ + "功能", + "推送" + ] }, "astrbot_plugin_gemini_exp": { "desc": "让你在 AstrBot 调用 Gemini2.0-flash-exp 来生成图片或者 P 图。Gemini2.0-flash-exp为原生多模态模型,其既是语言模型,也是生图模型,因此能够对图像使用简单的自然语言命令进行处理。", @@ -23,21 +33,22 @@ "repo": "https://github.com/Elen123bot/astrbot_plugin_gemini_exp", "social_link": "https://x.com/Alens454635" }, - "astrbot_plugin_nopoke": { - "desc": "[仅 aiocqhttp]不同次数戳一戳的小彩蛋", - "author": "Aligajane", - "repo": "https://github.com/Aligajane/astrbot_plugin_nopoke" - }, "astrbot_plugin_qwq_filter": { "desc": "QwQ 模型思考内容过滤工具", "author": "beat4ocean", - "tags": ["qwq", "思考过滤"], + "tags": [ + "qwq", + "思考过滤" + ], "repo": "https://github.com/beat4ocean/astrbot_plugin_qwq_filter" }, "astrbot_plugin_chatsummary": { "desc": "[仅 aiocqhttp] 一个通过拉取历史聊天记录,调用 LLM 大模型接口实现消息总结功能。", "author": "laopanmemz", - "tags": ["消息总结", "LLM"], + "tags": [ + "消息总结", + "LLM" + ], "social_link": "https://space.bilibili.com/447591776", "repo": "https://github.com/laopanmemz/astrbot_plugin_chatsummary" }, @@ -45,7 +56,9 @@ "desc": "解析群内 https://www.bilibili.com/video/BV号/ 的链接并获取视频数据与视频文件,以合并转发方式发送", "author": "haliludaxuanfeng", "repo": "https://github.com/haliludaxuanfeng/astrbot_plugin_bv", - "tags": ["bilibili"] + "tags": [ + "bilibili" + ] }, "astrBot_PGR_Dialogue": { "desc": "检测到部分战双角色的名称(或别称)时,有概率发送一条语音文本", @@ -61,7 +74,10 @@ "desc": "摸鱼人日历,支持自定义时间时区,自定义api,支持立即发送,工作日定时发送。", "author": "quirrel-zh/DuBwTf", "repo": "https://github.com/DuBwTf/astrbot_plugin_moyurenpro", - "tags": ["功能", "定时任务"] + "tags": [ + "功能", + "定时任务" + ] }, "astrbot_plugin_image_understanding_Janus-Pro": { "desc": "为本地模型提供的图片理解补充,使用deepseek-ai/Janus-Pro系列模型", @@ -82,7 +98,10 @@ "desc": "AstrBot Wordle 猜单词游戏,支持指定位数", "author": "Raven95676", "repo": "https://github.com/Raven95676/astrbot_plugin_wordle", - "tags": ["娱乐", "游戏"] + "tags": [ + "娱乐", + "游戏" + ] }, "astr_plugin_bilibili_plus": { "repo": "https://github.com/rikkasaiko/astr_plugin_bilibili_plus", @@ -92,7 +111,9 @@ "astrbot_plugin_nofap": { "desc": "一个用于戒 🦌 记录打卡和查看群内戒 🦌 榜的插件", "author": "aoz", - "tags": ["功能"], + "tags": [ + "功能" + ], "repo": "https://github.com/Aozaky/astrbot_plugin_nofap" }, "astrbot_plugin_niuniuplus": { @@ -104,7 +125,9 @@ "desc": "随机推送正在直播的管人直播间", "author": "Sasaki", "repo": "https://github.com/Wave233Lee/astrbot_plugin_random_vtb", - "tag": ["娱乐"], + "tag": [ + "娱乐" + ], "social_link": "https://space.bilibili.com/11874232" }, "astrbot_plugin_server_status": { @@ -131,7 +154,10 @@ "desc": "使大模型更好的主动回复群聊中的消息,带来生动和沉浸的群聊对话体验", "author": "23q3", "social_link": "https://space.bilibili.com/396943350", - "tags": ["伪人", "主动回复"], + "tags": [ + "伪人", + "主动回复" + ], "repo": "https://github.com/23q3/astrbot_plugin_SpectreCore" }, "astrbot_plugin_steamshot": { @@ -139,38 +165,58 @@ "author": "inori-3333", "repo": "https://github.com/inori-3333/astrbot_plugin_steamshot", "social_link": "https://steamcommunity.com/id/inori_333/", - "tags": ["功能", "游戏", "数据查询", "图片"] + "tags": [ + "功能", + "游戏", + "数据查询", + "图片" + ] }, "astrbot_plugin_GGAC_Messenger": { "desc": "anka - GGAC 作品更新推送插件 - 自动监控并推送 GGAC 平台精选作品的更新! 附赠一套 GGAC 网站完整 api! 还有随机抽取 GGAC 内容功能, 详情见github页面!", "author": "anka", "repo": "https://github.com/anka-afk/astrbot_plugin_ggac", - "tags": ["功能", "推送"] + "tags": [ + "功能", + "推送" + ] }, "astrbot_plugin_github_cards": { "logo": "https://blog.soulter.top/assets/avatar.webp", "desc": "根据聊天中 GitHub 相关链接自动发送 GitHub 仓库简介/issue/pr卡片", "author": "Soulter", "repo": "https://github.com/Soulter/astrbot_plugin_github_cards", - "tags": ["功能"] + "tags": [ + "功能" + ] }, "astrbot_plugin_hltv": { "desc": "这是基于 HLTV 网站数据的 CS 赛事查询插件", "author": "Jason", "repo": "https://github.com/advent259141/astrbot_plugin_hltv", - "tags": ["功能", "游戏", "数据查询"] + "tags": [ + "功能", + "游戏", + "数据查询" + ] }, "astrbot_plugin_moyuren": { "desc": "每天定时推送摸鱼人日历", "author": "quirrel-zh", "repo": "https://github.com/Quirrel-zh/astrbot_plugin_moyuren", - "tags": ["功能", "定时任务"] + "tags": [ + "功能", + "定时任务" + ] }, "astrbot_sowing_discord": { "desc": "[仅限 aiocqhttp 适配器] anka - 自动搬史插件, 1.加入喜欢发史的群聊 2.设置搬史来源 3.设置搬史目标 4.开始全自动搬史!", "author": "anka", "repo": "https://github.com/anka-afk/astrbot_sowing_discord", - "tags": ["功能", "搬史"] + "tags": [ + "功能", + "搬史" + ] }, "astrbot_plugin_superpoke": { "desc": "超级戳一戳根据,让戳一戳能够调用其他插件指令", @@ -191,7 +237,12 @@ "desc": "Astrbot表情包管理器3.0版本已发布! 提供便捷的 WebUI 管理界面(/表情管理 开启管理后台) , 所有 prompt 会根据修改的表情包文件夹目录自动维护,无需手动添加!可以控制每次发送的表情数量和频率(进入设置配置一次发送最大数量与发送概率) 更多信息与功能预览请前往仓库页面, 使用/plugin meme_manager查看所有指令", "author": "anka", "repo": "https://github.com/anka-afk/astrbot_plugin_meme_manager", - "tags": ["功能", "meme", "webui", "图床"] + "tags": [ + "功能", + "meme", + "webui", + "图床" + ] }, "mccloud_command": { "desc": "用于修改插件命令的工具,支持备份和恢复,仅限管理员使用。/cmd 查看帮助", @@ -648,16 +699,5 @@ "author": "长安某", "desc": "二次元图片签到以及好友买卖,对接牛牛商城,仅支持qq且仅支持非官方bot(其他平台请自行测试)", "repo": "https://github.com/zgojin/astrbot_plugin_Qsign" - }, - "astrbot_plugin_moreVITS ": { - "desc": "硅基流动利用用户的参考音频进行文本转语音的功能,测试中音频文件(测试用的.mp3)可用,内置了一个测试用的三月七(填写api就可用)", - "author": "达莉娅", - "repo": "https://github.com/zhenli12138/astrbot_plugin_moreVITS" - }, - "astrbot_plugin_horse_race": { - "desc": "[仅限非官Q] 赛马比赛。快来和群友一起来一场紧张刺激的赛马比赛,用道具搞对手心态,大赚特赚吧", - "author": "达莉娅", - "tags": ["娱乐", "游戏"], - "repo": "https://github.com/zhenli12138/astrbot_plugin_horse_race" - }, + } }