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("Клиент отключён.");
})();