Здравствуйте. Есть код, где я в одном из блоков if записываю данные в переменную. Проблема в том, что когда я пытаюсь вызвать его в другом блоке elseif - она выводиться пустая, т.к значения либо попросту не записывается, либо просто перезаписывается.
Весь код целиком:
<?php
# Принимаем запрос
$data = json_decode(file_get_contents('php://input'), TRUE);
# Обрабатываем ручной ввод или нажатие на кнопку
$data = $data['callback_query'] ? $data['callback_query'] : $data['message'];
# Важные константы
define('TOKEN', '6011282829:AAHQgKSQkK5Jm6_O8Z03OfDHEHzSyOpME7A'); // Замените на свой токен
# Записываем сообщение пользователя
$message = mb_strtolower(($data['text'] ? $data['text'] : $data['data']), 'utf-8');
$channelUsername = '';
$channelLink = '';
# Функция для проверки является ли бот администратором канала
function isBotAdmin($chatId, $botToken) {
$url = 'https://api.telegram.org/bot' . $botToken . '/getChatAdministrators?chat_id=' . urlencode($chatId);
$response = file_get_contents($url);
$responseData = json_decode($response, true);
// Проверяем, что ответ содержит корректные данные и бот является администратором
return isset($responseData['ok']) && $responseData['ok'] && isset($responseData['result']);
}
$parsedLink = null;
# Шаг 1: Пользователь нажимает кнопку "/start"
if ($message === '/start') {
$method = 'sendMessage';
$send_data = [
'text' => "Привет! Я бот для анализа активности подписчиков в каналах, чатах и группах.",
'reply_markup' => [
'keyboard' => [
[
['text' => ' Начать работу'],
]
],
'resize_keyboard' => true,
'one_time_keyboard' => true
]
];
} elseif ($message === ' начать работу') {
# Шаг 2: Пользователь вводит ссылку
$method = 'sendMessage';
$send_data = [
'text' => ' Шаг 1: Предоставьте ссылку на анализируемый канал/чат/группу.'
];
} elseif (strpos($message, 'http') === 0) {
# Шаг 3: Пользователь вводит ссылку
$parsedLink = parse_url($message);
if ($parsedLink && isset($parsedLink['path'])) {
// удаляем https:// из ссылки, и добавляем к ней @. На выходе из ссылки https://t.me/*название канала*, получаем: *@название канала*
$channelUsername = '@' . ltrim($parsedLink['path'], '/');
$channelLink = 'https://api.telegram.org/bot' . TOKEN . '/getChat?chat_id=' . urlencode($channelUsername);
$channelInfo = sendTelegram('getChat', ['chat_id' => $channelUsername]);
$channelTitle = $channelInfo['result']['title'];
// Получаем количество подписчиков
$subscriberCount = $channelInfo['result']['members_count'];
// Получаем информацию о администраторах
$adminsInfo = sendTelegram('getChatAdministrators', ['chat_id' => $channelUsername]);
$adminCount = count($adminsInfo['result']);
$botCount = 0;
$chatInfo = sendTelegram('getChat', ['chat_id' => $channelUsername]);
$chatId = $chatInfo['result']['id'];
foreach ($adminsInfo['result'] as $admin) {
if ($admin['user']['is_bot']) {
$botCount++;
}
}
if (isBotAdmin($channelUsername, TOKEN)) {
$method = 'sendMessage';
$send_data = [
'text' => ' Шаг 2: Предоставьте число неактивных подписчиков',
'reply_markup' => [
'keyboard' => [
[
['text' => ' Удалить'],
]
],
'resize_keyboard' => true,
'one_time_keyboard' => true
]
];
} else {
$method = 'sendMessage';
$send_data = [
'text' => 'В данном канале бот не является администратором. Пригласите и выдайте ему все права администратора для дальнейшей работы!'
];
}
} else {
$method = 'sendMessage';
$send_data = [
'text' => 'Введите корректную ссылку!'
];
}
} elseif(is_numeric($message)){
$inactiveSubscribers = intval($message);
// Получаем информацию о канале
$method = 'sendMessage';
$send_data = [
'text' => "Вы ввели число: $inactiveSubscribers. Шаг 4 завершен." . $parsedLink
];
} elseif($message === ' Удалить') {
$method = 'sendMessage';
$send_data = [
'text' => 'Вау!',
];
} else {
// Обработка ситуации, когда пользователь вводит сообщение без нажатия кнопки "/start" или вводит некорректные данные
$method = 'sendMessage';
$send_data = [
'chat_id' => $data['chat']['id'],
'text' => 'Для начала работы нажмите кнопку " Начать работу" и следуйте инструкциям.'
];
}
# Добавляем данные пользователя
$send_data['chat_id'] = $data['chat']['id'];
$res = sendTelegram($method, $send_data);
function sendTelegram($method, $data, $headers = []) {
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_POST => 1,
CURLOPT_HEADER => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => 'https://api.telegram.org/bot' . TOKEN . '/' . $method,
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_HTTPHEADER => array_merge(array("Content-Type: application/json"), $headers)
]);
$result = curl_exec($curl);
curl_close($curl);
return (json_decode($result, 1) ? json_decode($result, 1) : $result);
}
Код проблемы:
$channelUsername = '';
$channelLink = '';
elseif (strpos($message, 'http') === 0) {
# Шаг 3: Пользователь вводит ссылку
$parsedLink = parse_url($message);
if ($parsedLink && isset($parsedLink['path'])) {
// удаляем https:// из ссылки, и добавляем к ней @. На выходе из ссылки https://t.me/*название канала*, получаем: *@название канала*
$channelUsername = '@' . ltrim($parsedLink['path'], '/');
$channelLink = 'https://api.telegram.org/bot' . TOKEN . '/getChat?chat_id=' . urlencode($channelUsername);
$channelInfo = sendTelegram('getChat', ['chat_id' => $channelUsername]);
$channelTitle = $channelInfo['result']['title'];
// Получаем количество подписчиков
$subscriberCount = $channelInfo['result']['members_count'];
// Получаем информацию о администраторах
$adminsInfo = sendTelegram('getChatAdministrators', ['chat_id' => $channelUsername]);
$adminCount = count($adminsInfo['result']);
$botCount = 0;
$chatInfo = sendTelegram('getChat', ['chat_id' => $channelUsername]);
$chatId = $chatInfo['result']['id'];
foreach ($adminsInfo['result'] as $admin) {
if ($admin['user']['is_bot']) {
$botCount++;
}
}
if (isBotAdmin($channelUsername, TOKEN)) {
$method = 'sendMessage';
$send_data = [
'text' => ' Шаг 2: Предоставьте число неактивных подписчиков',
'reply_markup' => [
'keyboard' => [
[
['text' => ' Удалить'],
]
],
'resize_keyboard' => true,
'one_time_keyboard' => true
]
];
}
elseif(is_numeric($message)){
$inactiveSubscribers = intval($message);
// Получаем информацию о канале
$method = 'sendMessage';
$send_data = [
'text' => $channelUsername;
];
}
В данном примере, в чат телеграмм бота выводиться просто пустая строка. Как мне записать туда данные и вызывать их в любом участке кода?