Releases: NanoAgents/MaxBotNet
Releases · NanoAgents/MaxBotNet
MaxMessenger.Bot v0.6.1-alpha
Breaking Changes
- Chats API membership contract:
GetChatMembershipAsync()теперь возвращаетChatMemberвместоChat, аGetChatMembersAsync()использует параметрыmarker/countи ответChatMembersResponse. - Edit message request DTOs:
EditMessageRequest.Attachmentsтеперь используетAttachmentRequest[], аLink—NewMessageLink, чтобы соответствовать формату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
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
- @godunko-mikhail made their first contribution in #5
- @XopcT made their first contribution in #3
Full Changelog: v0.4.1-alpha...v0.5.0-alpha
v0.4.1-alpha
Changed
LinkedMessage.Message: Изменён тип сMessageнаMessageBodyдля соответствия реальной структуре API- В API поле
link.messageсодержит толькоMessageBody(mid, seq, text), а не полный объектMessage - Добавлены convenience properties:
LinkedMessage.Mid,LinkedMessage.Seqдля удобного доступа - Свойство
LinkedMessage.Textпродолжает работать как раньше
- В API поле
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
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
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
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
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
// Установка команд бота
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-кнопок: новый enumButtonIntent, свойство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
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
Added
- Полная синхронизация типов
Updateс официальной документацией Max API. - Расширение
UpdateTypeenum: добавлены все 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соответственно).- Значения
ChatTypeenum приведены в соответствие с API:Dialog(вместоPrivate),Chat(вместоGroup). UpdateJsonConverterобновлён для корректной десериализации всех типов update и их специфичных полей.UpdateHandlerExecutorобновлён для использования новых значенийUpdateType.MessageCreatedиUpdateType.MessageCallback.- Все примеры и тесты обновлены для использования новых API-совместимых имён полей.
Fixed
- Исправлена десериализация
ChatTypeenum: добавлен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