mirror of
https://github.com/krau/SaveAny-Bot.git
synced 2026-05-10 17:52:44 +08:00
44 lines
9.4 KiB
HTML
44 lines
9.4 KiB
HTML
<!doctype html><html lang=zh dir=ltr><head><meta charset=UTF-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content="
|
|
参与开发
|
|
#
|
|
|
|
在开始之前, 请 Fork 本项目, 并克隆到本地, 安装好 Go 开发环境.
|
|
以下是一些贡献代码的指南或建议, 你不必完全遵守, 但将有助于快速 review 并合并你的提交:
|
|
|
|
新功能请先提交 Issue, 以便讨论设计和实现细节, 并避免因与项目设计不符而被拒绝.
|
|
使用现代开发工具, 确保提交前格式化代码, 并保持风格一致.
|
|
使用语义化提交, 避免提交消息模糊或过于简单.
|
|
|
|
|
|
贡献新存储端
|
|
#
|
|
|
|
|
|
在 pkg/enums/storage/storages.go 中添加新的存储端类型, 并运行代码生成
|
|
在 config/storage 目录下定义存储端配置, 并添加到 config/storage/factory.go 中
|
|
在 storage 目录下新建一个包, 编写存储端实现, 然后在 storage/storage.go 中导入并添加它
|
|
更新文档, 添加配置说明
|
|
|
|
|
|
贡献新解析器
|
|
#
|
|
|
|
你可以选择使用 Go 编写原生的解析器实现(推荐), 或是使用 JavaScript 以插件的方式实现.
|
|
如果使用 Go 编写, 请:
|
|
|
|
在 parsers 目录下新建一个包, 编写解析器实现
|
|
在 parsers/parser.go 的 init 中注册解析器
|
|
|
|
如果使用 JavaScript 编写, 请参考 plugins/example_parser_basic.js 的实现, 并在该文件夹下新建一个 js 文件, 实现你的解析逻辑."><meta name=theme-color media="(prefers-color-scheme: light)" content="#ffffff"><meta name=theme-color media="(prefers-color-scheme: dark)" content="#343a40"><meta name=color-scheme content="light dark"><meta property="og:url" content="https://sabot.unv.app/contribute/"><meta property="og:site_name" content="Save Any Bot"><meta property="og:title" content="参与开发"><meta property="og:description" content="参与开发 # 在开始之前, 请 Fork 本项目, 并克隆到本地, 安装好 Go 开发环境.
|
|
以下是一些贡献代码的指南或建议, 你不必完全遵守, 但将有助于快速 review 并合并你的提交:
|
|
新功能请先提交 Issue, 以便讨论设计和实现细节, 并避免因与项目设计不符而被拒绝. 使用现代开发工具, 确保提交前格式化代码, 并保持风格一致. 使用语义化提交, 避免提交消息模糊或过于简单. 贡献新存储端 # 在 pkg/enums/storage/storages.go 中添加新的存储端类型, 并运行代码生成 在 config/storage 目录下定义存储端配置, 并添加到 config/storage/factory.go 中 在 storage 目录下新建一个包, 编写存储端实现, 然后在 storage/storage.go 中导入并添加它 更新文档, 添加配置说明 贡献新解析器 # 你可以选择使用 Go 编写原生的解析器实现(推荐), 或是使用 JavaScript 以插件的方式实现.
|
|
如果使用 Go 编写, 请:
|
|
在 parsers 目录下新建一个包, 编写解析器实现 在 parsers/parser.go 的 init 中注册解析器 如果使用 JavaScript 编写, 请参考 plugins/example_parser_basic.js 的实现, 并在该文件夹下新建一个 js 文件, 实现你的解析逻辑."><meta property="og:locale" content="zh"><meta property="og:type" content="website"><title>参与开发 | Save Any Bot</title><link rel=icon href=/favicon.png><link rel=manifest href=/manifest.json><link rel=canonical href=https://sabot.unv.app/contribute/><link rel=alternate hreflang=en href=https://sabot.unv.app/en/contribute/ title=Contributing><link rel=stylesheet href=/book.min.a22f4c7d8c2bdc5e3d6e34ba11cb59ab50ea5772594e71305bfd5a595dc78b7e.css integrity="sha256-oi9MfYwr3F49bjS6EctZq1DqV3JZTnEwW/1aWV3Hi34=" crossorigin=anonymous><link rel=alternate type=application/rss+xml href=https://sabot.unv.app/contribute/index.xml title="Save Any Bot"></head><body dir=ltr><input type=checkbox class="hidden toggle" id=menu-control>
|
|
<input type=checkbox class="hidden toggle" id=toc-control><main class="container flex"><aside class=book-menu><div class=book-menu-content><nav><h2 class=book-brand><a class="flex align-center" href=/><img src=/logo.png alt=Logo class=book-icon><span>Save Any Bot</span></a></h2><ul class=book-languages><li><input type=checkbox id=languages class=toggle>
|
|
<label for=languages class=flex><a role=button class="flex flex-auto"><img src=/svg/translate.svg class=book-icon alt=Languages>
|
|
简体中文</a></label><ul><li><a href=/en/contribute/>English</a></li></ul></li></ul><ul><li><a href=https://github.com/krau/SaveAny-Bot target=_blank rel=noopener>🔗 GitHub</a></li></ul><ul><li><span>部署指南</span><ul><li><a href=/deployment/installation/>安装与更新</a></li><li><a href=/deployment/configuration/>配置说明</a><ul><li><a href=/deployment/configuration/storages/>存储端配置</a></li></ul></li></ul></li><li><a href=/usage/>使用帮助</a><ul><li><a href=/usage/silent/>静默模式</a></li><li><a href=/usage/rules/>存储规则</a></li><li><a href=/usage/watch/>监听聊天</a></li><li><a href=/usage/directlinks/>直接下载链接</a></li><li><a href=/usage/aria2/>Aria2 下载</a></li><li><a href=/usage/ytdlp/>yt-dlp 视频下载</a></li><li><a href=/usage/transfer/>存储间传输</a></li><li><a href=/usage/parsers/>转存 Telegram 之外的文件</a></li><li><a href=/usage/api/>HTTP API</a></li></ul></li><li><a href=/help/>常见问题</a><ul></ul></li><li><a href=/contribute/ class=active>参与开发</a><ul></ul></li></ul></nav><script>(function(){var e=document.querySelector("aside .book-menu-content");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script></div></aside><div class=book-page><header class=book-header><div class="flex align-center justify-between"><label for=menu-control><img src=/svg/menu.svg class=book-icon alt=Menu></label><h3>参与开发</h3><label for=toc-control><img src=/svg/toc.svg class=book-icon alt="Table of Contents"></label></div><aside class="hidden clearfix"><nav id=TableOfContents><ul><li><a href=#贡献新存储端>贡献新存储端</a></li><li><a href=#贡献新解析器>贡献新解析器</a></li></ul></nav></aside></header><article class="markdown book-article"><h1 id=参与开发>参与开发
|
|
<a class=anchor href=#%e5%8f%82%e4%b8%8e%e5%bc%80%e5%8f%91>#</a></h1><p>在开始之前, 请 Fork 本项目, 并克隆到本地, 安装好 Go 开发环境.</p><p>以下是一些贡献代码的指南或建议, 你不必完全遵守, 但将有助于快速 review 并合并你的提交:</p><ul><li><strong>新功能请先提交 Issue</strong>, 以便讨论设计和实现细节, 并避免因与项目设计不符而被拒绝.</li><li><strong>使用现代开发工具</strong>, 确保提交前格式化代码, 并保持风格一致.</li><li><strong>使用<a href=https://www.conventionalcommits.org/zh-hans/v1.0.0/>语义化提交</a></strong>, 避免提交消息模糊或过于简单.</li></ul><h2 id=贡献新存储端>贡献新存储端
|
|
<a class=anchor href=#%e8%b4%a1%e7%8c%ae%e6%96%b0%e5%ad%98%e5%82%a8%e7%ab%af>#</a></h2><ol><li>在 <code>pkg/enums/storage/storages.go</code> 中添加新的存储端类型, 并运行代码生成</li><li>在 <code>config/storage</code> 目录下定义存储端配置, 并添加到 <code>config/storage/factory.go</code> 中</li><li>在 <code>storage</code> 目录下新建一个包, 编写存储端实现, 然后在 <code>storage/storage.go</code> 中导入并添加它</li><li>更新文档, 添加配置说明</li></ol><h2 id=贡献新解析器>贡献新解析器
|
|
<a class=anchor href=#%e8%b4%a1%e7%8c%ae%e6%96%b0%e8%a7%a3%e6%9e%90%e5%99%a8>#</a></h2><p>你可以选择使用 Go 编写原生的解析器实现(推荐), 或是使用 JavaScript 以插件的方式实现.</p><p>如果使用 Go 编写, 请:</p><ol><li>在 <code>parsers</code> 目录下新建一个包, 编写解析器实现</li><li>在 <code>parsers/parser.go</code> 的 <code>init</code> 中注册解析器</li></ol><p>如果使用 JavaScript 编写, 请参考 <code>plugins/example_parser_basic.js</code> 的实现, 并在该文件夹下新建一个 js 文件, 实现你的解析逻辑.</p><p>需要注意, <code>plugins</code> 目录下解析器默认不会被编译到二进制文件中, 用户需要手动下载它们并放到本地指定目录下以启用它们.</p></article><footer class=book-footer><div class="flex flex-wrap justify-between"><div><a class="flex align-center" href=https://github.com/krau/saveany-bot/commit/018ed479498997963b1279833a1cdbe0101f8ca7 title='最后修改者 krau | 2025/12/19' target=_blank rel=noopener><img src=/svg/calendar.svg class=book-icon alt>
|
|
<span>2025/12/19</span></a></div><div><a class="flex align-center" href=https://github.com/krau/saveany-bot/edit/main/docs/content/zh/contribute/_index.md target=_blank rel=noopener><img src=/svg/edit.svg class=book-icon alt>
|
|
<span>编辑本页</span></a></div></div><script>(function(){function e(e){const t=window.getSelection(),n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}document.querySelectorAll("pre code").forEach(t=>{t.addEventListener("click",function(){if(window.getSelection().toString())return;e(t.parentElement),navigator.clipboard&&navigator.clipboard.writeText(t.parentElement.textContent)})})})()</script></footer><div class=book-comments></div><label for=menu-control class="hidden book-menu-overlay"></label></div><aside class=book-toc><div class=book-toc-content><nav id=TableOfContents><ul><li><a href=#贡献新存储端>贡献新存储端</a></li><li><a href=#贡献新解析器>贡献新解析器</a></li></ul></nav></div></aside></main></body></html> |