Skip to content

Releases: NanoAgents/MaxBotNet

MaxMessenger.Bot v0.6.1-alpha

28 Apr 15:12

Choose a tag to compare

Breaking Changes

  • Chats API membership contract: GetChatMembershipAsync() теперь возвращает ChatMember вместо Chat, а GetChatMembersAsync() использует параметры marker / count и ответ ChatMembersResponse.
  • Edit message request DTOs: EditMessageRequest.Attachments теперь использует AttachmentRequest[], а LinkNewMessageLink, чтобы соответствовать формату PUT /messages.
  • Upload result contract: FileUploadResult приведён к официально подтверждённому token-only формату; неподтверждённые FileId, Photos и PhotoSizeToken удалены.

Added

  • .NET 10 support: Библиотека, тесты и examples теперь таргетят net10.0, net9.0 и net8.0.
  • Chat members response: Добавлена модель ChatMembersResponse для ответов endpoints участников и администраторов чата.
  • MAX API model fields: Добавлены актуальные поля в User, ChatMember, Contact и ContactAttachment, включая contact.hash.
  • Bot started payload: Update, BotStartedUpdate и UpdateJsonConverter теперь поддерживают payload для deep-link запуска бота.
  • Chat admin permissions: Добавлены недостающие значения ChatAdminPermission из актуального MAX API.

Changed

  • MAX API model audit: DTO, converters и request/response модели приведены к официальным схемам MAX Bot API там, где они подтверждены документацией.
  • Chats and messages API contracts: ChatsApi, MessagesApi, upload flow и attachment handling синхронизированы с актуальными response/request shapes.
  • CI/CD release flow: GitHub Actions обновлены под multi-target .NET 10 / 9 / 8, релизные проверки и автоматическое создание GitHub Release.

Fixed

  • Contact vCard parsing: Исправлен парсинг поля N: в ContactHelpers, которое ошибочно матчило BEGIN:VCARD.
  • HTTP errors and logging: Улучшено поведение MaxHttpClient при невалидном error body, retry и диагностическом логировании.
  • Regression tests: Обновлены тесты сериализации, API responses, samples и networking под актуальные контракты.

v0.5.0-alpha

09 Mar 14:22

Choose a tag to compare

What's Changed

  • fix: DeleteWebhook endpoint accepts url only in query parameter by @godunko-mikhail in #5
  • Added LocationAttachment and ContactAttachment by @XopcT in #3

New Contributors

Full Changelog: v0.4.1-alpha...v0.5.0-alpha

v0.4.1-alpha

23 Dec 18:20

Choose a tag to compare

Changed

  • LinkedMessage.Message: Изменён тип с Message на MessageBody для соответствия реальной структуре API
    • В API поле link.message содержит только MessageBody (mid, seq, text), а не полный объект Message
    • Добавлены convenience properties: LinkedMessage.Mid, LinkedMessage.Seq для удобного доступа
    • Свойство LinkedMessage.Text продолжает работать как раньше

Fixed

  • Исправлена критическая ошибка десериализации LinkedMessage: теперь при получении webhook с reply/forward сообщением все поля корректно заполняются
    • Ранее поля LinkedMessage.Message (mid, seq, text, sender, chat_id) оставались null из-за несоответствия типа данных
    • Причина: в реальном API link.message содержит MessageBody, а не полный Message
    • Теперь link.message корректно парсится как MessageBody с полями mid, seq, text
    • Добавлены хелперы Mid, Seq для удобного доступа к данным связанного сообщения

v0.4.0-alpha

23 Dec 17:13

Choose a tag to compare

Changed

  • Message.Text: Теперь помечено [JsonIgnore] - это convenience property для доступа к Body.Text, не сериализуется в JSON
    • Свойство Text больше НЕ сериализуется в JSON при отправке сообщений
    • В официальном MAX API текст находится в message.body.text, а не message.text
    • При чтении сообщений Text продолжает работать как удобный хелпер для Body.Text
    • Упрощена логика синхронизации: Text теперь напрямую работает с Body.Text
  • Обновлены примеры в SampleRuntime.cs для использования Message.Recipient вместо Message.Chat

Fixed

  • Исправлена сериализация Message объектов: свойство Text больше не создаёт дублирующее поле в JSON
  • Теперь при отправке сообщений текст корректно передаётся только в body.text согласно официальной документации MAX API

