Исправлена типизация для опциональных полей, добавлена защита#29
Conversation
…ументация и типы для поддержки случаев, когда body может быть None.
There was a problem hiding this comment.
Pull request overview
PR исправляет несоответствия типизации/документации MAX API, где некоторые поля в апдейтах и сообщениях могут приходить null, и добавляет защиту от обращения к ним как к обязательным.
Changes:
MessageCallback.messageсделан опциональным и добавлены защиты при обогащении/ответе на callback.Message.bodyсделан опциональным, добавлены явные проверки перед операциями, требующимиbody.- В фильтре команд добавлена защита от
message.body is None.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 4 comments.
| File | Description |
|---|---|
maxapi/utils/updates.py |
Добавлены проверки на None при enrichment для callback/message, чтобы не падать на null полях. |
maxapi/types/updates/message_callback.py |
message стал Optional, обновлена логика получения chat_id и формирования callback-ответа. |
maxapi/types/message.py |
body стал Optional, добавлены защиты в reply/forward/edit/delete/pin. |
maxapi/filters/command.py |
Фильтр команд теперь корректно обрабатывает body=None. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| message_for_callback = MessageForCallback() | ||
| message_for_callback.text = new_text | ||
|
|
||
| attachments: List[Attachments] = [] | ||
| if self.message is not None and self.message.body is not None: | ||
| attachments = self.message.body.attachments or [] | ||
|
|
||
| message.text = new_text | ||
| message.attachments = self.message.body.attachments | ||
| message.link = link | ||
| message.notify = notify | ||
| message.format = format | ||
| message_for_callback.attachments = attachments | ||
| message_for_callback.link = link | ||
| message_for_callback.notify = notify | ||
| message_for_callback.format = format | ||
|
|
||
| return await self._ensure_bot().send_callback( | ||
| callback_id=self.callback.callback_id, | ||
| message=message, | ||
| message=message_for_callback, | ||
| notification=notification, | ||
| ) |
There was a problem hiding this comment.
MessageCallback.answer() при self.message is None формирует MessageForCallback с пустыми attachments и отправляет его в API. В кейсе удалённого исходного сообщения это, вероятно, должно быть либо запрещено (raise, если запрошено изменение сообщения), либо нужно отправлять только notification без поля message (передав message=None), чтобы не слать в API payload с null/пустыми значениями.
…лом. Проверяется, что методы reply, forward, edit, delete и pin вызывают ValueError при отсутствии тела сообщения.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…щения равно None. Фильтр должен возвращать False.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
closes #28