Как при помощи телеграмм бота получить id группы, если пользователь перешлет сообщение из этой группы?

Как настроить телеграмм бота таким образом, чтобы при пересылке сообщения с группы пользователь получал id этой группы? Пробовал репост сообщения с группы, но получается информация только о пользователе, который его переслал, без информации о группе. Есть ли какие-то идеи?

Мне пришла мысль, чтобы пользователь добавил бота в группу и отправил какой-то временный код от бота в группу. Как это можно сделать? На данный момент бот написан на ноде.
  • 2 января 2024 г. 13:47
Ответы на вопрос 1
Чтобы получить ID группы, когда пользователь перешлет сообщение из этой группы, вам нужно использовать свойства объекта `Message`, которое вы получите при обработке пересланного сообщения.

Воспользуйтесь следующим кодом:

```javascript
bot.on('message', (msg) => {
  if (msg.forward_from_chat && msg.chat.type === 'private') {
    const groupId = msg.forward_from_chat.id;
    console.log('ID группы:', groupId);
  }
});
```

В данном примере мы проверяем, если у `msg` есть свойство `forward_from_chat` (это означает, что сообщение было переслано из группы), и `msg.chat.type` равен `'private'` (это означает, что пересланное сообщение было отправлено в личные сообщения боту). Если условия выполняются, то в переменной `groupId` будет храниться ID группы.

Чтобы настроить бота таким образом, чтобы при пересылке сообщения с группы пользователь получал ID этой группы, можно воспользоваться следующим подходом:

1. Пользователь добавляет вашего бота в группу.
2. Бот отслеживает команду `start`. При получении этой команды в группе, бот сохраняет ID группы в базе данных или в каком-либо другом хранилище.
3. Пользователь пересылает сообщение из группы боту в личные сообщения.
4. Бот обрабатывает пересланное сообщение и использование описанного выше кода, получает ID группы.
5. Бот отправляет ID группы пользователю в ответ.

Приведенный выше подход можно реализовать на Node.js с использованием фреймворка Telegraf. Вот пример кода:

```javascript
const Telegraf = require('telegraf');
const bot = new Telegraf('YOUR_BOT_TOKEN');

const groupIds = new Map();

bot.command('start', (ctx) => {
  const groupId = ctx.message.chat.id;
  groupIds.set(groupId, true);
  ctx.reply('Группа добавлена.');
});

bot.on('message', (ctx) => {
  if (ctx.message.forward_from_chat && ctx.message.chat.type === 'private') {
    const groupId = ctx.message.forward_from_chat.id;
    if (groupIds.has(groupId)) {
      ctx.reply(`ID группы: ${groupId}`);
    } else {
      ctx.reply('Данная группа не была добавлена.');
    }
  }
});

bot.launch();
```

В данном примере бот использует Map для хранения ID групп, которые были добавлены пользователем командой `/start` в группе. При получении пересланного сообщения в личные сообщения, бот проверяет, есть ли ID группы в Map. Если да, то он отправляет ID группы пользователю.
Похожие вопросы