Removed

  • Удалены legacy/backward-compat поля из Message: From, Id, Chat, Date, Type
  • Удалён legacy алиас Chat.Id (используйте Chat.ChatId)
  • Удалены legacy алиасы ChatType.Private и ChatType.Group (используйте Dialog и Chat)
  • Удалён неиспользуемый enum MessageType (после удаления Message.Type)

v0.3.6-alpha

23 Dec 10:25

Choose a tag to compare

Removed

  • Удален метод BaseApi.ValidateChatId() и все его вызовы (20 мест), так как валидация chatId не требуется. Max API принимает любые значения long для chatId:
    • Dialog (личные чаты): 0 или положительные
    • Chat (групповые чаты): положительные
    • Channel (каналы): отрицательные (как в Telegram Bot API)

Fixed

  • Убран [Range(1, long.MaxValue)] атрибут в Chat.ChatId, так как он блокировал отрицательные ID каналов и chatId = 0 для диалогов.

0.3.5-alpha

22 Dec 13:50

Choose a tag to compare

Added

  • Unit-тесты MessageRecipientTests с 8 сценариями проверки десериализации и сериализации MessageRecipient.ChatId и UserId со значениями 0, null и положительными числами.
  • Метод BaseApi.ValidateUserIdStrict() для строгой валидации userId в операциях, где 0 недопустим (например, удаление админа/участника чата).

Changed

  • Обновлены unit-тесты валидации API методов: для большинства методов убраны проверки на chatId = 0 и userId = 0, оставлены только проверки на отрицательные значения. Для RemoveChatAdminAsync и RemoveChatMemberAsync сохранена проверка на 0, так как это требуется контрактом интерфейса.
  • RemoveChatAdminAsync и RemoveChatMemberAsync теперь используют ValidateUserIdStrict() вместо ValidateUserId() для соответствия контракту интерфейса IChatsApi, который требует отклонять userId <= 0.

Fixed

  • КРИТИЧЕСКОЕ ИСПРАВЛЕНИЕ: Убрана строгая валидация [Range(1, long.MaxValue)] для MessageRecipient.ChatId и MessageRecipient.UserId, чтобы поддержать личные сообщения (direct messages), где Max API может передавать ChatId = 0 или null. Оба свойства остались nullable (long?), но теперь принимают любые значения, включая 0.
  • КРИТИЧЕСКОЕ ИСПРАВЛЕНИЕ: Исправлена валидация в BaseApi.ValidateChatId() и BaseApi.ValidateUserId() - изменена проверка с <= 0 на < 0, что разрешает использование значения 0 для личных сообщений (dialogs) в соответствии с поведением Max API. Отрицательные значения по-прежнему запрещены.
  • Исправлена несогласованность валидации: RemoveChatAdminAsync и RemoveChatMemberAsync теперь корректно отклоняют userId = 0 в соответствии с контрактом интерфейса, используя новый метод ValidateUserIdStrict().

v0.3.4-alpha

22 Dec 13:02

Choose a tag to compare

Added

  • Unit-тесты MessageRecipientTests с 8 сценариями проверки десериализации и сериализации MessageRecipient.ChatId и UserId со значениями 0, null и положительными числами.

Fixed

  • КРИТИЧЕСКОЕ ИСПРАВЛЕНИЕ: Убрана строгая валидация [Range(1, long.MaxValue)] для MessageRecipient.ChatId и MessageRecipient.UserId, чтобы поддержать личные сообщения (direct messages), где Max API может передавать ChatId = 0 или null. Оба свойства остались nullable (long?), но теперь принимают любые значения, включая 0. Это исправление критично для работы с личными сообщениями в Max Messenger.

v0.3.3-alpha

27 Nov 10:08

Choose a tag to compare

// Установка команд бота
var commands = new[]
{
    new BotCommand("start", "Старт"),
    new BotCommand("general", "Общие меры поддержки для семей с детьми"),
    new BotCommand("first", "Меры для семей с одним ребенком")
};
await client.Bot.SetCommandsAsync(commands);

// Кнопка с intent
var button = new InlineKeyboardButton
{
    Type = ButtonType.Callback,
    Text = "Подтвердить",
    Payload = "confirm",
    Intent = ButtonIntent.Positive  // зелёная кнопка
};

Added

  • Поддержка intent для inline-кнопок: новый enum ButtonIntent, свойство InlineKeyboardButton.Intent и обновлённый конвертер обеспечивают соответствие API и позволяют задавать позитивные/негативные стили.
  • Модель BotCommand, запрос UpdateBotInfoRequest и публичный метод SetCommandsAsync в BotApi, позволяющие задавать меню команд через официальный PATCH /me.
  • Unit-тесты для новых типов и поведения (InlineKeyboardButton, BotCommand, BotApi.SetCommandsAsync), чтобы предотвратить регрессии.

