使用帮助 on Save Any Bothttps://sabot.unv.app/usage/Recent content in 使用帮助 on Save Any BotHugozh静默模式https://sabot.unv.app/usage/silent/Mon, 01 Jan 0001 00:00:00 +0000https://sabot.unv.app/usage/silent/<h1 id="静默模式-silent"> 静默模式 (silent) <a class="anchor" href="#%e9%9d%99%e9%bb%98%e6%a8%a1%e5%bc%8f-silent">#</a> </h1> <p>使用 <code>/silent</code> 命令可以开关静默模式.</p> <p>默认情况下不开启静默模式, Bot 会询问你每个文件的保存位置.</p> <p>开启静默模式后, Bot 会直接保存文件到默认位置, 无需确认.</p> <p>在开启静默模式之前, 需要使用 <code>/storage</code> 命令设置默认保存位置.</p>存储规则https://sabot.unv.app/usage/rules/Mon, 01 Jan 0001 00:00:00 +0000https://sabot.unv.app/usage/rules/<h1 id="存储规则"> 存储规则 <a class="anchor" href="#%e5%ad%98%e5%82%a8%e8%a7%84%e5%88%99">#</a> </h1> <p>允许你为 Bot 在上传文件到存储时设置一些重定向规则, 用于自动整理所保存的文件.</p> <p>见: <a href="https://github.com/krau/SaveAny-Bot/issues/28" target="_blank">#28</a></p> <p>目前支持的规则类型:</p> <ol> <li>FILENAME-REGEX</li> <li>MESSAGE-REGEX</li> <li>IS-ALBUM</li> </ol> <p>添加规则的基本语法:</p> <p>&ldquo;规则类型 规则内容 存储名 路径&rdquo;</p> <p>注意空格的使用, 语法正确 bot 才能解析, 以下是一条合法的添加规则命令:</p> <pre tabindex="0"><code>/rule add FILENAME-REGEX (?i)\.(mp4|mkv|ts|avi|flv)$ MyAlist /视频 </code></pre><p>此外, 规则中的存储名若使用 &ldquo;CHOSEN&rdquo; , 则表示存储到点击按钮选择的存储端的路径下</p> <p>规则类型:</p> <h2 id="filename-regex"> FILENAME-REGEX <a class="anchor" href="#filename-regex">#</a> </h2> <p>根据文件名正则匹配, 规则内容要求为一个合法的正则表达式, 如</p> <pre tabindex="0"><code>FILENAME-REGEX (?i)\.(mp4|mkv|ts|avi|flv)$ MyAlist /视频 </code></pre><p>表示将文件名后缀为 mp4,mkv,ts,avi,flv 的文件放到名为 MyAlist 存储下的 /视频 目录内 (同时受配置文件中的 <code>base_path</code> 影响)</p> <h2 id="message-regex"> MESSAGE-REGEX <a class="anchor" href="#message-regex">#</a> </h2> <p>同上, 但是是根据消息本身的文本内容正则匹配</p> <h2 id="is-album"> IS-ALBUM <a class="anchor" href="#is-album">#</a> </h2> <p>匹配相册消息 (media group), 规则内容只能为 <code>true</code> 或 <code>false</code>.</p> <p>规则中的路径若使用 &ldquo;NEW-FOR-ALBUM&rdquo; , 则表示为该组消息新建一个文件夹来存储它们. 见: <a href="https://github.com/krau/SaveAny-Bot/issues/87">https://github.com/krau/SaveAny-Bot/issues/87</a></p>监听聊天https://sabot.unv.app/usage/watch/Mon, 01 Jan 0001 00:00:00 +0000https://sabot.unv.app/usage/watch/<h1 id="监听聊天"> 监听聊天 <a class="anchor" href="#%e7%9b%91%e5%90%ac%e8%81%8a%e5%a4%a9">#</a> </h1> <blockquote class="book-hint warning"> 该功能需开启 UserBot 集成. </blockquote> <p>监听指定聊天的消息, 并自动保存到默认存储中, 遵从存储规则, 并且可以设置过滤器来只保存匹配的消息.</p> <p>监听聊天:</p> <pre tabindex="0"><code>/watch &lt;chat_id/username&gt; [filter] </code></pre><p>取消监听:</p> <pre tabindex="0"><code>/unwatch &lt;chat_id/username&gt; </code></pre><p>过滤器类型:</p> <h2 id="msgre"> msgre <a class="anchor" href="#msgre">#</a> </h2> <p>正则匹配消息文本, 例如:</p> <pre tabindex="0"><code>/watch 12345678 msgre:.*hello.* </code></pre><p>这将会监听 ID 为 12345678 的聊天, 并且只保存消息文本中包含 &ldquo;hello&rdquo; 的消息.</p>直接下载链接https://sabot.unv.app/usage/directlinks/Mon, 01 Jan 0001 00:00:00 +0000https://sabot.unv.app/usage/directlinks/<h1 id="直接下载链接"> 直接下载链接 <a class="anchor" href="#%e7%9b%b4%e6%8e%a5%e4%b8%8b%e8%bd%bd%e9%93%be%e6%8e%a5">#</a> </h1> <p>使用 <code>/dl</code> 命令可以直接下载一个或多个 HTTP/HTTPS 链接的文件到存储中.</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>/dl &lt;url1&gt; <span style="color:#f92672">[</span>url2<span style="color:#f92672">]</span> <span style="color:#f92672">[</span>url3<span style="color:#f92672">]</span> ... </span></span></code></pre></div><p>示例:</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>/dl https://example.com/file.zip </span></span><span style="display:flex;"><span>/dl https://example.com/file1.zip https://example.com/file2.zip </span></span></code></pre></div><p>Bot 会验证链接格式, 然后让你选择目标存储位置.</p>Aria2 下载https://sabot.unv.app/usage/aria2/Mon, 01 Jan 0001 00:00:00 +0000https://sabot.unv.app/usage/aria2/<h1 id="aria2-下载"> Aria2 下载 <a class="anchor" href="#aria2-%e4%b8%8b%e8%bd%bd">#</a> </h1> <blockquote class="book-hint warning"> 该功能需要在配置文件中启用 Aria2 并配置 RPC 连接. </blockquote> <p>使用 <code>/aria2dl</code> 命令可以通过 Aria2 下载管理器下载文件, 支持 HTTP/HTTPS、FTP、BitTorrent 等多种协议.</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>/aria2dl &lt;uri1&gt; <span style="color:#f92672">[</span>uri2<span style="color:#f92672">]</span> <span style="color:#f92672">[</span>uri3<span style="color:#f92672">]</span> ... </span></span></code></pre></div><p>示例:</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 下载 HTTP 链接</span> </span></span><span style="display:flex;"><span>/aria2dl https://example.com/file.zip </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#75715e"># 下载磁力链接</span> </span></span><span style="display:flex;"><span>/aria2dl magnet:?xt<span style="color:#f92672">=</span>urn:btih:... </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#75715e"># 下载种子文件 (需要先上传 .torrent 文件)</span> </span></span><span style="display:flex;"><span>/aria2dl https://example.com/file.torrent </span></span></code></pre></div><p>配置 Aria2:</p> <p>在 <code>config.toml</code> 中添加:</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-toml" data-lang="toml"><span style="display:flex;"><span>[<span style="color:#a6e22e">aria2</span>] </span></span><span style="display:flex;"><span><span style="color:#a6e22e">enable</span> = <span style="color:#66d9ef">true</span> </span></span><span style="display:flex;"><span><span style="color:#a6e22e">url</span> = <span style="color:#e6db74">&#34;http://localhost:6800/jsonrpc&#34;</span> </span></span><span style="display:flex;"><span><span style="color:#a6e22e">secret</span> = <span style="color:#e6db74">&#34;your-rpc-secret&#34;</span> <span style="color:#75715e"># 如果配置了 rpc-secret</span> </span></span><span style="display:flex;"><span><span style="color:#a6e22e">remove_after_transfer</span> = <span style="color:#66d9ef">true</span> <span style="color:#75715e"># 转存完成后删除本地文件</span> </span></span></code></pre></div>yt-dlp 视频下载https://sabot.unv.app/usage/ytdlp/Mon, 01 Jan 0001 00:00:00 +0000https://sabot.unv.app/usage/ytdlp/<h1 id="yt-dlp-视频下载"> yt-dlp 视频下载 <a class="anchor" href="#yt-dlp-%e8%a7%86%e9%a2%91%e4%b8%8b%e8%bd%bd">#</a> </h1> <blockquote class="book-hint warning"> 该功能需要在系统中安装 yt-dlp 命令行工具. </blockquote> <p>使用 <code>/ytdlp</code> 命令可以下载支持的视频网站的视频和音频, 支持 YouTube、Bilibili、Twitter 等 1000+ 个网站.</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>/ytdlp &lt;url1&gt; <span style="color:#f92672">[</span>url2<span style="color:#f92672">]</span> <span style="color:#f92672">[</span>flags...<span style="color:#f92672">]</span> </span></span></code></pre></div><p>示例:</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 基本下载</span> </span></span><span style="display:flex;"><span>/ytdlp https://www.youtube.com/watch?v<span style="color:#f92672">=</span>dQw4w9WgXcQ </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#75715e"># 下载多个视频</span> </span></span><span style="display:flex;"><span>/ytdlp https://www.youtube.com/watch?v<span style="color:#f92672">=</span>video1 https://www.youtube.com/watch?v<span style="color:#f92672">=</span>video2 </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#75715e"># 使用自定义参数</span> </span></span><span style="display:flex;"><span>/ytdlp https://www.youtube.com/watch?v<span style="color:#f92672">=</span>dQw4w9WgXcQ -f best </span></span><span style="display:flex;"><span>/ytdlp https://www.youtube.com/watch?v<span style="color:#f92672">=</span>dQw4w9WgXcQ --extract-audio --audio-format mp3 </span></span></code></pre></div><p>常用参数:</p> <ul> <li><code>-f &lt;format&gt;</code>: 指定下载格式 (如 <code>best</code>, <code>worst</code>, <code>bestvideo+bestaudio</code>)</li> <li><code>--extract-audio</code>: 提取音频</li> <li><code>--audio-format &lt;format&gt;</code>: 音频格式 (如 <code>mp3</code>, <code>m4a</code>, <code>wav</code>)</li> <li><code>--write-sub</code>: 下载字幕</li> <li><code>--write-thumbnail</code>: 下载缩略图</li> </ul> <p>更多参数请参考 <a href="https://github.com/yt-dlp/yt-dlp#usage-and-options">yt-dlp 文档</a>.</p>存储间传输https://sabot.unv.app/usage/transfer/Mon, 01 Jan 0001 00:00:00 +0000https://sabot.unv.app/usage/transfer/<h1 id="存储间传输"> 存储间传输 <a class="anchor" href="#%e5%ad%98%e5%82%a8%e9%97%b4%e4%bc%a0%e8%be%93">#</a> </h1> <p>使用 <code>/transfer</code> 命令可以在不同存储之间直接传输文件, 无需经过 Telegram.</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>/transfer &lt;source_storage&gt;:/&lt;source_path&gt; <span style="color:#f92672">[</span>filter<span style="color:#f92672">]</span> </span></span></code></pre></div><p>参数说明:</p> <ul> <li><code>source_storage</code>: 源存储名称</li> <li><code>source_path</code>: 源路径</li> <li><code>filter</code>: 可选的正则表达式过滤器, 只传输匹配的文件</li> </ul> <p>示例:</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 传输整个目录</span> </span></span><span style="display:flex;"><span>/transfer local1:/downloads </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#75715e"># 传输指定路径的文件</span> </span></span><span style="display:flex;"><span>/transfer alist1:/media/photos </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#75715e"># 只传输 mp4 文件</span> </span></span><span style="display:flex;"><span>/transfer webdav1:/videos <span style="color:#e6db74">&#34;.*\.mp4</span>$<span style="color:#e6db74">&#34;</span> </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#75715e"># 传输图片文件</span> </span></span><span style="display:flex;"><span>/transfer local1:/pictures <span style="color:#e6db74">&#34;(?i)\.(jpg|png|gif)</span>$<span style="color:#e6db74">&#34;</span> </span></span></code></pre></div><p>Bot 会:</p> <ol> <li>列出源路径下的所有文件</li> <li>应用过滤器 (如果提供)</li> <li>显示文件数量和总大小</li> <li>让你选择目标存储</li> <li>让你选择目标目录 (如果该存储配置了目录)</li> <li>开始传输任务</li> </ol> <p>注意:</p> <ul> <li>源存储必须支持列举和读取功能</li> <li>目标存储必须支持写入功能</li> <li>传输过程显示实时进度</li> <li>支持取消正在进行的传输任务</li> </ul>转存 Telegram 之外的文件https://sabot.unv.app/usage/parsers/Mon, 01 Jan 0001 00:00:00 +0000https://sabot.unv.app/usage/parsers/<h1 id="转存-telegram-之外的文件"> 转存 Telegram 之外的文件 <a class="anchor" href="#%e8%bd%ac%e5%ad%98-telegram-%e4%b9%8b%e5%a4%96%e7%9a%84%e6%96%87%e4%bb%b6">#</a> </h1> <p>除了 Telegram 上的文件, Bot 还可通过 JavaScript 插件或内置解析器来支持转存其他网站的文件.</p> <blockquote> <p>查看<a href="../contribute">贡献解析器</a>文档了解详情</p></blockquote> <p>只需向 Bot 发送符合解析器要求的链接即可使用, 当前内置的解析器:</p> <ul> <li>Twitter</li> <li>Kemono</li> </ul>HTTP APIhttps://sabot.unv.app/usage/api/Mon, 01 Jan 0001 00:00:00 +0000https://sabot.unv.app/usage/api/<h1 id="http-api"> HTTP API <a class="anchor" href="#http-api">#</a> </h1> <p>SaveAny-Bot 提供了一套 HTTP API,允许你通过程序化方式创建下载/转存任务、查询任务状态、取消任务等,无需通过 Telegram 操作。</p> <h2 id="启用-api"> 启用 API <a class="anchor" href="#%e5%90%af%e7%94%a8-api">#</a> </h2> <p>在 <code>config.toml</code> 中添加或修改以下配置:</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-toml" data-lang="toml"><span style="display:flex;"><span>[<span style="color:#a6e22e">api</span>] </span></span><span style="display:flex;"><span><span style="color:#a6e22e">enable</span> = <span style="color:#66d9ef">true</span> </span></span><span style="display:flex;"><span><span style="color:#a6e22e">host</span> = <span style="color:#e6db74">&#34;0.0.0.0&#34;</span> <span style="color:#75715e"># 监听地址,默认 0.0.0.0</span> </span></span><span style="display:flex;"><span><span style="color:#a6e22e">port</span> = <span style="color:#ae81ff">8080</span> <span style="color:#75715e"># 监听端口,默认 8080</span> </span></span><span style="display:flex;"><span><span style="color:#a6e22e">token</span> = <span style="color:#e6db74">&#34;your-token&#34;</span> <span style="color:#75715e"># 鉴权 Token,强烈建议设置</span> </span></span></code></pre></div><p>也可通过环境变量覆盖(前缀 <code>SAVEANY_</code>):</p> <table> <thead> <tr> <th>环境变量</th> <th>对应配置项</th> </tr> </thead> <tbody> <tr> <td><code>SAVEANY_API_ENABLE</code></td> <td><code>api.enable</code></td> </tr> <tr> <td><code>SAVEANY_API_HOST</code></td> <td><code>api.host</code></td> </tr> <tr> <td><code>SAVEANY_API_PORT</code></td> <td><code>api.port</code></td> </tr> <tr> <td><code>SAVEANY_API_TOKEN</code></td> <td><code>api.token</code></td> </tr> </tbody> </table> <blockquote class="book-hint warning"> 若 `token` 为空,API 服务将**不进行任何鉴权**即可访问,存在安全风险。 </blockquote> <h2 id="鉴权"> 鉴权 <a class="anchor" href="#%e9%89%b4%e6%9d%83">#</a> </h2> <p>当配置了 <code>token</code> 时,所有 API 请求均需在 HTTP 请求头中携带 Bearer Token:</p> <pre tabindex="0"><code>Authorization: Bearer &lt;your-token&gt; </code></pre><p>鉴权失败时返回 <code>401</code>:</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{ <span style="color:#f92672">&#34;error&#34;</span>: <span style="color:#e6db74">&#34;unauthorized&#34;</span>, <span style="color:#f92672">&#34;message&#34;</span>: <span style="color:#e6db74">&#34;invalid token&#34;</span> } </span></span></code></pre></div><h2 id="错误响应格式"> 错误响应格式 <a class="anchor" href="#%e9%94%99%e8%af%af%e5%93%8d%e5%ba%94%e6%a0%bc%e5%bc%8f">#</a> </h2> <p>所有错误均使用统一的 JSON 格式:</p>