Skip to content

Releases: mammothcoding/maxoxide

v1.0.0

25 Mar 21:34

Choose a tag to compare

[1.0.0] - 2026-03-25

EN

Release summary

This release promotes maxoxide from 0.1.0 to 1.0.0, adds a real interactive live API test harness for MAX, fixes several real-API mismatches, and makes message delivery APIs explicit about whether they target a chat_id or a user_id.

Breaking changes

  • Removed the old shorthand methods:
    • send_text
    • send_markdown
    • send_message
  • Added explicit recipient-specific methods:
    • send_text_to_chat(chat_id, text)
    • send_text_to_user(user_id, text)
    • send_markdown_to_chat(chat_id, text)
    • send_markdown_to_user(user_id, text)
    • send_message_to_chat(chat_id, body)
    • send_message_to_user(user_id, body)
  • Migration for apps still on 0.1.0:
    • Replace send_text(chat_id, text) with send_text_to_chat(chat_id, text)
    • Replace send_markdown(chat_id, text) with send_markdown_to_chat(chat_id, text)
    • Replace send_message(chat_id, body) with send_message_to_chat(chat_id, body)
    • If you only know a global MAX user_id, use the new *_to_user(...) methods

Added

  • Added examples/live_api_test.rs, an interactive real-API harness with:
    • English and Russian language selection
    • runtime input for token, bot URL, webhook settings, file path, delays, and timeouts
    • manual tester-driven steps in the MAX client
    • optional group-chat phase
    • PASS / FAIL / SKIP summary
    • non-blocking manual waits with continue / skip / fail
  • Added a /get_my_id live-test flow and sender user_id logging
  • Added live coverage for both *_to_chat and *_to_user methods, including attachment sending via user_id
  • Added tests that explicitly verify the difference between chat_id and user_id

Changed

  • Clarified throughout the docs that:
    • user_id is the global MAX user identifier
    • chat_id is the identifier of a concrete dialog, group, or channel
  • Updated README, README.ru, examples, and crate-level docs to use only the explicit *_to_chat / *_to_user APIs
  • Reworked API tables so chat-targeted and user-targeted methods are listed side by side
  • Bumped the crate version to 1.0.0

Fixed

  • Fixed answer_callback to send callback_id as a query parameter, matching the real MAX API
  • Fixed edit_message to return SimpleResult instead of incorrectly deserializing a Message
  • Switched HTTP response parsing to bytes + String::from_utf8_lossy to avoid crashes on invalid UTF-8
  • Added lossy attachment deserialization so malformed or unknown attachments do not break entire update/message parsing
  • Updated action handling and live testing to use the real MAX action value typing_on

MAX platform gaps documented by live testing

  • request_contact is documented by MAX, but live tests received a contact attachment with empty contact_id and empty vcf_phone
  • request_geo_location is documented by MAX, and the mobile client shows a sent location card, but the bot did not receive a matching update in live polling tests
  • typing_on returns a successful API response, but the client-side typing indicator was not reliably visible in live testing
  • set_my_commands remains experimental: live POST /me/commands requests returned 404, and the public MAX REST docs do not currently expose a documented write endpoint for command menu updates

Verification

  • cargo fmt --all
  • cargo check --example live_api_test
  • cargo test
  • The live API test was successfully completed against a real MAX bot during this release cycle

RU

Кратко о релизе

Этот релиз переводит maxoxide с ветки 0.1.0 на 1.0.0, добавляет полноценный интерактивный live-тест на реальном API MAX, исправляет несколько несовпадений с реальным поведением платформы и делает API отправки сообщений явным по типу получателя: chat_id или user_id.

Ломающие изменения

  • Удалены старые сокращённые методы:
    • send_text
    • send_markdown
    • send_message
  • Добавлены явные методы по типу адресата:
    • send_text_to_chat(chat_id, text)
    • send_text_to_user(user_id, text)
    • send_markdown_to_chat(chat_id, text)
    • send_markdown_to_user(user_id, text)
    • send_message_to_chat(chat_id, body)
    • send_message_to_user(user_id, body)
  • Миграция приложений со старой 0.1.0:
    • Заменить send_text(chat_id, text) на send_text_to_chat(chat_id, text)
    • Заменить send_markdown(chat_id, text) на send_markdown_to_chat(chat_id, text)
    • Заменить send_message(chat_id, body) на send_message_to_chat(chat_id, body)
    • Если приложению известен только глобальный MAX user_id, использовать новые методы *_to_user(...)

Добавлено

  • Добавлен examples/live_api_test.rs — интерактивный harness для проверки реального API, который включает:
    • выбор языка English / Russian
    • ввод токена, URL бота, webhook-настроек, пути к файлу, задержек и таймаутов во время старта
    • ручные шаги тестера в клиенте MAX
    • необязательный этап группового чата
    • итоговую сводку PASS / FAIL / SKIP
    • ручное ожидание без Ctrl+C через continue / skip / fail
  • Добавлен live-сценарий /get_my_id и вывод sender.user_id
  • Добавлено live-покрытие новых методов *_to_chat и *_to_user, включая отправку вложения по user_id
  • Добавлены тесты, которые явно проверяют различие между chat_id и user_id

Изменено

  • Во всей документации явно зафиксировано:
    • user_id — глобальный идентификатор пользователя MAX
    • chat_id — идентификатор конкретного диалога, группы или канала
  • README, README.ru, примеры и crate docs переведены только на явные методы *_to_chat / *_to_user
  • Таблицы API перестроены так, чтобы chat-методы и user-методы стояли рядом
  • Версия крейта повышена до 1.0.0

Исправлено

  • Исправлен answer_callback: теперь callback_id отправляется query-параметром, как требует реальный MAX API
  • Исправлен edit_message: теперь метод возвращает SimpleResult, а не пытается неверно десериализовать Message
  • Разбор HTTP-ответов переведён на bytes + String::from_utf8_lossy, чтобы не падать на невалидном UTF-8
  • Добавлена lossy-десериализация вложений: неизвестный или кривой attachment больше не валит весь update или message
  • Для действий бота и live-теста закреплено реальное значение MAX typing_on

Ограничения платформы MAX, выявленные live-тестами

  • request_contact задокументирован в MAX, но в live-тестах contact приходил с пустыми contact_id и vcf_phone
  • request_geo_location задокументирован в MAX, мобильный клиент показывает отправленную карточку геопозиции, но бот не получил соответствующий update в live polling
  • typing_on возвращает успешный API-ответ, но видимый индикатор набора текста в клиенте live-тестами не подтверждён
  • set_my_commands остаётся experimental helper: live-запросы POST /me/commands возвращают 404, а публичный REST MAX сейчас не показывает документированного write-эндпоинта для меню команд

Проверка

  • cargo fmt --all
  • cargo check --example live_api_test
  • cargo test
  • Живой тест на реальном MAX-боте был успешно пройден в рамках этого релиза

v0.1.0

24 Mar 23:07

Choose a tag to compare

First release.