@k1nster

Как узнать активность человека в telegram?

Здравствуйте!

Я пытаюсь создать Telegram-бота на PHP, который позволяет получить информацию о последней активности пользователя в Telegram. Я уже создал бота, получил его токен и добавил его в группу в качестве администратора. Однако я не могу понять, как получить информацию о последней активности пользователя.

Попытался использовать методы "getChatMembers" и "getChatMember", но не получил желаемых результатов. userID просто не выводятся и не сохраняются.

На сколько я знаю, телеграмм даёт возможность ботам с правами администраторов, получать userID всех участников группы/канала/чата. Но вот как это реализовать, информации не нашёл. (userID нужен дабы проверять последнюю активность человека в телеграмм).

Можете ли вы поделиться примером кода или объяснить, как правильно получить информацию о последней активности пользователя в Telegram с помощью Telegram-бота на PHP?

Заранее спасибо за вашу помощь!

Ниже предоставлен кусок кода, с помощью которого пытался извлечь userID людей, дабы проверить lastActivityDate:
elseif (is_numeric($message)) {
    file_put_contents($daysFile, $message);

    $parsedLink = file_get_contents($linkFile);
    $channelLink = trim($parsedLink);  // Удаляем лишние пробелы и переносы строк

    $channelUsername = '@' . ltrim(parse_url($channelLink, PHP_URL_PATH), '/'); // Преобразовываем ссылку
    $channelLink = 'https://api.telegram.org/bot' . TOKEN . '/getChat?chat_id=' . urlencode($channelUsername); // Отправляем запрос, и получаем ID чата в который был добавлен бот.

    $chatInfo = sendTelegram('getChat', ['chat_id' => $channelUsername]);
    $chatId = $chatInfo['result']['id'];
    file_put_contents($chatIdFile, $chatId);
    
    if(isBotAdmin($chatId, TOKEN)){

        // Получаем общее количество подписчиков на канале
        $getChatMembersCountResponse = sendTelegram('getChatMembersCount', ['chat_id' => $channelUsername]);
        $totalSubscribers = $getChatMembersCountResponse['result'];

        // Получаем количество администраторов и ботов на канале
        $getChatAdministratorsResponse = sendTelegram('getChatAdministrators', ['chat_id' => $channelUsername]);
        $adminsCount = count($getChatAdministratorsResponse['result']);

        // Получаем название канала
        $channelName = basename($channelUsername);

        $membersResponse = sendTelegram('getChatMembers', ['chat_id' => $chatId]);
        $members = $membersResponse['result'];

        $userIDs = [];
        foreach ($members as $member) {
            $userId = $member['user']['id'];
            $userIDs[] = $userId;
            // Получение информации о последней активности пользователя
            $chatMember = sendTelegram('getChatMember', ['chat_id' => $chatId, 'user_id' => $userId]);
            $lastActivityDate = $chatMember['result']['last_activity_date'];

            echo "User ID: $userId, Last Activity: $lastActivityDate\n";
        }

        $userIDsFile = 'user_ids.txt';
        file_put_contents($userIDsFile, implode("\n", $userIDs));

        $method = 'sendMessage';
        $send_data = [
            'text' => "Канал: $channelName\n" .
                    "Всего подписчиков: $totalSubscribers\n" .
                    "Администраторы: $adminsCount\n" .
                    "Чат-идентификатор: $chatId",
            'reply_markup' => [
                'resize_keyboard' => true,
                'keyboard' => [
                    [
                        ['text' => '️ Удалить'],
                        ['text' => ' Вернуться назад']
                    ]
                ]
            ]
        ];
                

    } else {
        $method = 'sendMessage';
        $send_data = [
            'chat_id' => $data['chat']['id'],
            'text' => '❗ Бот не является администратором в данной группе! Сначала добавьте его в свою групу/канал/чат, либо назчачьте администратором!'
        ];
    } 
}
  • Вопрос задан
  • 2746 просмотров
Пригласить эксперта
Ответы на вопрос 1
@breakb0nes
Вероятно, стоит учесть, что пользователь может скрыть свою последнюю активность и сделать что-ли isset проверку на такой элемент в ответе.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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