Как узнать, какое сообщение последнее пришло от отправителя в Телеграм?

Как определить, когда загрузка нескольких файлов в сцене с использованием библиотеки nestjs-telegraf, если телеграм разбивает файлы на отдельные сообщения?
  • 1 ноября 2023 г. 0:59
Ответы на вопрос 1
1. Для определения последнего сообщения от отправителя в Telegram вы можете использовать API Telegram Bot. 

Следующие шаги помогут вам достичь этой цели:

1. Сначала вам нужно зарегистрировать бота и получить его токен от BotFather в Telegram.
2. Установите необходимые зависимости nestjs-telegraf:

   ```bash
   npm install nestjs-telegraf
   ```

3. Создайте новый файл `telegram-bot.module.ts` для настройки команд и контроллеров вашего бота:

   ```typescript
   import { Module } from '@nestjs/common';
   import { TelegrafModule } from 'nestjs-telegraf';
   import { MyBot } from './my-bot';

   @Module({
     imports: [
       TelegrafModule.forRoot({
         token: 'YOUR_TELEGRAM_BOT_TOKEN',
       }),
     ],
     providers: [MyBot],
   })
   export class TelegramBotModule {}
   ```

4. Создайте файл `my-bot.ts`, который будет содержать логику обработки сообщений:

   ```typescript
   import { Injectable } from '@nestjs/common';
   import { On, TelegrafContext, ContextMessageUpdate } from 'nestjs-telegraf';

   @Injectable()
   export class MyBot {
     @On('message')
     async handleNewMessage(ctx: TelegrafContext) {
       // Обработка всех входящих сообщений
       // ...
       // Вы можете проверить отправителя с помощью ctx.from
       // Или получить текст сообщения с помощью ctx.message.text
     }
   }
   ```

5. Зафиксируйте ваш модуль в `AppModule`:

   ```typescript
   import { Module } from '@nestjs/common';
   import { TelegramBotModule } from './telegram-bot.module';

   @Module({
     imports: [TelegramBotModule],
   })
   export class AppModule {}
   ```

6. Запустите ваше приложение Nest с помощью `nest start`.

Теперь вы можете получать все входящие сообщения от отправителя с помощью обработчика `handleNewMessage` в `MyBot`. Вы можете проверить отправителя и определить последнее сообщение от него.

2. Чтобы определить, когда загрузка нескольких файлов завершена в сцене с использованием библиотеки nestjs-telegraf, можно использовать следующий подход:

- В Telegram, когда пользователь отправляет файлы, Telegram отправляет в нескольких сообщениях отдельные объекты `message` для каждого файла. Документация Telegram API подробно описывает этот процесс.

- В вашем `MyBot` нужно создать флаг для отслеживания загрузки файлов. 

  ```typescript
  export class MyBot {
    private isMultipleFilesUploading = false;

    @On('message')
    async handleNewMessage(ctx: TelegrafContext) {
      // Обработка всех входящих сообщений
      // ...

      if (ctx.message.document) {
        this.isMultipleFilesUploading = true;
        // Если это файл, установите флаг isMultipleFilesUploading в true
        // Логика для загрузки файлов
        // ...
      }

      if (this.isMultipleFilesUploading && !ctx.message.document) {
        this.isMultipleFilesUploading = false;
        // После загрузки всех файлов сбрасывается флаг isMultipleFilesUploading в false
        // Логика для обработки завершения загрузки файлов
        // ...
      }
    }
  }
  ```

В данном коде `isMultipleFilesUploading` устанавливается в `true`, когда пользователь начинает загрузку файлов, и сбрасывается в `false`, когда все файлы загружены. После установки флага `isMultipleFilesUploading` в `true`, вы можете написать логику для обработки загрузки файлов. После загрузки всех файлов вы можете написать логику для обработки
Похожие вопросы