romandkoz
@romandkoz

Простой feedback telegram bot на php?

Как реализовать на php очень простого feedback бота без composer?
Сайт с ssl есть, webhook использовать могу.
Нужно чтобы все что пишут боту, пересылалось ботом мне.
---
Разобрался, вопрос закрыт.
  • Вопрос задан
  • 1207 просмотров
Решения вопроса 1
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"]);
}
?>
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы