Отправка и получение сообщений
Как только вы запустите своего бота с помощью bot
, grammY предоставит вашим слушателям сообщения, которые пользователи отправляют вашему боту. grammY также предоставляет методы, позволяющие легко отвечать на эти сообщения.
Получение сообщений
Самый простой способ прослушивания сообщений — через bot
bot.on("message", async (ctx) => {
const message = ctx.message; // объект сообщения
});
2
3
Однако есть ряд и других вариантов.
// Обработка команд, например /start
bot.command("start", async (ctx) => {/* ... */});
// Сопоставляет текст сообщения со строкой или регулярным выражением.
bot.hears(/echo *(.+)?/, async (ctx) => {/* ... */});
2
3
4
5
Вы можете использовать автодополнение в редакторе кода, чтобы увидеть все доступные варианты, или посмотреть все методы класса Composer
.
Подробнее о фильтрации определенных типов сообщений с помощью
bot
..on()
Отправка сообщений
Все методы, которые могут использовать боты (важный список), доступны в объекте bot
.
// Отправить сообщению по ID пользователя 12345.
await bot.api.sendMessage(12345, "Привет!");
// В качестве опций вы можете передать объект options.
await bot.api.sendMessage(12345, "Привет!", {/* больше опций */});
// Просмотрите объект отправленного сообщения
const message = await bot.api.sendMessage(12345, "Привет!");
console.log(message.message_id);
// Получите информацию о самом боте.
const me = await bot.api.getMe();
// т.д.
2
3
4
5
6
7
8
9
10
11
12
Каждый метод принимает необязательный объект options типа Other
, который позволяет задать дополнительные параметры для ваших вызовов API. Эти объекты опций в точности соответствуют опциям, которые вы можете найти в списке методов по ссылке выше. Вы также можете использовать автодополнение в вашем редакторе кода, чтобы увидеть все доступные параметры, или посмотреть все методы класса Api
. На остальной части этой страницы показаны некоторые примеры.
Также посмотрите следующий раздел, чтобы узнать, как объект контекста слушателя делает отправку сообщений легким делом!
Отправка сообщений с ответом на сообщение
Вы можете использовать функцию Telegram reply-to, указав идентификатор сообщения, на которое нужно ответить, с помощью reply
.
bot.hears("ping", async (ctx) => {
// `reply` - это псевдоним для `sendMessage` в том же чате (см. следующий раздел).
await ctx.reply("pong", {
// `reply_parameters` задает фактическую функцию ответа.
reply_parameters: { message_id: ctx.msg.message_id },
});
});
2
3
4
5
6
7
Обратите внимание, что отправка сообщения через
ctx
не означает, что вы автоматически отвечаете на что-либо. Вместо этого вы должны указать.reply reply
для этого. Функция_parameters ctx
— это всего лишь псевдоним для.reply ctx
, см. следующий раздел..api .send Message
Параметры ответа также позволяют вам отвечать на сообщения в других чатах, а также цитировать части сообщения - или даже и то, и другое одновременно! Ознакомьтесь с документацией API бота документация параметров ответа.
Отправка сообщения с форматированием
Ознакомьтесь с разделом о параметрах форматирования в Telegram Bot API, написанным командой Telegram.
Вы можете отправлять сообщения с жирным или курсивным текстом, использовать URL-адреса и многое другое. Есть два способа сделать это, как описано в разделе о параметрах форматирования, а именно: Markdown и HTML.
Markdown
Смотрите https://
core .telegram .org /bots /api #markdownv2 -style
Отправьте сообщение с пометкой markdown в тексте и укажите parse
.
await bot.api.sendMessage(
12345,
"*Привет\\!* _Добро пожаловать_ в [grammY](https://grammy.dev)\\.",
{ parse_mode: "MarkdownV2" },
);
2
3
4
5
HTML
Отправьте сообщение с HTML-элементами в тексте и укажите parse
.
await bot.api.sendMessage(
12345,
'<b>Привет!</b> <i>Добро пожаловать</i> в <a href="https://grammy.dev">grammY</a>.',
{ parse_mode: "HTML" },
);
2
3
4
5
Отправка файлов
Более подробно работа с файлами описана в следующем разделе.
Принудительный ответ
Это может быть полезно, если ваш бот работает в режиме конфиденциальности в групповых чатах.
Когда вы отправляете сообщение, вы можете сделать так, чтобы клиент Telegram пользователя автоматически указывал это сообщение как ответ. Это означает, что пользователь будет отвечать на сообщение вашего бота автоматически (если только он не удалит ответ вручную). В результате ваш бот будет получать сообщения пользователей даже при работе в режиме конфиденциальности в групповых чатах.
Принудительно ответить можно следующим образом:
bot.command("start", async (ctx) => {
await ctx.reply(
"Привет! Я могу читать только те сообщения, в которых отвечают на мои сообщения!",
{
// Сделайте так, чтобы Telegram клиенты автоматически показывали пользователю интерфейс ответа.
reply_markup: { force_reply: true },
},
);
});
2
3
4
5
6
7
8
9