Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

COMPRESS

The COMPRESS keyword creates ZIP archives from files and directories in the bot’s storage, enabling bots to bundle multiple files for download or transfer.


Syntax

COMPRESS files TO "archive.zip"
result = COMPRESS files TO "archive.zip"
COMPRESS "folder/" TO "archive.zip"

Parameters

ParameterTypeDescription
filesArray/StringList of file paths or a single folder path
TOClauseDestination path for the archive

Description

COMPRESS creates a ZIP archive containing the specified files or directory contents. The archive is stored in the bot’s drive storage and can be downloaded, emailed, or transferred.

Use cases include:

  • Bundling multiple documents for download
  • Creating backups
  • Packaging exports for users
  • Archiving old files
  • Preparing files for email attachments

Examples

Compress Multiple Files

' Create archive from list of files
files = ["report.pdf", "data.csv", "images/logo.png"]
COMPRESS files TO "package.zip"

TALK "Files compressed into package.zip"

Compress a Folder

' Compress entire folder contents
COMPRESS "documents/project/" TO "project-backup.zip"

TALK "Project folder compressed"

Compress with Result

' Get compression result details
result = COMPRESS files TO "exports/archive.zip"

TALK "Archive created: " + result.filename
TALK "Size: " + FORMAT(result.size / 1024, "#,##0") + " KB"
TALK "Files included: " + result.file_count

Compress for Download

' Create archive and send to user
files = LIST "reports/" FILTER "*.pdf"
file_paths = []

FOR EACH file IN files
    file_paths = APPEND(file_paths, "reports/" + file.name)
NEXT

result = COMPRESS file_paths TO "all-reports.zip"

DOWNLOAD "all-reports.zip" AS "Your Reports.zip"
TALK "Here are all your reports in a single download!"

Compress with Timestamp

' Create dated archive
timestamp = FORMAT(NOW(), "YYYYMMDD-HHmmss")
archive_name = "backup-" + timestamp + ".zip"

COMPRESS "data/" TO "backups/" + archive_name

TALK "Backup created: " + archive_name

Common Use Cases

Create Document Package

' Bundle documents for a customer
customer_files = [
    "contracts/" + customer_id + "/agreement.pdf",
    "contracts/" + customer_id + "/terms.pdf",
    "invoices/" + customer_id + "/latest.pdf"
]

result = COMPRESS customer_files TO "temp/customer-package.zip"

DOWNLOAD "temp/customer-package.zip" AS "Your Documents.zip"
TALK "Here's your complete document package!"

Archive Old Data

' Archive and remove old files
old_files = LIST "logs/" FILTER "*" WHERE modified < DATEADD(NOW(), -90, "day")
file_paths = []

FOR EACH file IN old_files
    file_paths = APPEND(file_paths, "logs/" + file.name)
NEXT

IF LEN(file_paths) > 0 THEN
    archive_name = "logs-archive-" + FORMAT(NOW(), "YYYYMM") + ".zip"
    COMPRESS file_paths TO "archives/" + archive_name
    
    ' Remove original files
    FOR EACH path IN file_paths
        DELETE FILE path
    NEXT
    
    TALK "Archived " + LEN(file_paths) + " old log files"
END IF

Export User Data

' GDPR data export
user_folder = "users/" + user.id + "/"

COMPRESS user_folder TO "exports/user-data-" + user.id + ".zip"

link = DOWNLOAD "exports/user-data-" + user.id + ".zip" AS LINK
TALK "Your data export is ready: " + link
TALK "This link expires in 24 hours."

Email Attachment Bundle

' Create attachment for email
attachments = [
    "reports/summary.pdf",
    "reports/details.xlsx",
    "reports/charts.png"
]

COMPRESS attachments TO "temp/report-bundle.zip"

SEND MAIL recipient_email, "Monthly Report Bundle", 
    "Please find attached the complete monthly report package.",
    "temp/report-bundle.zip"

TALK "Report bundle sent to " + recipient_email

Return Value

Returns an object with archive details:

PropertyDescription
result.pathFull path to the archive
result.filenameArchive filename
result.sizeArchive size in bytes
result.file_countNumber of files in archive
result.created_atCreation timestamp

Error Handling

ON ERROR RESUME NEXT

result = COMPRESS files TO "archive.zip"

IF ERROR THEN
    PRINT "Compression failed: " + ERROR_MESSAGE
    
    IF INSTR(ERROR_MESSAGE, "not found") > 0 THEN
        TALK "One or more files could not be found."
    ELSE IF INSTR(ERROR_MESSAGE, "storage") > 0 THEN
        TALK "Not enough storage space for the archive."
    ELSE
        TALK "Sorry, I couldn't create the archive. Please try again."
    END IF
ELSE
    TALK "Archive created successfully!"
END IF

Common Errors

ErrorCauseSolution
FILE_NOT_FOUNDSource file doesn’t existVerify file paths
STORAGE_FULLInsufficient spaceClean up storage
EMPTY_ARCHIVENo files to compressCheck file list
PERMISSION_DENIEDAccess blockedCheck permissions

Compression Options

The default compression uses standard ZIP format with deflate compression. This balances file size reduction with compatibility.


Size Limits

LimitDefaultNotes
Max archive size500 MBConfigurable
Max files per archive10,000Practical limit
Max single file100 MBPer file in archive

Configuration

No specific configuration required. Uses bot’s standard drive settings from config.csv:

name,value
drive-provider,seaweedfs
drive-url,http://localhost:8333
drive-bucket,my-bot

Implementation Notes

  • Implemented in Rust under src/file/archive.rs
  • Uses standard ZIP format for compatibility
  • Preserves directory structure in archive
  • Supports recursive folder compression
  • Progress tracking for large archives
  • Atomic operation (creates temp file, then moves)

  • EXTRACT — Extract archive contents
  • LIST — List files to compress
  • DOWNLOAD — Send archive to user
  • DELETE FILE — Remove files after archiving
  • COPY — Copy files before archiving

Summary

COMPRESS creates ZIP archives from files and folders. Use it to bundle documents for download, create backups, package exports, and prepare email attachments. The archive preserves directory structure and can be immediately downloaded or processed. Combine with LIST to dynamically select files and DOWNLOAD to deliver archives to users.