Skip to content

Kaizerslau/max-bot-upload-powershell

Repository files navigation

MAX File Uploader

Небольшая утилита для Windows PowerShell 5.1, которая загружает один локальный файл в MAX Bot API.

Поддерживаются типы:

  • image
  • video
  • audio
  • file

Что делает скрипт

  • Запрашивает upload URL через POST /uploads?type=....
  • Загружает один локальный файл как multipart/form-data с именем поля data.
  • Автоматически определяет тип загрузки по расширению файла.
  • Передаёт подходящий MIME type для известных расширений.
  • Даёт две версии запуска:
    • подробную, с ответами MAX и готовыми примерами JSON;
    • короткую, которая выводит только тело запроса одной строкой и копирует его в буфер обмена.

Самый простой способ

Никаких команд вводить не нужно. После настройки .env достаточно перетащить файл мышкой на нужный .bat:

  • нужен полный подробный вывод — перетащите файл на run.bat;
  • нужно только тело запроса и автоматическое копирование в буфер — перетащите файл на run-body.bat.

После перетаскивания откроется окно PowerShell. Дождитесь завершения загрузки: большие файлы и видео могут загружаться заметно дольше, и в этот момент может казаться, что окно “зависло”. Это нормально, не закрывайте окно, пока не появится результат.

Требования

  • Windows
  • PowerShell 5.1
  • curl.exe
  • Токен MAX-бота
  • Локальный файл для загрузки

Настройка

Перед первым запуском нужно один раз создать файл настроек .env.

В папке проекта уже есть файл .env.example. Это пример настроек. Его нужно скопировать или переименовать так, чтобы в названии осталось только .env, без .example.

Самый простой вариант:

  1. Найдите файл .env.example.
  2. Сделайте его копию в этой же папке.
  3. Переименуйте копию в .env.
  4. Откройте .env обычным текстовым редактором, например Блокнотом.
  5. Вставьте токен MAX-бота вместо PUT_YOUR_MAX_BOT_TOKEN_HERE.

Можно сделать то же самое командой:

copy .env.example .env

После этого откройте .env Блокнотом или любым другим текстовым редактором.

Пример содержимого .env:

MAX_BOT_TOKEN=PUT_YOUR_MAX_BOT_TOKEN_HERE
MAX_UPLOAD_TYPE=auto

Нужно заменить только значение после MAX_BOT_TOKEN=. Строку MAX_UPLOAD_TYPE=auto обычно трогать не нужно.

Например:

MAX_BOT_TOKEN=ваш_токен_бота
MAX_UPLOAD_TYPE=auto

Путь к файлу удобнее не хранить в .env: можно перетащить файл на .bat, передать путь аргументом или вставить путь при запуске.

Если всё-таки нужен файл по умолчанию, можно добавить:

MAX_FILE_PATH=C:\temp\voice.mp3

Старый параметр AUDIO_FILE_PATH ещё поддерживается, но лучше перейти на новый способ.

Подробный запуск

Используйте эту версию, если нужен полный ответ: upload URL response, raw response загрузки, attachment JSON и пример body для POST /messages.

Самый простой запуск: перетащите файл мышкой на run.bat.

Альтернативно можно запустить с вводом пути:

run.bat

Запуск с путём:

run.bat "C:\temp\picture.png"

Запуск с явным типом:

run.bat "C:\temp\unknown.bin" file

Можно вызвать PowerShell-скрипт напрямую:

powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\upload-max-file.ps1 -FilePath "C:\temp\movie.mp4" -UploadType video

После строки Uploading file with curl.exe... дождитесь ответа сервера. Для больших файлов и видео это может занять время.

Запуск для получения тела запроса

Используйте эту версию, если нужно сразу получить только body запроса одной строкой и скопировать его в буфер обмена.

Самый простой запуск: перетащите файл мышкой на run-body.bat.

Альтернативно можно запустить с вводом пути:

run-body.bat

Запуск с путём:

run-body.bat "C:\temp\picture.png"

С явным типом:

run-body.bat "C:\temp\unknown.bin" file

В конце скрипт выводит JSON одной строкой, без переносов:

{"text":"","attachments":[{"type":"image","payload":{"token":"TOKEN"}}],"format":"html"}

Эта строка автоматически копируется в буфер обмена. type определяется автоматически.

В теле запроса заранее используется пустой text: MAX API не ругается на пустую строку, а при необходимости текст к вложению проще быстро вписать прямо в готовый JSON.

Также сразу добавлено "format":"html". Если HTML-форматирование не нужно, это поле можно удалить или поменять значение на markdown.

Для image скрипт достаёт token из вложенного ответа MAX и приводит payload к виду {"token":"..."}.

После строки Uploading file and preparing request body... дождитесь завершения загрузки. Если файл большой или это видео, скрипт может некоторое время не выводить новые строки, пока upload-сервер принимает файл.

Для видео скрипт показывает ответ upload-сервера. Если MAX принял файл, но готовое тело запроса не срабатывает сразу, подождите немного и повторите отправку: видео может обрабатываться не мгновенно.

Если нужен вывод только JSON без служебных строк, можно вызвать PowerShell-скрипт напрямую:

powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\upload-max-body.ps1 -FilePath "C:\temp\picture.png" -JsonOnly

Автоопределение типа

При MAX_UPLOAD_TYPE=auto расширения сопоставляются так:

  • Изображения: .jpg, .jpeg, .png, .gif, .tiff, .tif, .bmp, .heic
  • Видео: .mp4, .mov, .mkv, .webm, .matroska
  • Аудио: .mp3, .wav, .m4a, .aac, .ogg, .opus, .flac
  • Всё остальное: file

Поддерживаемые типы MAX: image, video, audio, file.

Результат подробного запуска

Подробный скрипт выводит готовый attachment JSON. Точная форма payload зависит от ответа MAX и типа файла.

{
  "type": "file",
  "payload": {
    "fileId": 123,
    "token": "TOKEN"
  }
}

И пример полного body для последующего POST /messages:

{
  "text": null,
  "attachments": [
    {
      "type": "file",
      "payload": {
        "fileId": 123,
        "token": "TOKEN"
      }
    }
  ]
}

Для audio и video MAX возвращает token при создании upload URL. Для image и file token берётся из ответа загрузки.

Реальные тесты API подтвердили file, image, audio с MP3 и video с MP4. Для WAV во время тестирования MAX вернул 415 Unsupported Media Type; если это повторится, конвертируйте аудио в MP3 и попробуйте снова.

Если MAX возвращает attachment.not.ready при отправке сообщения, подождите несколько секунд и повторите отправку.

About

Небольшая утилита PowerShell 5.1 для загрузки локальных файлов в MAX Bot API

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Contributors