avgustov
@avgustov

Как получить список всех участников телеграм группы?

Всем добрый день, пробую получить список участников группы но в файл записывается только 200 штук, при щапуске скрипта идет просто бесконечно одна и таже строчка
[2024-11-20T19:00:26.495] [INFO] - [Sleeping for 9s on flood wait (Caused by channels.GetFullChannel)]

всю голову уже сломал просьба подсказать в каком направлении копать что бы решить задачку

Код скрипта

const { TelegramClient } = require("telegram");
const { StringSession } = require("telegram/sessions");
const input = require("input"); 
const fs = require("fs");

const apiId = 00000000; 
const apiHash = "ххххххххххххххххххххххххххххх"; 
const channelId = -100000000000;
const sessionFile = "session.txt"; 
const outputFile = "output.txt";

const sessionString = fs.existsSync(sessionFile) ? fs.readFileSync(sessionFile).toString() : "";

const client = new TelegramClient(new StringSession(sessionString), apiId, apiHash, {
  connectionRetries: 5,
});

(async () => {
  console.log("Запуск клиента...");
  // Авторизация пользователя
  await client.start({
    phoneNumber: async () => await input.text("Введите номер телефона (с кодом страны): "),
    password: async () => await input.text("Введите пароль от двухэтапной аутентификации (если есть): "),
    phoneCode: async () => await input.text("Введите код подтверждения из Telegram: "),
    onError: (err) => console.error("Ошибка авторизации:", err),
  });

  console.log("Авторизация завершена.");
  fs.writeFileSync(sessionFile, client.session.save());

  console.log("Получение участников канала...");

  let allParticipants = [];
  let offset = 0;
  let limit = 200; 
  let finished = false;

  while (!finished) {
    try {
      const participants = await client.getParticipants(channelId, { offset_id: offset, limit });
      if (participants.length === 0) {
        finished = true; 
      } else {
        allParticipants = allParticipants.concat(participants);
        offset = participants[participants.length - 1].id; 
      }
    } catch (error) {
      if (error.message.includes("Flood wait")) {
        const waitTime = parseInt(error.message.split(" ")[5], 10); 
        console.log(`Flood wait detected. Sleeping for ${waitTime} seconds.`);
        await new Promise(resolve => setTimeout(resolve, waitTime * 1000));
      } else {
        console.error("Ошибка при получении участников:", error);
        break;
      }
    }
  }

  console.log(`Найдено ${allParticipants.length} участников.`);

  const participantData = allParticipants.map((user) => {
    return `${user.id} | ${user.firstName} | ${user.lastName || ''} | ${user.username || ''} | ${user.phone || ''}`;
  }).join("\n");

  fs.writeFileSync(outputFile, participantData);

  console.log(`Список участников сохранён в файл: ${outputFile}`);
  await client.disconnect();
  console.log("Клиент отключён.");
})();

  • Вопрос задан
  • 38 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы