lifetime: initing: Starting up initfailed: Initialization failed exiting: Shutting down user_login_failed: "User login failed: {{.Error}}" cleaning_cache: "Cleaning cache {{.Path}}" bye: Exited config: err: invalid_cache_dir: "Invalid cache directory: {{.Path}}, please check the config file" duplicate_storage_name: "Storage name '{{.Name}}' is duplicated, please check the config file" err: get_workdir_failed: "Failed to get working directory: {{.Error}}" get_cache_abs_path_failed: "Failed to get absolute cache path: {{.Error}}" clean_cache_failed: "Failed to clean cache: {{.Error}}" parser: plugin: load_failed: Failed to load parser plugins loaded_dir: Parser plugins loaded bot: msg: help_text_fmt: | Save Any Bot - Save your Telegram files Version: %s , Commit: %s Commands: /start - Start using the bot /help - Show help /silent - Toggle silent mode /storage - Set default storage /save [custom filename] - Save file /import [channel_id] [filter] - Import files from storage to Telegram /dir - Manage storage directories /rule - Manage rules /config - Modify configuration /fnametmpl - Set custom filename template /parser - Manage parser plugins /task - Manage task queue /watch - Watch chats and auto save (UserBot) /unwatch - Stop watching chats (UserBot) /lswatch - List watched chats (UserBot) /syncpeers - Sync peer chats (UserBot) /update - Check and upgrade to latest version Usage guide: https://sabot.unv.app/usage cmd: start: "Start using" silent: "Toggle silent mode" storage: "Set default storage" dir: "Manage storage directories" rule: "Manage auto-save rules" save: "Save files" dl: "Download files from given links" aria2dl: "Download files using Aria2" ytdlp: "Download video/audio using yt-dlp" import: "Import files from storage to Telegram" transfer: "Transfer files between storages" task: "Manage task queue" cancel: "Cancel task" watch: "Watch chats (UserBot)" unwatch: "Stop watching chats (UserBot)" lswatch: "List watched chats (UserBot)" config: "Modify configuration" fnametmpl: "Set filename template" help: "Show help" parser: "Manage parsers" update: "Check for updates" syncpeers: "Sync peer chats (UserBot)" save_help_text: | Usage: 1. Reply to the file you want to save with this command, optional filename parameter. Example: /save custom_file_name.mp4 2. After setting default storage, send /save to batch save files. Rules will be applied; if no rule matches, default storage will be used. Example: /save @acherkrau 114-514 watch_help_text: | Use /watch to watch messages in a chat and automatically save them to the default storage, following storage rules. Syntax: /watch [filter] Parameters: - : Chat ID or username - [filter]: Optional, format is filter_type:expression , see docs for all supported filters Example: /watch -1002229835658 msgre:.*plana.* This will watch chat with ID -1002229835658 and save all media messages containing "plana". common: cancel_button_text: "Cancel" error_invalid_regex: "Invalid regex: {{.Error}}" error_invalid_msg_id_range: "Invalid message ID range: {{.Error}}" error_invalid_id_or_username: "Invalid ID or username: {{.Error}}" error_get_messages_failed: "Failed to get messages: {{.Error}}" info_fetching_messages: "Fetching messages..." error_no_messages_in_range: "No messages found in the specified range" error_no_savable_messages_in_range: "No savable messages found in the specified range" error_build_storage_select_message_failed: "Failed to build storage selection message: {{.Error}}" error_build_storage_select_keyboard_failed: "Failed to build storage selection keyboard: {{.Error}}" info_found_files_select_storage: "Found {{.Count}} files, please select storage" error_get_user_failed: "Failed to get user" error_get_user_with_err_failed: "Failed to get user: {{.Error}}" error_default_storage_not_set: "Please set a default storage first with /storage" error_no_available_storage: "No available storage" error_get_storage_failed: "Failed to get storage: {{.Error}}" prompt_select_default_storage: "Please select a storage to set as default" error_data_expired: "Data has expired or is invalid" error_task_add_failed: "Failed to add task: {{.Error}}" info_task_added: "Task added" info_batch_tasks_added: "Batch tasks added, total {{.Count}} files" info_batch_tasks_added_with_skipped: "Batch tasks added, total {{.Count}} files\nSkipped conflicting files:\n{{.Skipped}}" info_all_conflict_files_skipped: "All conflicting files were skipped:\n{{.Skipped}}" info_conflict_files_skipped: "Skipped conflicting files:\n{{.Skipped}}" error_task_create_failed: "Failed to create task: {{.Error}}" error_get_dir_failed: "Failed to get directory: {{.Error}}" prompt_select_dir: "Please select a directory to store to" prompt_select_conflict_strategy: "Files with the same name already exist. Please select a save strategy:\n{{.Files}}" prompt_conflict_more_files: "...and {{.Count}} more files" button_conflict_rename: "Rename" button_conflict_overwrite: "Overwrite" button_conflict_skip: "Skip" prompt_select_default_dir: "Please select a default directory to save to" info_default_storage_set: "Default storage set to: {{.Name}}" info_default_storage_with_dir_set: "Default storage set to: {{.Name}}:/{{.Dir}}" error_get_user_info_failed: "Failed to get user info: {{.Error}}" error_update_user_info_failed: "Failed to update user info: {{.Error}}" info_silent_mode_on: "Silent mode enabled" info_silent_mode_off: "Silent mode disabled" error_get_file_failed: "Failed to get file: {{.Error}}" info_fetching_file_info: "Fetching file info..." error_no_savable_files_found: "No savable files found" error_parse_telegraph_path_failed: "Failed to parse telegraph path: {{.Error}}" info_fetching_telegraph_page: "Fetching telegraph page..." error_get_telegraph_page_failed: "Failed to get telegraph page: {{.Error}}" error_no_images_in_telegraph_page: "No images found in telegraph page" error_build_dir_select_keyboard_failed: "Failed to build directory selection keyboard: {{.Error}}" error_no_permission: | You are not in the whitelist and cannot use this bot. You can deploy your own instance: https://github.com/krau/SaveAny-Bot save: error_invalid_id_or_username: "Invalid ID or username: {{.Error}}" watch: error_filter_format_invalid: "Invalid filter format, please use :" error_filter_type_unsupported: "Unsupported filter type, please see the docs" error_watch_chat_failed: "Failed to watch chat: {{.Error}}" info_watch_chat_started: "Started watching chat: {{.Chat}}" info_already_watching_chat: "Already watching this chat" info_watch_list_empty: "No chats are being watched currently" info_watch_list_header: "Currently watched chats:\n" info_watch_list_filter_prefix: " (filter: " error_unwatch_no_chat_provided: "Please provide a chat ID or username to unwatch" error_unwatch_chat_failed: "Failed to unwatch chat: {{.Error}}" info_watch_chat_stopped: "Stopped watching chat: {{.Chat}}" tasks: usage_cancel: "Usage: /tasks cancel " usage: "Usage: /tasks [running|queued|cancel ]" cancel_failed: "Failed to cancel task: {{.Error}}" cancel_requested_prefix: "Cancel requested for task: " running_empty: "No running tasks" running_title: "Currently running tasks:" total_prefix: "Total: {{.Count}}\n" field_id: "ID: " field_title: "Title: " field_created: "Created at: " field_status: "Status: " status_running: "Running" status_queued: "Queued" status_cancel_requested: "Cancel requested" queued_empty: "No queued tasks" queued_title: "Currently queued tasks:" truncated_note: "...\nShowing first 10 tasks, total {{.Count}} tasks" info_added_to_queue_full: "Added to task queue\nFilename: {{.Filename}}\nCurrent queued tasks: {{.QueueLength}}" info_added_to_queue_prefix: "Added to task queue\n" info_filename_prefix: "Filename: " info_queue_length_prefix: "\nCurrent queued tasks: " rule: error_get_user_rules_failed: "Failed to get user rules" error_update_user_failed: "Failed to update user" info_rule_mode_enabled: "Rule mode enabled" info_rule_mode_disabled: "Rule mode disabled" error_invalid_rule_type: "Invalid rule type: {{.Type}}\nAvailable: {{.Available}}" error_create_rule_failed: "Failed to create rule" info_create_rule_success: "Rule created successfully" prompt_provide_rule_id: "Please provide rule ID" error_invalid_rule_id: "Invalid rule ID" error_delete_rule_failed: "Failed to delete rule" info_delete_rule_success: "Rule deleted successfully" help_usage: "Usage: /rule " help_current_mode_enabled: "\nRule mode is currently enabled" help_current_mode_disabled: "\nRule mode is currently disabled" help_available_ops: "\n\nAvailable operations:\n" help_switch_suffix: " - Toggle rule mode\n" help_add_suffix: " - Add rule\n" help_del_suffix: " - Delete rule\n" help_preset_suffix: " [base_path] - Import built-in filetype rules (video/image/audio/document/archive)\n" help_existing_rules_prefix: "\nCurrent rules:\n" prompt_provide_storage_name: "Please provide a storage name" error_storage_not_found: "Storage not found: {{.Storage}}" info_preset_imported: "Imported {{.Count}} built-in classification rules into storage {{.Storage}}" dir: error_get_user_dirs_failed: "Failed to get user directories" error_get_user_failed: "Failed to get user" error_create_dir_failed: "Failed to create directory" info_create_dir_success: "Directory created successfully" error_invalid_dir_id: "Invalid directory ID" error_delete_dir_failed: "Failed to delete directory" info_delete_dir_success: "Directory deleted successfully" error_unknown_operation: "Unknown operation" help_usage: "Usage: /dir " help_available_ops: "\n\nAvailable operations:\n" help_add_suffix: " - Add path\n" help_del_suffix: " - Delete path\n" help_add_example_prefix: "\nAdd path example:\n" help_add_example_cmd: "/dir add local1 path/to/dir" help_del_example_prefix: "\n\nDelete path example:\n" help_del_example_cmd: "/dir del 3" help_existing_dirs_prefix: "\n\nCurrent paths:\n" button_default: "Default" parser: help_text: | Usage: /parser install - Install parser plugin_not_enabled: "Parser plugin feature is not enabled" prompt_reply_with_parser_file: "Please reply with a message containing the parser file" error_no_valid_file_in_reply: "The replied message does not contain a valid file" error_wrong_file_type: "Wrong file type" error_file_too_large: "File too large" error_get_filename_failed: "Failed to get filename" error_only_js_supported: "Only .js files are supported as parsers" error_download_file_failed: "Failed to download file: {{.Error}}" error_install_plugin_failed: "Failed to install plugin: {{.Error}}" info_install_plugin_success: "Plugin installed: {{.Name}}" parse: info_parsing: "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: "\nLink: " info_author_prefix: "\nAuthor: " info_description_prefix: "\nDescription: " info_file_count_prefix: "\nFile count: " info_total_size_prefix: "\nEstimated total size: " info_prompt_select_storage: "\nPlease select storage" telegraph: error_build_storage_select_keyboard_failed: "Failed to build storage selection keyboard: {{.Error}}" info_title_prefix: "Title: " info_pic_count_prefix: "\nImage count: " info_prompt_select_storage: "\nPlease select storage" update: error_version_var_invalid: "Currently in development version or version info injection failed: {{.Error}}" error_check_latest_failed: "Failed to check latest version: {{.Error}}" error_no_release_found: "No release found" info_major_upgrade_required: "Major upgrade detected: {{.Current}} -> {{.Latest}} , please download the latest version from GitHub and check the migration guide" info_already_latest: "Already on latest version: {{.Version}}" info_new_version_in_docker: |- New version found: {{.Latest}} Current version: {{.Current}} Published at: {{.PublishedAt}} Since you are using Docker, please update it on your deployment platform info_new_version_prompt_upgrade: |- New version found: {{.Latest}} Current version: {{.Current}} File size: {{.SizeMB}} MB Download URL: {{.URL}} Published at: {{.PublishedAt}} Upgrading will restart the bot. Proceed? info_upgrading_with_version: "Upgrading, current version: {{.Current}}" error_upgrade_failed: "Upgrade failed: {{.Error}}" info_upgrade_success: "Upgraded to version {{.Version}}\nIf the bot did not restart automatically, please start it manually" button_upgrade: "Upgrade" config: prompt_select_option: "Please select an option to configure" button_filename_strategy: "Filename strategy" button_conflict_strategy: "Duplicate file strategy" error_invalid_callback_data: "Invalid callback data" error_invalid_template: "Invalid template, please check syntax\n{{.Error}}" info_filename_strategy_set: "Filename strategy set to: {{.Strategy}}" info_conflict_strategy_set: "Duplicate file strategy set to: {{.Strategy}}" prompt_select_filename_strategy: "Please select filename strategy, current strategy: {{.Strategy}}" prompt_select_conflict_strategy: "Please select duplicate file strategy, current strategy: {{.Strategy}}" conflict_strategy_rename: "Always rename" conflict_strategy_ask: "Ask every time" conflict_strategy_overwrite: "Always overwrite" conflict_strategy_skip: "Always skip" fnametmpl_help: |- Use this command to set filename template, for example: /fnametmpl Image_{{"{{.msgid}}"}}_{{"{{.msgdate}}"}}.jpg Available variables: - {{"{{.msgid}}"}}: Message ID - {{"{{.msgtags}}"}}: Tags in the message, joined with underscore - {{"{{.msggen}}"}}: Generated filename from the message - {{"{{.msgdate}}"}}: Message date, format YYYY-MM-DD_HH-MM-SS - {{"{{.msgraw}}"}}: Raw message text (unprocessed) - {{"{{.origname}}"}}: Original media filename (if any) - {{"{{.chatid}}"}}: Chat ID of the message Template only takes effect when filename strategy is set to 'Custom template'. If template parsing fails, it will fall back to default filename. info_template_updated: "Filename template updated" info_current_template_prefix: "Current template: {{.Template}}" dl: usage: "Usage: /dl ..." error_no_valid_links: "No valid links to download" info_files_select_storage: "Total {{.Count}} files, please select storage" ytdlp: usage: "Usage: /ytdlp [OPTIONS] [URL2] ...\nExamples:\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: "No valid URLs" info_urls_select_storage: "Found {{.Count}} links, please select storage" info_downloading: "Downloading via yt-dlp..." error_download_failed: "yt-dlp download failed: {{.Error}}" transfer: usage: | Usage: /transfer :/ [filter] Examples: /transfer local1:/downloads /transfer alist1:/media/photos /transfer webdav1:/files ".*\.mp4$" error_invalid_source: "Invalid source path format, should be: storage_name:/path" error_invalid_target: "Invalid target path format, should be: storage_name:/path" error_storage_not_found: "Storage '{{.StorageName}}' not found or access denied: {{.Error}}" error_storage_not_listable: "Storage '{{.StorageName}}' does not support listing files" error_storage_not_readable: "Storage '{{.StorageName}}' does not support reading files" error_target_not_found: "Target storage '{{.StorageName}}' not found or access denied: {{.Error}}" info_fetching_files: "Fetching file list..." error_list_files_failed: "Failed to list files: {{.Error}}" error_invalid_regex: "Invalid regular expression: {{.Error}}" error_no_files_to_transfer: "No files to transfer in directory" error_add_task_failed: "Failed to add task: {{.Error}}" info_task_added: "Added {{.Count}} files to transfer queue\nTotal size: {{.SizeMB}} MB\nTask ID: {{.TaskID}}" start_stats: "Total files: {{.Count}}\nTotal size: {{.SizeMB}} MB" info_files_select_storage: "Total {{.Count}} files ({{.SizeMB}} MB), please select target storage" error_build_storage_select_keyboard_failed: "Failed to build storage selection keyboard: {{.Error}}" cancel: usage: "Usage: /cancel " error_cancel_failed: "Failed to cancel task: {{.Error}}" info_cancel_requested: "Cancel requested for task: {{.TaskID}}" info_cancelling_task: "Cancelling task..." media_group: info_saving_files: "Saving files..." error_build_storage_select_keyboard_failed: "Failed to build storage selection keyboard: {{.Error}}" info_group_found_files_select_storage: "Total {{.Count}} files, please select storage" storage: info_filename_prefix: "Filename: " info_prompt_select_storage: "\nPlease select storage" progress: batch_status_header: "šŸ“¦ Processing\n\nFiles: {{.Total}} | Total size: {{.TotalSize}}\nStatus: āœ… {{.Completed}} | šŸ“„ {{.Downloaded}} | ā³ {{.Waiting}}\nTotal speed: ā¬‡ļø {{.DownloadSpeed}} | ā¬†ļø {{.UploadSpeed}}" batch_item_downloading: "
ā¬‡ļø {{.Index}}/{{.Total}} Downloading\n{{.Name}}\n{{.Bar}} {{.Progress}}%\nSpeed: {{.Speed}}\nSize: {{.Current}} / {{.Size}}
" batch_item_downloading_unknown: "
ā¬‡ļø {{.Index}}/{{.Total}} Downloading\n{{.Name}}\nSpeed: {{.Speed}}\nSize: {{.Current}} / unknown
" batch_item_transferring: "
ā†•ļø {{.Index}}/{{.Total}} Transferring\n{{.Name}}\n{{.Bar}} {{.Progress}}%\nSpeed: {{.Speed}}\nSize: {{.Current}} / {{.Size}}
" batch_item_transferring_unknown: "
ā†•ļø {{.Index}}/{{.Total}} Transferring\n{{.Name}}\nSpeed: {{.Speed}}\nSize: {{.Current}} / unknown
" batch_item_uploading: "
ā¬†ļø {{.Index}}/{{.Total}} Uploading\n{{.Name}}\n{{.Bar}} {{.Progress}}%\nSpeed: {{.Speed}}\nSize: {{.Current}} / {{.Size}}
" batch_item_retrying: "
šŸ” {{.Index}}/{{.Total}} Retrying upload\n{{.Name}}\n{{.Bar}} {{.Progress}}%\nRetry: {{.Attempt}}/{{.Limit}}\nSpeed before failure: {{.Speed}}\nSize: {{.Current}} / {{.Size}}\nReason: {{.Reason}}
" batch_item_confirming: "
ā³ {{.Index}}/{{.Total}} Waiting\n{{.Name}}\n{{.Bar}} {{.Progress}}%\nUploaded, awaiting remote confirmation
" batch_summary_hidden_active: "šŸ”„ {{.Count}} more files are active" batch_summary_confirming: "ā˜ļø Uploaded, awaiting group send: {{.Count}}" batch_summary_failed: "āŒ Failed: {{.Count}}" batch_summary_skipped: "ā­ļø Skipped: {{.Count}}" batch_done: "āœ… Completed\n\nFiles: {{.Count}}\nTotal size: {{.Size}}" batch_done_with_skipped: "āš ļø Completed\n\nSucceeded: {{.Success}}\nSkipped: {{.Skipped}}\nTotal size: {{.Size}}" batch_canceled: "🚫 Task canceled\n\nFiles: {{.Total}}\nCompleted: {{.Completed}}\nIncomplete: {{.Incomplete}}\nSkipped: {{.Skipped}}" batch_failed_item: "āŒ Processing failed\n\nFailed file: {{.Index}}. {{.Name}}\nStage: {{.Stage}}\nProgress: {{.Progress}}\nSpeed before failure: {{.Speed}}\nReason: {{.Reason}}\n\nāœ… Completed: {{.Completed}}\nāŒ Failed: {{.Failed}}\nā¹ļø Incomplete: {{.Incomplete}}" batch_failed_group: "āŒ Batch upload failed\n\nAffected files: {{.Affected}}\nReason: {{.Reason}}\n\nāœ… Completed: {{.Completed}}\nāŒ Batch failed: {{.Failed}}\nā¹ļø Incomplete: {{.Incomplete}}" batch_failed_task: "āŒ Processing failed\n\nReason: {{.Reason}}\n\nāœ… Completed: {{.Completed}}\nā¹ļø Incomplete: {{.Incomplete}}" batch_failure_stage_download: "download" batch_failure_stage_cache: "local cache" batch_failure_stage_upload: "upload" batch_failure_stage_confirm: "remote confirmation" batch_failure_stage_batch_upload: "batch upload" batch_failure_stage_internal: "internal task" single_status_header: "šŸ“¦ Processing" single_downloading: "
ā¬‡ļø Downloading\n{{.Name}}\n{{.Bar}} {{.Progress}}%\nSpeed: {{.Speed}}\nSize: {{.Current}} / {{.Size}}\nSave to: {{.Destination}}
" single_downloading_unknown: "
ā¬‡ļø Downloading\n{{.Name}}\nSpeed: {{.Speed}}\nSize: {{.Current}} / unknown\nSave to: {{.Destination}}
" single_uploading: "
ā¬†ļø Uploading\n{{.Name}}\n{{.Bar}} {{.Progress}}%\nSpeed: {{.Speed}}\nSize: {{.Current}} / {{.Size}}\nSave to: {{.Destination}}
" single_upload_retrying: "
šŸ” Retrying upload\n{{.Name}}\n{{.Bar}} {{.Progress}}%\nAttempt: {{.Attempt}}\nSpeed: {{.Speed}}\nSize: {{.Current}} / {{.Size}}\nSave to: {{.Destination}}
" single_done: "āœ… Completed\n\nFilename: {{.Name}}\nTotal size: {{.Size}}\nSave to: {{.Destination}}" single_canceled: "🚫 Task canceled\n\nFilename: {{.Name}}" single_failed: "āŒ Processing failed\n\nFilename: {{.Name}}\nReason: {{.Reason}}" downloading_prefix: "Downloading\nTotal size: " size_with_files: "{{.Size}} ({{.Count}} files)" size_with_resources: "{{.Size}} ({{.Count}} resources)" processing_list_prefix: "\nProcessing:\n" processing_none: " - None" avg_speed_prefix: "\nAverage speed: " current_progress_prefix: "\nCurrent progress: " task_canceled_with_id: "Processing canceled: {{.TaskID}}" task_failed_with_error: "Processing failed: {{.Error}}" direct_done_prefix: "Completed, file count: " parsed_start_prefix: "Starting download from {{.Site}}\nTotal size: " parsed_done_prefix: "Completed, resource count: " telegraph_start_prefix: "Starting Telegraph download\nImage count: " telegraph_progress_prefix: "Downloading\nCurrent progress: " telegraph_done_prefix: "Completed\nImage count: " save_path_prefix: "\nSave path: " total_size_prefix: "\nTotal size: " direct_start: "Starting download, total size: {{.SizeMB}} MB ({{.Count}} files)" error_prefix: "\nError: " aria2_start: "Waiting for Aria2 to complete download (GID: {{.GID}})..." aria2_downloading: "Aria2 downloading (GID: {{.GID}})\n" aria2_done: "Aria2 download completed and transferred (GID: {{.GID}})\n" ytdlp_start: "Starting yt-dlp download ({{.Count}} links)..." ytdlp_downloading: "yt-dlp downloading ({{.Count}} links)\n" ytdlp_done: "yt-dlp download completed and transferred ({{.Count}} files)\n" downloaded_prefix: "\nDownloaded: " current_speed_prefix: "\nCurrent speed: " transfer_start_prefix: "Transfering: " transfer_progress_prefix: "Transfer progress: " transfer_uploaded_prefix: "\nUploaded: " transfer_speed_prefix: "\nSpeed: " transfer_remaining_time_prefix: "\nRemaining time: " transfer_processing_prefix: "\nProcessing:\n" transfer_processing_more: "...and {{.Count}} more files\n" transfer_failed_prefix: "Transfer failed\n" transfer_success_prefix: "Transfer completed\n" transfer_total_files_prefix: "\nTotal files: " transfer_total_size_prefix: "\nTotal size: " transfer_elapsed_time_prefix: "\nElapsed time: " transfer_avg_speed_prefix: "\nAverage speed: " transfer_failed_files_prefix: "\nFailed files: " syncpeers: start: "Starting to sync peers..." success: "Peer sync completed, total {{.Count}} chats synced" failed: "Peer sync failed: {{.Error}}" aria2: error_aria2_not_enabled: "Aria2 feature is not enabled in the configuration" error_aria2_client_init_failed: "Aria2 client initialization failed: {{.Error}}" info_adding_aria2_download: "Adding Aria2 download task..." error_adding_aria2_download: "Failed to add Aria2 download task: {{.Error}}" info_aria2_download_added: "Aria2 download task added, GID: {{.GID}}" info_select_storage: "Please select storage, the task will be added to Aria2 download queue after selection"