Full Changelog: v0.3.2-alpha...v0.3.3-alpha

v0.3.2-alpha

25 Nov 08:43

Choose a tag to compare

Fixed

  • Исправлена критическая ошибка в EditMessageReplyMarkupAsync: теперь метод корректно сохраняет другие вложения (изображения, файлы) при удалении или замене клавиатуры. Ранее пустой массив удалял все вложения сообщения.
  • Исправлена потенциальная NullReferenceException в EditMessageReplyMarkupAsync при обработке сообщений без вложений: добавлена безопасная обработка null-значений для Body и Attachments.

[0.3.1-alpha] - 2025-11-25

Added

  • Метод EditMessageReplyMarkupAsync для редактирования только клавиатуры сообщения, аналогичный Telegram API. Позволяет удалять или заменять inline-клавиатуру в одну строчку.

Changed

  • Увеличен лимит валидации CallbackId с 64 до 512 символов для поддержки реальных callback_id от Max API (~128 символов).

Removed

  • Удалены устаревшие legacy части для соответствия оригинальному Max API:
    • Удалено устаревшее свойство Update.CallbackQuery (используйте Update.Callback).
    • Удалены устаревшие enum aliases UpdateType.Message и UpdateType.CallbackQuery (используйте UpdateType.MessageCreated и UpdateType.MessageCallback).

Fixed

  • Исправлена ошибка валидации при обработке callback-запросов: реальные callback_id от API (~128 символов) теперь корректно принимаются благодаря увеличению лимита валидации.

Full Changelog: v0.3.0-alpha...v0.3.2-alpha

v0.3.0-alpha

25 Nov 04:44

Choose a tag to compare

Added

  • Полная синхронизация типов Update с официальной документацией Max API.
  • Расширение UpdateType enum: добавлены все 16 официальных типов обновлений (MessageCreated, MessageCallback, MessageEdited, MessageRemoved, BotAdded, BotRemoved, BotStarted, BotStopped, DialogMuted, DialogUnmuted, DialogCleared, DialogRemoved, UserAdded, UserRemoved, ChatTitleChanged, MessageChatCreated).
  • Типизированные обёртки для всех типов update: MessageEditedUpdate, MessageRemovedUpdate, BotAddedUpdate, BotRemovedUpdate, BotStartedUpdate, BotStoppedUpdate, UserAddedUpdate, UserRemovedUpdate, ChatTitleChangedUpdate, MessageChatCreatedUpdate и другие.
  • Свойство Update.Callback для доступа к callback-запросам (соответствует API полю callback).
  • Свойства Update.Chat, Update.User, Update.InviterId, Update.ChatId, Update.IsMuted для различных типов обновлений.
  • Свойство Chat.ChatId как основное поле, соответствующее API полю chat_id.
  • Свойство Message.Sender как основное поле, соответствующее API полю sender.
  • Класс LinkedMessage для представления связанных сообщений (forward/reply).
  • Unit-тесты для всех новых типов update с примерами из реального API.

Changed

  • UpdateType.Message и UpdateType.CallbackQuery помечены как устаревшие (используйте MessageCreated и MessageCallback).
  • Update.CallbackQuery помечено как устаревшее (используйте Update.Callback).
  • Message.From помечено как устаревшее (используйте Message.Sender).
  • Chat.Id теперь read-only свойство-алиас для Chat.ChatId (для обратной совместимости).
  • ChatType.Private и ChatType.Group помечены как устаревшие (используйте Dialog и Chat соответственно).
  • Значения ChatType enum приведены в соответствие с API: Dialog (вместо Private), Chat (вместо Group).
  • UpdateJsonConverter обновлён для корректной десериализации всех типов update и их специфичных полей.
  • UpdateHandlerExecutor обновлён для использования новых значений UpdateType.MessageCreated и UpdateType.MessageCallback.
  • Все примеры и тесты обновлены для использования новых API-совместимых имён полей.

Fixed

  • Исправлена десериализация ChatType enum: добавлен JsonStringEnumConverter для корректного преобразования строковых значений API.
  • Исправлена десериализация Update объектов: все поля теперь корректно парсятся в зависимости от update_type.
  • Исправлены тесты для соответствия новой структуре API (использование chat_id вместо id, sender вместо from, dialog/chat вместо private/group).

Full Changelog: v0.2.6-alpha...v0.3.0-alpha