* Initial plan * Implement parameter support for /ytdlp command Co-authored-by: krau <71133316+krau@users.noreply.github.com> * Add comprehensive tests for ytdlp parameter parsing Co-authored-by: krau <71133316+krau@users.noreply.github.com> * Improve flag parsing logic and clarify argument order Co-authored-by: krau <71133316+krau@users.noreply.github.com> * Preserve critical defaults and improve comments Co-authored-by: krau <71133316+krau@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: krau <71133316+krau@users.noreply.github.com>
356 lines
18 KiB
YAML
356 lines
18 KiB
YAML
lifetime:
|
|
initing: 正在启动
|
|
initfailed: 初始化失败
|
|
exiting: 正在退出
|
|
user_login_failed: "用户登录失败: {{.Error}}"
|
|
cleaning_cache: "正在清理缓存 {{.Path}}"
|
|
bye: 已退出
|
|
config:
|
|
err:
|
|
invalid_cache_dir: "无效的缓存目录: {{.Path}},请检查配置文件"
|
|
duplicate_storage_name: "存储名称 '{{.Name}}' 重复,请检查配置文件"
|
|
err:
|
|
get_workdir_failed: "获取工作目录失败: {{.Error}}"
|
|
get_cache_abs_path_failed: "获取缓存绝对路径失败: {{.Error}}"
|
|
clean_cache_failed: "清理缓存失败: {{.Error}}"
|
|
parser:
|
|
plugin:
|
|
load_failed: 加载解析器插件失败
|
|
loaded_dir: 解析器插件已加载
|
|
bot:
|
|
msg:
|
|
help_text_fmt: |
|
|
Save Any Bot - 转存你的 Telegram 文件
|
|
版本: %s , 提交: %s
|
|
|
|
命令:
|
|
/start - 开始使用
|
|
/help - 显示帮助
|
|
/silent - 开关静默模式
|
|
/storage - 设置默认存储位置
|
|
/save [自定义文件名] - 保存文件
|
|
/dl <链接1> <链接2> ... - 下载给定链接的文件
|
|
/dir - 管理存储目录
|
|
/rule - 管理规则
|
|
/config - 修改配置
|
|
/fnametmpl - 设置文件自定义命名模板
|
|
/parser - 管理解析器插件
|
|
/task - 管理任务队列
|
|
/watch - 监听聊天并自动保存 (UserBot)
|
|
/unwatch - 取消监听聊天 (UserBot)
|
|
/lswatch - 列出正在监听的聊天 (UserBot)
|
|
/syncpeers - 同步对话列表 (UserBot)
|
|
/update - 检查更新并升级
|
|
|
|
使用帮助: https://sabot.unv.app/usage
|
|
cmd:
|
|
start: "开始使用"
|
|
silent: "切换静默模式"
|
|
storage: "设置默认存储端"
|
|
dir: "管理存储文件夹"
|
|
rule: "管理自动存储规则"
|
|
save: "保存文件"
|
|
dl: "下载给定链接的文件"
|
|
aria2dl: "使用 Aria2 下载给定链接的文件"
|
|
ytdlp: "使用 yt-dlp 下载视频/音频"
|
|
task: "管理任务队列"
|
|
cancel: "取消任务"
|
|
watch: "监听聊天(UserBot)"
|
|
unwatch: "取消监听聊天(UserBot)"
|
|
lswatch: "列出监听的聊天(UserBot)"
|
|
syncpeers: "同步对话列表(UserBot)"
|
|
config: "修改配置"
|
|
fnametmpl: "设置文件命名模板"
|
|
help: "显示帮助"
|
|
parser: "管理解析器"
|
|
update: "检查更新"
|
|
save_help_text: |
|
|
使用方法:
|
|
|
|
1. 使用该命令回复要保存的文件, 可选文件名参数.
|
|
示例:
|
|
/save custom_file_name.mp4
|
|
|
|
2. 设置默认存储后, 发送 /save <频道ID/用户名> <消息ID范围> 来批量保存文件. 遵从存储规则, 若未匹配到任何规则则使用默认存储.
|
|
示例:
|
|
/save @acherkrau 114-514
|
|
watch_help_text: |
|
|
使用 /watch 命令监听一个聊天的消息, 并自动保存到默认存储中, 遵从存储规则.
|
|
|
|
命令语法:
|
|
/watch <chat_id> [filter]
|
|
|
|
参数:
|
|
- <chat_id>: 聊天的 ID 或用户名
|
|
- [filter]: 可选, 格式为 过滤器类型:表达式 , 所有支持类型的过滤器请查看文档
|
|
|
|
命令示例:
|
|
/watch -1002229835658 msgre:.*plana.*
|
|
|
|
这将监听 ID 为 -1002229835658 的聊天, 并转存所有包含 "plana" 的媒体消息
|
|
common:
|
|
cancel_button_text: "取消任务"
|
|
error_invalid_regex: "无效的正则表达式: {{.Error}}"
|
|
error_invalid_msg_id_range: "无效的消息ID范围: {{.Error}}"
|
|
error_invalid_id_or_username: "无效的ID或用户名: {{.Error}}"
|
|
error_get_messages_failed: "获取消息失败: {{.Error}}"
|
|
info_fetching_messages: "正在获取消息..."
|
|
error_no_messages_in_range: "没有找到指定范围内的消息"
|
|
error_no_savable_messages_in_range: "没有找到指定范围内的可保存消息"
|
|
error_build_storage_select_message_failed: "构建存储选择消息失败: {{.Error}}"
|
|
error_build_storage_select_keyboard_failed: "构建存储选择键盘失败: {{.Error}}"
|
|
info_found_files_select_storage: "找到 {{.Count}} 个文件, 请选择存储位置"
|
|
error_get_user_failed: "获取用户失败"
|
|
error_get_user_with_err_failed: "获取用户失败: {{.Error}}"
|
|
error_default_storage_not_set: "请先设置默认存储, 使用 /storage 命令"
|
|
error_no_available_storage: "无可用的存储"
|
|
error_get_storage_failed: "获取存储失败: {{.Error}}"
|
|
prompt_select_default_storage: "请选择要设为默认的存储位置"
|
|
error_data_expired: "数据已过期或无效"
|
|
error_task_add_failed: "任务添加失败: {{.Error}}"
|
|
info_task_added: "任务已添加"
|
|
info_batch_tasks_added: "已添加批量任务, 共 {{.Count}} 个文件"
|
|
error_task_create_failed: "任务创建失败: {{.Error}}"
|
|
error_get_dir_failed: "获取目录失败: {{.Error}}"
|
|
prompt_select_dir: "请选择要存储到的目录"
|
|
prompt_select_default_dir: "请选择要保存到的默认文件夹"
|
|
info_default_storage_set: "已将默认存储位置设为: {{.Name}}"
|
|
info_default_storage_with_dir_set: "已将默认存储位置设为: {{.Name}}:/{{.Dir}}"
|
|
error_get_user_info_failed: "获取用户信息失败: {{.Error}}"
|
|
error_update_user_info_failed: "更新用户信息失败: {{.Error}}"
|
|
info_silent_mode_on: "已开启静默模式"
|
|
info_silent_mode_off: "已关闭静默模式"
|
|
error_get_file_failed: "获取文件失败: {{.Error}}"
|
|
info_fetching_file_info: "正在获取文件信息..."
|
|
error_no_savable_files_found: "没有找到可保存的文件"
|
|
error_parse_telegraph_path_failed: "解析 telegraph 路径失败: {{.Error}}"
|
|
info_fetching_telegraph_page: "正在获取 telegraph 页面..."
|
|
error_get_telegraph_page_failed: "获取 telegraph 页面失败: {{.Error}}"
|
|
error_no_images_in_telegraph_page: "在 telegraph 页面中未找到图片"
|
|
error_build_dir_select_keyboard_failed: "构建目录选择键盘失败: {{.Error}}"
|
|
error_no_permission: |
|
|
您不在白名单中, 无法使用此 Bot.
|
|
您可以部署自己的实例: https://github.com/krau/SaveAny-Bot
|
|
save:
|
|
error_invalid_id_or_username: "无效的ID或用户名: {{.Error}}"
|
|
watch:
|
|
error_filter_format_invalid: "过滤器格式错误, 请使用 <过滤器类型>:<表达式>"
|
|
error_filter_type_unsupported: "不支持的过滤器类型, 请参阅文档"
|
|
error_watch_chat_failed: "监听聊天失败: {{.Error}}"
|
|
info_watch_chat_started: "已开始监听聊天: {{.Chat}}"
|
|
info_already_watching_chat: "已经在监听此聊天"
|
|
info_watch_list_empty: "当前没有监听任何聊天"
|
|
info_watch_list_header: "当前监听的聊天:\n"
|
|
info_watch_list_filter_prefix: " (过滤器: "
|
|
error_unwatch_no_chat_provided: "请提供要取消监听的聊天ID或用户名"
|
|
error_unwatch_chat_failed: "取消监听聊天失败: {{.Error}}"
|
|
info_watch_chat_stopped: "已取消监听聊天: {{.Chat}}"
|
|
tasks:
|
|
usage_cancel: "用法: /tasks cancel <task_id>"
|
|
usage: "用法: /tasks [running|queued|cancel <task_id>]"
|
|
cancel_failed: "取消任务失败: {{.Error}}"
|
|
cancel_requested_prefix: "已请求取消任务: "
|
|
running_empty: "当前没有正在运行的任务"
|
|
running_title: "当前正在运行的任务:"
|
|
total_prefix: "总数: {{.Count}}\n"
|
|
field_id: "ID: "
|
|
field_title: "名称: "
|
|
field_created: "创建时间: "
|
|
field_status: "状态: "
|
|
status_running: "运行中"
|
|
status_queued: "排队中"
|
|
status_cancel_requested: "已请求取消"
|
|
queued_empty: "当前没有排队中的任务"
|
|
queued_title: "当前排队中的任务:"
|
|
truncated_note: "...\n只显示前 10 个任务, 共 {{.Count}} 个任务"
|
|
info_added_to_queue_full: "已添加到任务队列\n文件名: {{.Filename}}\n当前排队任务数: {{.QueueLength}}"
|
|
info_added_to_queue_prefix: "已添加到任务队列\n"
|
|
info_filename_prefix: "文件名: "
|
|
info_queue_length_prefix: "\n当前排队任务数: "
|
|
rule:
|
|
error_get_user_rules_failed: "获取用户规则失败"
|
|
error_update_user_failed: "更新用户失败"
|
|
info_rule_mode_enabled: "已启用规则模式"
|
|
info_rule_mode_disabled: "已禁用规则模式"
|
|
error_invalid_rule_type: "无效的规则类型: {{.Type}}\n可用: {{.Available}}"
|
|
error_create_rule_failed: "创建规则失败"
|
|
info_create_rule_success: "创建规则成功"
|
|
prompt_provide_rule_id: "请提供规则ID"
|
|
error_invalid_rule_id: "无效的规则ID"
|
|
error_delete_rule_failed: "删除规则失败"
|
|
info_delete_rule_success: "删除规则成功"
|
|
help_usage: "使用方法: /rule <操作> <参数...>"
|
|
help_current_mode_enabled: "\n当前已启用规则模式"
|
|
help_current_mode_disabled: "\n当前已禁用规则模式"
|
|
help_available_ops: "\n\n可用操作:\n"
|
|
help_switch_suffix: " - 开关规则模式\n"
|
|
help_add_suffix: " <类型> <数据> <存储名> <路径> - 添加规则\n"
|
|
help_del_suffix: " <规则ID> - 删除规则\n"
|
|
help_existing_rules_prefix: "\n当前已添加的规则:\n"
|
|
dir:
|
|
error_get_user_dirs_failed: "获取用户文件夹失败"
|
|
error_get_user_failed: "获取用户失败"
|
|
error_create_dir_failed: "创建文件夹失败"
|
|
info_create_dir_success: "文件夹添加成功"
|
|
error_invalid_dir_id: "文件夹ID无效"
|
|
error_delete_dir_failed: "删除文件夹失败"
|
|
info_delete_dir_success: "文件夹删除成功"
|
|
error_unknown_operation: "未知操作"
|
|
help_usage: "使用方法: /dir <操作> <参数...>"
|
|
help_available_ops: "\n\n可用操作:\n"
|
|
help_add_suffix: " <存储名> <路径> - 添加路径\n"
|
|
help_del_suffix: " <路径ID> - 删除路径\n"
|
|
help_add_example_prefix: "\n添加路径示例:\n"
|
|
help_add_example_cmd: "/dir add local1 path/to/dir"
|
|
help_del_example_prefix: "\n\n删除路径示例:\n"
|
|
help_del_example_cmd: "/dir del 3"
|
|
help_existing_dirs_prefix: "\n\n当前已添加的路径:\n"
|
|
button_default: "默认"
|
|
parser:
|
|
help_text: |
|
|
用法:
|
|
|
|
/parser install <回复一个文件> - 安装解析器
|
|
plugin_not_enabled: "解析器插件功能未启用"
|
|
prompt_reply_with_parser_file: "请回复一个包含解析器文件的消息"
|
|
error_no_valid_file_in_reply: "回复的消息不包含有效的文件"
|
|
error_wrong_file_type: "错误的文件类型"
|
|
error_file_too_large: "文件过大"
|
|
error_get_filename_failed: "无法获取文件名"
|
|
error_only_js_supported: "仅支持 .js 文件作为解析器"
|
|
error_download_file_failed: "文件下载失败: {{.Error}}"
|
|
error_install_plugin_failed: "插件安装失败: {{.Error}}"
|
|
info_install_plugin_success: "插件安装成功: {{.Name}}"
|
|
parse:
|
|
info_parsing: "正在解析..."
|
|
error_parse_text_failed: "Failed to parse text: {{.Error}}"
|
|
error_build_storage_select_keyboard_failed: "Failed to build storage selection keyboard: {{.Error}}"
|
|
error_build_parsed_text_entity_failed: "Failed to build parsed text entity: {{.Error}}"
|
|
info_link_prefix: "\n链接: "
|
|
info_author_prefix: "\n作者: "
|
|
info_description_prefix: "\n描述: "
|
|
info_file_count_prefix: "\n文件数量: "
|
|
info_total_size_prefix: "\n预计总大小: "
|
|
info_prompt_select_storage: "\n请选择存储位置"
|
|
telegraph:
|
|
error_build_storage_select_keyboard_failed: "构建存储选择键盘失败: {{.Error}}"
|
|
info_title_prefix: "标题: "
|
|
info_pic_count_prefix: "\n图片数量: "
|
|
info_prompt_select_storage: "\n请选择存储位置"
|
|
update:
|
|
error_version_var_invalid: "当前处于开发版本或版本信息注入失败: {{.Error}}"
|
|
error_check_latest_failed: "检测最新版本失败: {{.Error}}"
|
|
error_no_release_found: "没有找到版本信息"
|
|
info_major_upgrade_required: "检测到大版本更新: {{.Current}} -> {{.Latest}} , 请前往 GitHub 手动下载最新版本并查看迁移指南"
|
|
info_already_latest: "当前已经是最新版本: {{.Version}}"
|
|
info_new_version_in_docker: |-
|
|
发现新版本: {{.Latest}}
|
|
当前版本: {{.Current}}
|
|
发布时间: {{.PublishedAt}}
|
|
由于您正在使用 Docker 部署, 请自行在部署平台上执行更新命令
|
|
info_new_version_prompt_upgrade: |-
|
|
发现新版本: {{.Latest}}
|
|
当前版本: {{.Current}}
|
|
|
|
文件大小: {{.SizeMB}} MB
|
|
下载链接: {{.URL}}
|
|
发布时间: {{.PublishedAt}}
|
|
|
|
升级将重启 Bot , 是否升级?
|
|
info_upgrading_with_version: "正在升级中, 当前版本: {{.Current}}"
|
|
error_upgrade_failed: "升级失败: {{.Error}}"
|
|
info_upgrade_success: "已升级至版本 {{.Version}}\n若 Bot 未自动重启请手动启动"
|
|
button_upgrade: "升级"
|
|
config:
|
|
prompt_select_option: "请选择要配置的选项"
|
|
button_filename_strategy: "文件名策略"
|
|
error_invalid_callback_data: "无效的回调数据"
|
|
error_invalid_template: "无效的模板, 请检查语法\n{{.Error}}"
|
|
info_filename_strategy_set: "已将文件名策略设置为: {{.Strategy}}"
|
|
prompt_select_filename_strategy: "请选择文件名策略, 当前策略: {{.Strategy}}"
|
|
fnametmpl_help: |-
|
|
使用该命令设置文件名模板, 示例:
|
|
/fnametmpl 图片_{{"{{.msgid}}"}}_{{"{{.msgdate}}"}}.jpg
|
|
|
|
可用变量:
|
|
- {{"{{.msgid}}"}}: 消息ID
|
|
- {{"{{.msgtags}}"}}: 消息中的标签, 将以下划线分隔输出
|
|
- {{"{{.msggen}}"}}: 根据消息生成的文件名
|
|
- {{"{{.msgdate}}"}}: 消息日期, 格式 YYYY-MM-DD_HH-MM-SS
|
|
- {{"{{.msgraw}}"}}: 消息的原始文本内容 (不经任何处理)
|
|
- {{"{{.origname}}"}}: 媒体的原始文件名 (如果有)
|
|
- {{"{{.chatid}}"}}: 消息的聊天ID
|
|
|
|
模板仅在文件名策略设置为 '自定义模板' 时生效,
|
|
且模板解析错误时会回退到默认文件名
|
|
info_template_updated: "已更新文件名模板"
|
|
info_current_template_prefix: "当前模板: {{.Template}}"
|
|
dl:
|
|
usage: "用法: /dl <链接1> <链接2> ..."
|
|
error_no_valid_links: "没有有效的链接可供下载"
|
|
info_files_select_storage: "共 {{.Count}} 个文件, 请选择存储位置"
|
|
ytdlp:
|
|
usage: "用法: /ytdlp [选项] <URL1> [URL2] ...\n示例:\n /ytdlp https://example.com/video\n /ytdlp --format best https://example.com/video\n /ytdlp --extract-audio --audio-format mp3 https://example.com/video"
|
|
error_no_valid_urls: "没有有效的 URL"
|
|
info_urls_select_storage: "共 {{.Count}} 个链接, 请选择存储位置"
|
|
info_downloading: "正在通过 yt-dlp 下载..."
|
|
error_download_failed: "yt-dlp 下载失败: {{.Error}}"
|
|
cancel:
|
|
usage: "用法: /cancel <task_id>"
|
|
error_cancel_failed: "取消任务失败: {{.Error}}"
|
|
info_cancel_requested: "已请求取消任务: {{.TaskID}}"
|
|
info_cancelling_task: "正在取消任务..."
|
|
media_group:
|
|
info_saving_files: "正在保存文件..."
|
|
error_build_storage_select_keyboard_failed: "构建存储选择键盘失败: {{.Error}}"
|
|
info_group_found_files_select_storage: "共 {{.Count}} 个文件, 请选择存储位置"
|
|
storage:
|
|
info_filename_prefix: "文件名: "
|
|
info_prompt_select_storage: "\n请选择存储位置"
|
|
progress:
|
|
batch_start_prefix: "开始执行批量下载任务\n总大小: "
|
|
batch_processing_prefix: "正在处理批量下载任务\n总大小: "
|
|
downloading_prefix: "正在下载\n总大小: "
|
|
processing_list_prefix: "\n正在处理:\n"
|
|
processing_none: " - 无"
|
|
avg_speed_prefix: "\n平均速度: "
|
|
current_progress_prefix: "\n当前进度: "
|
|
task_canceled: "任务已取消"
|
|
task_canceled_with_id: "处理已取消: {{.TaskID}}"
|
|
task_failed_with_error: "处理失败: {{.Error}}"
|
|
batch_done_prefix: "处理完成\n文件数: "
|
|
direct_done_prefix: "处理完成, 文件数量: "
|
|
parsed_start_prefix: "开始下载 {{.Site}} 的资源\n总大小: "
|
|
parsed_done_prefix: "处理完成, 资源数量: "
|
|
telegraph_start_prefix: "开始下载Telegraph\n图片数量: "
|
|
telegraph_progress_prefix: "正在下载\n当前进度: "
|
|
telegraph_done_prefix: "处理完成\n图片数量: "
|
|
file_start_prefix: "开始下载\n文件名: "
|
|
file_processing_prefix: "正在处理下载任务\n文件名: "
|
|
download_failed_prefix: "下载失败\n文件名: "
|
|
download_done_prefix: "下载完成\n文件名: "
|
|
file_size_prefix: "\n文件大小: "
|
|
save_path_prefix: "\n保存路径: "
|
|
total_size_prefix: "\n总大小: "
|
|
direct_start: "开始下载, 总大小: {{.SizeMB}} MB ({{.Count}} 个文件)"
|
|
file_name_prefix: "文件名: "
|
|
error_prefix: "\n错误: "
|
|
aria2_start: "等待 Aria2 下载完成 (GID: {{.GID}})..."
|
|
aria2_downloading: "Aria2 正在下载 (GID: {{.GID}})\n"
|
|
aria2_done: "Aria2 下载完成并已转存 (GID: {{.GID}})\n"
|
|
ytdlp_start: "开始使用 yt-dlp 下载 ({{.Count}} 个链接)..."
|
|
ytdlp_downloading: "yt-dlp 正在下载 ({{.Count}} 个链接)\n"
|
|
ytdlp_done: "yt-dlp 下载完成并已转存 ({{.Count}} 个文件)\n"
|
|
downloaded_prefix: "\n已下载: "
|
|
current_speed_prefix: "\n当前速度: "
|
|
syncpeers:
|
|
start: "正在同步对话列表..."
|
|
success: "对话列表同步完成, 共同步 {{.Count}} 个对话"
|
|
failed: "对话列表同步失败: {{.Error}}"
|
|
aria2:
|
|
error_aria2_not_enabled: "Aria2 功能未启用, 请在配置文件中启用"
|
|
error_aria2_client_init_failed: "Aria2 客户端初始化失败: {{.Error}}"
|
|
info_adding_aria2_download: "正在添加 Aria2 下载任务..."
|
|
error_adding_aria2_download: "添加 Aria2 下载任务失败: {{.Error}}"
|
|
info_aria2_download_added: "Aria2 下载任务已添加, GID: {{.GID}}"
|
|
info_select_storage: "请选择存储位置, 选择后将添加到 Aria2 下载队列" |