Список изменений⚓︎
1.5.4⚓︎
Добавлено:
- Свойство
Message.forwarded_message— оригинал пересланного сообщения - Параметр
max_sizeвURLInputFile.read()— обрывает загрузку сFileSizeTooLargeError, если содержимое превышает лимит
Исправлено:
- Разбор пересланных сообщений (тип
201):ForwardMessageнаследуется отMessageи получает все его параметры —text,voice,document,reply_message,bindи другие; вложенные пересылки разворачиваются рекурсивно. Пересланное голосовое сообщение больше не «роняет» обновление сInvalidFieldValue getChatHistory: параметрfromMessageIdбольше не отправляется какnull— это вызывало ошибку сервера399 WRONG_PAYLOAD_FORMATURLInputFile: размер файла вычисляется по фактически скачанному телу. Источники, отдающие новый файл на каждый запрос (например, снимки с камер), приводили к400 Bad Request: размер определялся по заголовкам одного ответа, а отправлялось тело другогоURLInputFile: URL с редиректами и серверы, отвергающие HEAD-запросы, обрабатываются корректно; ответ с ошибкой (например, 404) больше не принимается за файл с размером error-страницы
Изменено:
URLInputFile.prepare()читает только HTTP-заголовки и не скачивает тело;Content-Lengthсчитается оценкой. Точный размер становится известен после скачивания, и именно он передаётся серверу- Один объект
URLInputFileсоответствует одному содержимому: повторные отправки иclone()используют уже скачанные байты. Нужен свежий файл (например, новый кадр камеры) — создайте новый объект read(max_size=...)обрывает загрузку при превышении лимита; лимитbot.max_file_sizeтеперь применяется и к URL-файлам- Гарантия полноты метаданных (непустое имя + размер) перенесена в сами классы файлов:
URLInputFileразрешает имя вprepare()(иначеFileUploadError),BufferedInputFileиFSInputFileотклоняют пустоеfile_name(TypeError/ValueError) Message.boxстал опциональным — у пересланного сообщения нетbox
1.5.3⚓︎
Исправлено:
- Отмена задачи подключения в Python 3.10: внешняя отмена (
task.cancel()) теперь корректно пробрасывается вызывающему коду - Зависимость
httpx2возвращена к>=2.7.0(было>=2.13.0) - Тесты подключены к GitHub Actions; обновлён CI: действия переведены на Node 24,
setup-uvзафиксирован на v10.2.0, добавлен кэш
1.5.2⚓︎
Добавлено:
- Объявлена поддержка Python 3.14
1.5.1⚓︎
Добавлено:
- Проверка совместимости версий: TrueConf Server 5.5.3–5.5.5 требует
python-trueconf-bot >=1.2.1,<1.5.0(с подсказкой по установке)
Исправлено:
- Таблица совместимости версий в README
1.5.0⚓︎
🚀 Крупное обновление! Это не только набор новых возможностей, но и масштабная работа над стабильностью.
Tip
Поддержка Python 3.10 прекращается 31.10.2026 — вместе с окончанием её официальной поддержки Python Software Foundation.
Добавлено:
- Поддержка входящих голосовых сообщений с типом
MessageType.VOICE_MESSAGE(205) - Поддержка инлайн-кнопок через
InlineKeyboardMarkup/InlineKeyboardButton(действия: команда, URL, сообщение, копирование). Требуется TrueConf Server 5.5.6 и клиентские приложения TrueConf для Windows, macOS и Linux версии 8.6.0, TrueConf для Android 3.3.0, TrueConf для iOS 4.2.0 - Callback-запросы для обработки нажатий на кнопки: обработчик
@router.callback_query(), шорткатыcallback_query.edit_message(...)иcallback_query.answer(...) - Кнопки с
wait_reply=Trueи методanswerCommandвременно вызываютNotImplementedError: функциональность поддерживается сервером TrueConf, но ожидает поддержки со стороны клиентских приложений. После её появления будет выпущен новый релиз, снимающий это ограничение - Объект чата: поле
chatс модельюChatвMessageиLastMessage - Ответы на сообщения: во входящем сообщении-ответе появился
Message.reply_messageс содержимым исходного сообщения, на которое дан ответ - Системные сообщения: модель
SystemMessageи обработчик@router.system_message() - Ответ с цитатой через параметр
quoteвMessage.reply()иBot.send_message(), а также свойствоMessage.quote - Индикатор активности в чате: метод
Bot.send_chat_activity(), перечислениеChatActivityи контекстный менеджерChatActivitySender.typing(...) - Ограничение размера файла, загружаемого в память, параметром
max_in_memory_download_size - Узел
LineBreakвtrueconf.utils.formatting(<br>для HTML,\nдля Markdown) - Шорткаты
message.locationдля геолокации иmessage.contactдля контактов (vCard-файлы и trueconf-ссылки) - Авторизация через OAuth2 с помощью
Bot.from_oauth()для серверов с отключённой поддержкой авторизации через логин и пароль. Требуется TrueConf Server 5.5.3+ - Новые исключения:
WSConnectionError,InMemoryDownloadLimitExceededError,FileUploadError,OAuthMissingScopeError,PasswordAuthDisabledError - Текстовые расшифровки кодов ошибок API (399, 400–408) в
ApiError.message(). Коды 400–408 относятся к файлам и заменяют один общий код 310 («ошибка при отправке») — теперь понятно, что именно пошло не так при отправке - Поле
caption_message_idвSendFileResponse— ID сообщения с подписью, отправленного вместе с файлом; позволяет изменить подпись файла черезedit_message(...) - Кастомный
User-Agentво всех запросах библиотеки в форматеpython-trueconf-bot/<version> (Python/<version>; <OS>/<release>), например:python-trueconf-bot/1.5.0 (Python/3.12.4; Darwin/24.0.0)
Изменено:
- Узел
Underlineвtrueconf.utils.formattingтеперь рендерится и в Markdown (__текст__) — ранее подчёркивание работало только в HTML-разметке - Скачивание файлов: параметр
file_pathзадаёт точный путь, родительские каталоги создаются автоматически - Параметр
mimetypeпереименован вmime_type - Поведение
ws_max_retries/ws_max_delay: после исчерпания попыток подключение завершается сWSConnectionError - Завершение бота ожидает запущенные обработчики и закрывает WebSocket-транспорт; в
shutdown()добавлен параметрtimeout - HTTP-клиент переведён с
httpxнаhttpx2
Исправлено:
- Разбор системных сообщений в истории чата и ответах API
- Ошибки загрузки файлов: вызывающий код получает
FileUploadErrorс исходной причиной - Бесконечное переподключение WebSocket после исчерпания лимита попыток
- При остановке бота WebSocket-соединение не закрывалось — теперь сессия корректно закрывает подключённый сокет
- URL скачивания и токены больше не попадают в лог целиком: у URL удаляется query-строка (
https://server/.../files/download?token=...→https://server/.../files/download), а токен в debug-логах обрезается до последних 30 символов - Получение токена в
Bot.from_credentials()теперь учитывает параметрыhttpsиweb_port— ранее токен запрашивался по https:443, даже если сервер работает по http или на нестандартном порту
Устарело:
- Свойство
Message.chat_id— используйтеmessage.chat.chat_id - Параметр
dest_path— используйтеfile_path(удаление в версии 2.0) - Параметр
mimetype— используйтеmime_type
1.4.4⚓︎
Исправлено:
- Исправлено падение библиотеки (бота), возникавшее, когда
LastMessageсодержал уведомление об изменении аватара чата (#15).
1.4.3⚓︎
Исправлено:
- Исправлена проверка версии сервера. Теперь проверка выполняется сначала через API, а в случае ошибки — на основе статуса службы TrueConf.
1.4.2⚓︎
Исправлено:
- Исправлено падение бота при пустом поле версии сервера.
1.4.1⚓︎
Добавлено:
- Добавлен новый параметр
timeoutв классBotи методBot.from_credentials().
Исправлено:
- Системные события (например,
ChangedFileUploadLimits) не содержатchat_idилиauthor, из-за чегоDefaultKeyBuilderвызывалRuntimeError. ТеперьFSMMiddlewareпроверяет наличиеchat_id/user_idперед построением FSM-контекста. Системные события проходят без FSM-контекста.
Рефакторинг:
- Улучшена логика таймаутов для загрузки и скачивания файлов:
- убран жёстко заданный
chunk_sizeизhttpx.streamдля предотвращения ложногоReadTimeoutна медленных сетях; aiohttp.ClientTimeoutнастраивается черезsock_readвместоtotal, чтобы длительные загрузки файлов не замирали;- строгие типы
int | floatдля таймаутов, убраны лишние проверкиNone; - обновлены docstring методов, отражающие адаптивное поведение таймаутов.
- убран жёстко заданный
1.4.0⚓︎
Добавлено:
- FSM (Finite State Machine) — механизм конечных автоматов состояний. Позволяет реализовать пошаговые диалоги: анкеты, формы, мастер-настройки. Состояния объявляются декларативно через
StatesGroup/State, данные хранятся вFSMContext. Поддерживает вложенные группы, несколько стратегий хранения и фильтрацию по состоянию черезStateFilter. Подробнее: FSM. - Middleware — прослойка для обработки событий до и после хендлеров. Позволяет логировать, блокировать, проверять доступ и модифицировать данные. Поддерживает два типа: outer (до фильтров) и inner (после фильтров). Подробнее: Middleware.
- Параметр
skip_self_messagesвBot(). По умолчаниюTrue— бот автоматически игнорирует сообщения, отправленные самим собой. Отключается параметромskip_self_messages=False. - Поле
Message.reply_messageс полным сообщением, на которое был отправлен ответ. - Модель
SystemMessageдля системных Envelope в live-потоке и истории чата, а также обработчик@router.system_message().
Исправлено:
- Поле
for_allнотификации очистки истории теперь сохраняет серверный типbool.
1.3.0⚓︎
Добавлено:
- Механизм health-check для отслеживания состояния подключения бота:
- push-модель через callback
Bot(on_health_check=func_callback), который вызывается при изменении статуса подключения; - pull-модель через метод
bot.health_check(), который возвращает текущее состояние бота. - статусы
connected,authorizedиdisconnected.
- push-модель через callback
- Поддержка
bot.me_idдля хранения идентификатора авторизованного бота. - Шорткат
message.mention, который возвращаетTrue, если в сообщении упомянут текущий бот или используется@all. - Модуль форматирования
trueconf.utils.formattingдля удобного построения HTML/Markdown-сообщений через классы:Text,Bold,Italic,Underline,Strikethrough,Link,Mention,AllMention. - Зависимость
truststoreдля работы с системным хранилищем доверенных сертификатов. - Тип
SSLVerifyдля унифицированной типизации параметраverify_ssl:bool | str | ssl.SSLContext. - Свойство
bot.me_chatкак новое имя для полученияchat_idчата "Избранное".
Изменено:
- Обновлена логика работы
verify_ssl:verify_ssl=Trueиспользует системное хранилище доверенных сертификатов черезtruststore;verify_ssl=Falseотключает проверку сертификата;verify_ssl="/path/to/ca.pem"использует пользовательский CA bundle;verify_ssl=ssl.SSLContext(...)использует переданный SSL-контекст.
- Обновлена SSL-логика для WebSocket-подключений: теперь используется единый
self.ssl_context, созданный черезbuild_ssl_context(...). - Обновлено логирование при инициализации бота: теперь в лог выводится человекочитаемая информация о SSL-контексте.
Исправлено:
- Обработка неполной цепочки сертификатов заканчивалась неудачей. Теперь цепочка сертификатов проверяется успешно за счёт возможности использовать системное хранилище через
truststoreили передавать собственный SSL-контекст.
Устарело:
- Асинхронное свойство
bot.me, которое возвращаетchat_idчата "Избранное", помечено как устаревшее. Используйтеawait bot.me_chatвместо него.
Документация:
- Интегрирован ИИ-ассистент (виджет чата Context7): интерактивный помощник для консультаций по коду и документации.
- Добавлен новый раздел документации Отправка сообщений с описанием:
- получения
chat_id; - отправки текстовых сообщений через
bot.send_message(...); - отправки ответа через
reply_message_id; - пересылки сообщений через
bot.forward_message(...); - форматирования текста через
trueconf.utils.formatting; - ограничения длины сообщения в 4096 символов и использования
safe_split_text(...).
- получения
- Добавлено описание health-check в документацию:
- push-модель через callback;
- pull-модель через
bot.health_check(); - пример совместного использования с HTTP health endpoint.
- Добавлены и обновлены docstring для модуля форматирования,
Message.mention,verify_sslи health-check API. - Добавлены новые разделы: Шорткаты, Ограничения, Formatting, Exceptions.
1.2.3⚓︎
Добавлено:
- Добавлен таймаут ожидания ответа сервера — 10 секунд. Если ответ не будет получен за это время, будет вызвано исключение
asyncio.TimeoutError:Request to {self.__api_method__} timed out after {timeout}s(#12).
Исправлено:
- Исправлены ситуации, когда Mashumaro не мог распарсить ответ, из-за чего приложение могло завершиться с ошибкой (#8, #11).
1.2.2⚓︎
Исправлено:
- Исправлена отсутствующая зависимость: пакет
packaging, необходимый для проверки версии библиотеки при запуске бота.
1.2.1⚓︎
Добавлено:
- Добавлена поддержка TrueConf Server 5.5.4.
- Добавлен флаг
receive_system_messagesвBot()иBot.from_credentials()для включения или отключения получения системных сообщений. - Добавлен новый метод
bot.get_chat_participant(), который заменяетbot.has_chat_participant().
Исправлено:
- Исправлена поддержка TrueConf Server 5.5.3+. Удалена лишняя проверка версии, из-за которой код не запускался при использовании версии библиотеки 1.2.0.
- Исправлены ссылки в документации на
llms.txtиllms-full.txt.
Изменено:
- При получении информации о файле через
bot.get_file_info(file_id=...)ответ теперь возвращает полеfile_idвместоinfo_hash.
Устарело:
- Метод
bot.has_chat_participant()помечен как устаревший. Используйтеbot.get_chat_participant()вместо него.
1.2.0⚓︎
Добавлено:
- Добавлена поддержка TrueConf Server 5.5.3, включая:
- изменение названия чата с помощью
bot.edit_chat_title(...); - изменение аватара чата с помощью
bot.edit_chat_avatar(...); - очистку истории чата с помощью
bot.clear_chat_history(...); - получение лимитов файлового хранилища с помощью
bot.get_file_info_upload_limits(...); - новый подход к передаче файлов, при котором параметр
file_nameтеперь обязателен дляFSInputFile(...)и других методов загрузки файлов.
- изменение названия чата с помощью
- Добавлено кэширование настроек лимитов файлового хранилища. Эти настройки теперь используются для предварительной проверки перед загрузкой, и библиотека вызывает исключение, если файл не соответствует заданным ограничениям.
- Добавлены библиотеки
python-magicиfiletypeдля более надежного определения типа файла по magic numbers (байтовым сигнатурам). - Добавлено автоматическое добавление расширения файла, если оно отсутствует в имени файла.
- Улучшена стабильность WebSocket-соединения: добавлены экспоненциальная задержка и настраиваемая стратегия повторных подключений. Теперь можно управлять максимальным количеством попыток повторного подключения через
ws_max_retriesи максимальной задержкой между попытками черезws_max_delay(#6). - Добавлена проверка версии TrueConf Server. Теперь библиотека вызывает
RuntimeErrorс инструкциями по обновлению, если обнаружена несовместимая версия сервера. - Добавлена утилита
safe_split_textдля безопасного разделения длинных сообщений, превышающих 4096 символов, на части длиной до 4096 символов. Это особенно полезно для ИИ-агентов, которые генерируют длинные ответы. - Добавлены сборки документации, удобные для ИИ:
llms.txtиllms-full.txt. - Добавлено и расширено логирование.
Исправлено:
- Исправлена проблема с отправкой стикеров в TrueConf Server 5.5.3+.
- Исправлена проблема #7.
- Исправлены различные мелкие ошибки и внесены общие улучшения.
Устарело:
- Параметры
filenameиmimetypeтеперь помечены как устаревшие. - Перейдите на новые имена параметров в формате
snake_case, так как старые параметры будут удалены в будущих версиях.
1.1.10⚓︎
Исправлено:
- Исправлено отсутствие параметра
file_idвSendFileResponse.
1.1.9⚓︎
Добавлено:
- Добавлена проверка версии TrueConf Server. Теперь библиотека вызывает
RuntimeErrorс инструкциями по обновлению, если обнаружена несовместимая версия сервера.
1.1.8⚓︎
Исправлено:
- Добавлена поддержка
verify_sslдля WSS-соединений. Ранее проверка SSL безусловно отключалась при включенномhttps; теперь она корректно управляется флагом конфигурации.
1.1.7⚓︎
Добавлено:
- Добавлены шорткаты
reply_photo,reply_documentиreply_stickerв классMessage. - Добавлена поддержка
reply_message_idв нескольких методах и в классеSendFile.
Исправлено:
- Исправлено значение
quote_fields=Falseвaiohttp.FormData. - Установлено значение по умолчанию
Noneдляlast_messageвGetChatByIdResponse(исправляет #4).
Устарело:
reply_messageтеперь помечен как устаревший. Используйтеreply_message_idвместо него.
1.1.6⚓︎
Рефакторинг:
- Локальное использование
verify_sslзаменено наself.verify_sslв методах класса.
1.1.5⚓︎
Исправлено:
- Предотвращено зависание
run(), если задача подключения завершается с ошибкой. ApiErrorExceptionи другие ошибки теперь корректно передаются вызывающему коду.
1.1.4⚓︎
Исправлено:
- Удалено поле
chat_idизRemoveChatResponse(#1).
1.1.3⚓︎
Исправлено:
- Исправлено распространение событий для нескольких роутеров и подроутеров.
1.1.2⚓︎
Добавлено:
- Обновлен статус разработки.
- Добавлен
typing_extensionsв зависимости. - Добавлен и обновлен бейдж загрузок.
- Добавлены импорты
SelfиUnpackизtyping_extensions.
Исправлено:
- Исправлена неработающая функциональность шорткатов
Message.
1.1.1⚓︎
Добавлено:
- Новые классы для работы с файлами:
FSInputFile,BufferedInputFile,URLInputFile. Подробнее — в документации. - Поддержка отображения истории сообщений
display_history = Trueпри добавлении пользователя в групповой чат или канал. - Поддержка запроса и события для:
- изменения роли в групповом чате или канале (запрос, уведомление);
- создания чата “Избранное” (запрос, уведомление).
- Возможность отправки файлов с подписью (
caption). - Шорткат
.save_to_favorites()для быстрого сохранения сообщения в чат "Избранное". - Асинхронное свойство
await bot.me, возвращающееchat_idчата "Избранное".
Исправлено:
- Стикеры, отправленные через
bot.send_sticker(), отображались с фоном из-за некорректного MIME-типа. - Метод
.remove_participant_from_chat()не работал при указании неполного TrueConf ID. - Ошибка при распаковке списка участников из-за некорректного алиаса.
- Иногда при получении токена с помощью
.from_credentials()возникала ошибка400 Bad Requestsпри использовании цифрового (digit) пароля.
Изменено:
- Свойство
bot.server_nameстало асинхронным. Используйте его какawait bot.server_name.
1.0.0⚓︎
🎉 Первый релиз!
- Стабильная версия библиотеки python-trueconf-bot.
- Поддержка всех основных методов API TrueConf ChatBot.
- Псевдонимы и сочетания клавиш в стиле aiogram (message.answer, message.reply и т. д.).
- Асинхронная передача данных по протоколу WebSocket.
- Работа с файлами (отправка и загрузка).
- Документация: trueconf.github.io/python-trueconf-bot/
- PyPI: pypi.org/project/python-trueconf-bot/