// Ваш телеграмм API токен
$apiToken = "";
// Измените на ваш ID канала
// Узнать ID канала: 1) Напишите боту: https://t.me/getmyid_bot 2) Перешлите любой пост из канала в диалог с ботом
$channelId = ""; // пример: channelId = -1001808575391
// Измените на ваш текст с промокодом
$promoText = "Ваш промокод: KillBot-1998 \nВведите промокод при создании нового аккаунта на KillBot: https://killbot.ru/user/register и у вас будет сразу две активные подписки: KillBot и Direct";
// Текст предложением подписаться на канал
$subscriptionText = "Подпишитесь на канал https://t.me/KillBotRus чтобы получить промокод номиналом 1998р. для месячной подписки на сервис выявления ботов KillBot: https://killbot.ru";
$update = json_decode(file_get_contents("php://input"), TRUE);
$chatId = isset($update["message"]["chat"]["id"]) ? $update["message"]["chat"]["id"] : null;
$userId = isset($update["message"]["from"]["id"]) ? $update["message"]["from"]["id"] : null;
if (isset($update["callback_query"])) {
$chatId = $update["callback_query"]["message"]["chat"]["id"];
$userId = $update["callback_query"]["from"]["id"];
// Обрабатываем нажатие кнопки
handleStartCommand($chatId, $userId, $apiToken);
} else {
if (!$chatId || !$userId) {
sendMessage($chatId, "Ошибка: не удалось получить chat_id или user_id.", $apiToken);
exit;
}
handleStartCommand($chatId, $userId, $apiToken);
}
// Функция для отправки сообщения пользователю с кнопками
function sendMessageWithKeyboard($chatId, $message, $apiToken, $replyMarkup) {
$url = "https://api.telegram.org/bot$apiToken/sendMessage";
$postFields = array(
'chat_id' => $chatId,
'text' => $message,
'reply_markup' => json_encode($replyMarkup)
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
curl_close($ch);
}
function sendMessage($chatId, $message, $apiToken) {
$url = "https://api.telegram.org/bot$apiToken/sendMessage";
$postFields = array(
'chat_id' => $chatId,
'text' => $message
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
curl_close($ch);
}
// Проверка подписки на канал
function isUserSubscribed($userId, $channelId, $apiToken) {
//return false;
$url = "https://api.telegram.org/bot$apiToken/getChatMember?chat_id=$channelId&user_id=$userId";
// Используем curl для выполнения запроса
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, TRUE);
global $chatId;
// Если бот не имеет доступа, отправляем уведомление
if (isset($data["error_code"]) && $data["error_code"] === 400) {
sendMessage($chatId, "Отладка - Ответ от getChatMember: " . print_r($data, true), $apiToken);
sendMessage($chatId, "Не удалось проверить подписку. Пожалуйста, убедитесь, что бот является администратором канала.", $apiToken);
return false; // Не подписан
}
// Проверяем статус пользователя
if (isset($data["result"]["status"]) &&
($data["result"]["status"] === "member" || $data["result"]["status"] === "administrator" || $data["result"]["status"] === "creator")) {
return true; // Подписан
} else {
return false; // Не подписан
}
}
// Функция для обработки команды /start
function handleStartCommand($chatId, $userId, $apiToken) {
global $channelId;
global $promoText;
global $subscriptionText;
// Проверяем, подписан ли пользователь на канал
if (isUserSubscribed($userId, $channelId, $apiToken)) {
sendMessage($chatId, $promoText, $apiToken);
} else {
$keyboard = [
'inline_keyboard' => [
[
['text' => 'Проверить подписку', 'callback_data' => 'check_subscription']
]
]
];
sendMessageWithKeyboard($chatId, $subscriptionText, $apiToken, $keyboard);
}
}