Ответы пользователя по тегу Боты
  • Как сделать так чтобы бот воспринимал команду без "/"?

    romandkoz
    @romandkoz
    Над строкой def check_start(message): поставь декоратор @bot.message_handler(content_types=['text'])
    Ответ написан
    1 комментарий
  • Почему не запускается PHP WebHook для Telegram бот на локальном сервере?

    romandkoz
    @romandkoz
    Если нужно вебхук повесить на локалхост то посмотри сервис ngrok.io
    Запускал openserver и ngrok. Телеграмy скармливал адрес для вебхука который дал ngrok (https - ssl имеется) и все работало.
    Ответ написан
    Комментировать
  • Простой feedback telegram bot на php?

    romandkoz
    @romandkoz Автор вопроса
    Полный рабочий код
    <?php
    define('BOT_TOKEN', 'ТУТ ТОКЕН БОТА');
    define('API_URL', 'https://api.telegram.org/bot'.BOT_TOKEN.'/');
    define('MY_ID', 'ТУТ ТВОЙ ИД');
    define('WEBHOOK_URL', 'ПОЛНЫЙ АДРЕС ДО ФАЙЛА БОТА');
    define('HELLO_TEXT', 'Просто напиши мне, и я передам все своему хозяину!');
    define('DONE_TEXT', 'Сообщение отправлено!');
    function apiRequestWebhook($method, $parameters) {
    	if (!is_string($method)) {
    		error_log("Method name must be a string\n");
    		return false;
    	}
    	if (!$parameters) {
    		$parameters = array();
    	} else if (!is_array($parameters)) {
    		error_log("Parameters must be an array\n");
    		return false;
    	}
    	$parameters["method"] = $method;
    	header("Content-Type: application/json");
    	echo json_encode($parameters);
    	return true;
    }
    function exec_curl_request($handle) {
    	$response = curl_exec($handle);
    	if ($response === false) {
    		$errno = curl_errno($handle);
    		$error = curl_error($handle);
    		error_log("Curl returned error $errno: $error\n");
    		curl_close($handle);
    		return false;
    	}
    	$http_code = intval(curl_getinfo($handle, CURLINFO_HTTP_CODE));
    	curl_close($handle);
    	if ($http_code >= 500) {
    		sleep(10);
    		return false;
    	} else if ($http_code != 200) {
    		$response = json_decode($response, true);
    		error_log("Request has failed with error {$response['error_code']}: {$response['description']}\n");
    		if ($http_code == 401) {
    			throw new Exception('Invalid access token provided');
    		}
    		return false;
    	} else {
    		$response = json_decode($response, true);
    		if (isset($response['description'])) {
    			error_log("Request was successfull: {$response['description']}\n");
    		}
    		$response = $response['result'];
    	}
    	return $response;
    }
    function apiRequest($method, $parameters) {
    	if (!is_string($method)) {
    		error_log("Method name must be a string\n");
    		return false;
    	}
    	if (!$parameters) {
    		$parameters = array();
    	} else if (!is_array($parameters)) {
    		error_log("Parameters must be an array\n");
    		return false;
    	}
    	foreach ($parameters as $key => &$val) {
    		if (!is_numeric($val) && !is_string($val)) {
    			$val = json_encode($val);
    		}
    	}
    	$url = API_URL.$method.'?'.http_build_query($parameters);
    	$handle = curl_init($url);
    	curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
    	curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, 5);
    	curl_setopt($handle, CURLOPT_TIMEOUT, 60);
    	return exec_curl_request($handle);
    }
    function apiRequestJson($method, $parameters) {
    	if (!is_string($method)) {
    		error_log("Method name must be a string\n");
    		return false;
    	}
    	if (!$parameters) {
    		$parameters = array();
    	} else if (!is_array($parameters)) {
    		error_log("Parameters must be an array\n");
    		return false;
    	}
    	$parameters["method"] = $method;
    	$handle = curl_init(API_URL);
    	curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
    	curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, 5);
    	curl_setopt($handle, CURLOPT_TIMEOUT, 60);
    	curl_setopt($handle, CURLOPT_POSTFIELDS, json_encode($parameters));
    	curl_setopt($handle, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
    	return exec_curl_request($handle);
    }
    function processMessage($message) {
    	$message_id = $message['message_id'];
    	$chat_id = $message['chat']['id'];
    	if (isset($message)) {
    		$text = $message['text'];
    		if (strpos($text, "/start") === 0) {
    			apiRequest("sendMessage", array('chat_id' => $chat_id, "text" => HELLO_TEXT));
    		} else if (strpos($text, "/stop") === 0) {
    		} else {
    			apiRequest("sendMessage", array('chat_id' => $chat_id, "text" => DONE_TEXT));
    			apiRequest("forwardMessage", array('chat_id' => MY_ID, 'from_chat_id' => $chat_id, 'message_id' => $message_id));
    		}
    	}
    }
    if (php_sapi_name() == 'cli') {
    	apiRequest('setWebhook', array('url' => isset($argv[1]) && $argv[1] == 'delete' ? '' : WEBHOOK_URL));
    	exit;
    }
    $content = file_get_contents("php://input");
    $update = json_decode($content, true);
    if (!$update) {
    	exit;
    }
    if (isset($update["message"])) {
    	processMessage($update["message"]);
    }
    ?>
    Ответ написан
    Комментировать