Отправка сообщений⚓︎
Для отправки сообщения боту необходимо знать chat_id чата (личный, групповой, канал).
Как получить chat_id?⚓︎
Личные чаты (на двоих, P2P)⚓︎
Для получения chat_id личного чата можно использовать метод bot.create_personal_chat(user_id) Если личный чат с пользователем ещё не создан, сервер создаст его. Если чат уже существует, сервер вернёт существующий chat_id.
chat = await bot.create_personal_chat(user_id="john_doe@video.example.com")
await bot.send_message(
chat_id=chat.chat_id,
text="Hello!",
)
Групповые чаты и каналы⚓︎
С групповыми чатами и каналами нужно быть осторожнее. Методы создания групповых чатов и каналов каждый раз создают новый чат:
chat = await bot.create_group_chat(title="Support")
channel = await bot.create_channel(title="News")
Если вызвать такой метод повторно с тем же названием, будет создан ещё один чат или канал с таким же title. Поэтому после создания группового чата или канала лучше сохранить его chat_id в базе данных, файле конфигурации или другом постоянном хранилище.
А что делать, если чат уже существует? Как получить chat_id?
Поиск существующего чата⚓︎
Список доступных чатов можно получить методом bot.get_chats():
Метод возвращает GetChatsResponse с параметром list в котором хранится список чатов. Вы можете найти нужный чат, например по названию, и получить его chat_id:
После того как нужный chat_id найден, его также рекомендуется сохранить, чтобы не искать чат повторно при каждом запуске приложения.
Получение chat_id через входящее сообщение⚓︎
Ещё один простой способ — написать сообщение в нужный чат и обработать его ботом. В обработчике можно вывести message.chat_id:
from trueconf import Router
from trueconf.types import Message
router = Router()
@router.message()
async def print_chat_id(message: Message):
print(message.chat_id)
Этот способ удобен для групповых чатов и каналов: достаточно добавить бота в нужный чат, отправить сообщение и посмотреть chat_id в консоли.
Текстовые сообщения⚓︎
Для отправки текстового сообщения используйте метод bot.send_message(...):
Если сообщение отправляется из обработчика входящего сообщения, можно использовать shortcut-методы объекта Message, например message.answer(...) или message.reply(...). Они автоматически используют message.chat_id, поэтому его не нужно передавать вручную. Подробнее см. раздел Шорткаты.
Ответ на сообщение⚓︎
Если нужно отправить ответ на конкретное сообщение, передайте идентификатор исходного сообщения в параметр reply_message_id:
Такой способ позволяет отправлять обычные сообщения и ответы через единый API.
Пересылка сообщений⚓︎
Для пересылки уже существующего сообщения используйте bot.forward_message(...):
Где:
chat_id— идентификатор чата, куда нужно переслать сообщение;message_id— идентификатор сообщения, которое нужно переслать.
Форматирование текста⚓︎
Сообщения можно отправлять как обычный текст, HTML или Markdown, передавая parse_mode:
from trueconf.enums import ParseMode
await bot.send_message(
chat_id="chat_id",
text="<b>Important</b>",
parse_mode=ParseMode.HTML,
)
Для удобного построения форматированного текста в библиотеке есть модуль trueconf.utils.formatting. Он позволяет не писать HTML или Markdown вручную, а собирать сообщение из классов:
from trueconf.enums import ParseMode
from trueconf.utils.formatting import (
Bold,
Italic,
Link,
Mention,
Text,
)
content = Text(
Bold("Important"),
" message for ",
Mention("John Doe", user_id="john_doe@video.example.com"),
"\n",
Link("Open website", url="https://trueconf.com"),
)
await bot.send_message(
chat_id="chat_id",
text=content.as_html(),
parse_mode=ParseMode.HTML,
)
Модуль поддерживает:
Bold(...)Italic(...)Underline(...)Strikethrough(...)Link(...)Mention(...)AllMention()Text(...)
Ограничения длины сообщения⚓︎
TrueConf Server ограничивает длину текстового сообщения до 4096 символов.
Если сообщение превышает лимит, рекомендуется использовать helper-функцию safe_split_text(...), которая безопасно разбивает длинный текст с учётом HTML/Markdown-разметки:
from trueconf.utils import safe_split_text
chunks = safe_split_text(long_text)
for chunk in chunks:
await bot.send_message(
chat_id="chat_id",
text=chunk,
parse_mode=ParseMode.HTML,
)
Подробнее об ограничениях см. в разделе Ограничения.
Shortcut-методы
В обработчиках сообщений часто удобнее использовать message.answer(...), message.reply(...) и другие shortcut-методы вместо прямого вызова bot.send_message(...). Подробнее см. раздел Шорткаты.
Отправка файлов
Этот раздел посвящён текстовым сообщениям. Для отправки документов, изображений, видео, голосовых сообщений и других вложений см. раздел Работа с файлами.