Работа с файлами⚓︎
TrueConf Chatbot Connector не накладывает ограничений на загрузку файлов на сервер. Однако, начиная с версии TrueConf Server 5.5.2 и выше, администратор может настроить ограничения на максимальный размер файла и допустимые форматы (расширения).
Библиотека python-trueconf-bot предоставляет удобные средства для работы с файлами: как для отправки, так и для загрузки. Чтобы отправить файл, используйте один из подклассов InputFile, в зависимости от источника данных.
Доступны три встроенных класса для передачи файлов:
- FSInputFile — загрузка файла с локальной файловой системы
- BufferedInputFile — загрузка из байтового буфера
- URLInputFile — загрузка файла с удалённого URL
Все классы расположены в модуле trueconf.types.
Вы можете использовать эти классы в методах:
- bot.send_document(...)
- bot.send_photo(...)
- bot.send_sticker(...)
Как отправить файл?⚓︎
🗂️ FSInputFile⚓︎
Используется для загрузки файлов с локальной файловой системы. Рекомендуется использовать, когда у вас есть путь к файлу.
from trueconf.types import FSInputFile
await bot.send_document(
chat_id="a1b2c3d4",
file=FSInputFile("docs/report.pdf"),
caption="📄 Annual report for **2025**",
parse_mode=ParseMode.MARKDOWN
)
await bot.send_sticker(
chat_id="a1b2c3d4",
file=FSInputFile("stickers/cat.webp")
)
🧠 BufferedInputFile⚓︎
Используется, когда файл уже находится в памяти (например, получен из API, загружен в память (ОЗУ) или из базы данных).
from trueconf.types import BufferedInputFile
image_bytes = open("image.jpg", "rb").read()
preview_bytes = open("preview.jpg", "rb").read()
await bot.send_photo(
chat_id="a1b2c3d4",
file=BufferedInputFile(
file=image_bytes,
filename="image.jpg"
),
preview=BufferedInputFile(
file=preview_bytes,
filename="preview.jpg"
),
caption="This is my photo"
)
Также доступен удобный метод from_file():
🌐 URLInputFile⚓︎
Если файл находится в интернете, вы можете указать ссылку и бот скачает его самостоятельно.
from trueconf.types import URLInputFile
file = URLInputFile(
url="https://example.com/image.png",
filename="image.png", # можно опустить — будет определено автоматически
)
Рекомендации⚓︎
- MIME-тип: определяется автоматически. Если установлен пакет python-magic, MIME-тип будет вычислен по содержимому файла (байтам), что значительно точнее, чем определение по расширению. Установите его с зависимостями так:
- clone(): каждый тип файла поддерживает метод
.clone()— он создаёт новую копию объекта с другимid(object).
Как скачать файл?⚓︎
Для удобной загрузки входящих медиафайлов, таких как изображения (message.photo) или документы (message.document), библиотека предоставляет шорткат-метод .download(). Это синтаксический сахар над методом bot.download_file_by_id(...), упрощающий работу с вложениями.
Рекомендуется использовать именно .download(), так как он:
- автоматически получает file_id из объекта;
- использует текущий экземпляр бота;
- минимизирует количество кода.
@router.message(F.document)
async def handle_doc(msg: Message):
await msg.document.download(dest_path="document.pdf")
Notes
Путь dest_path может быть как относительным, так и абсолютным.
Также доступен метод download_file_by_id(...), если требуется более гибкий контроль: