Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Как, опять?..
Да, но нет!
$api = "https://api.telegram.org/bot111111111:AAHKeYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
// получаем данные
$update = json_decode(file_get_contents("php://input"), TRUE);
$message = $update["message"];
// все команды
$commands = array(
"всем привет" => "Дратути",
"кто самый" => "Без сомнения {$message['from']['first_name']} {$message['from']['last_name']}",
);
// не учитываем регистр
$text_lower = mb_convert_case($message["text"], MB_CASE_LOWER);
// искать команду будем по первым 200 символам.
if (strlen($text_lower) > 200) $text_lower = substr($text_lower, 0, 200);
// крутим текст сообщения от конца до 1го символа в поисках существующего ключа в $commands
for ($i=0; $i < strlen($text_lower); $i++) {
$text_lower_new = substr($text_lower, 0, strlen($text_lower)-$i);
if (isset($commands[$text_lower_new])) {
$text_lower = $text_lower_new;
break;
}
}
// сам ответ
if (isset($commands[$text_lower])) $answer = $commands[$text_lower];
// отправляем ответ в чат
if (!empty($answer)) file_get_contents("{$api}/sendmessage?chat_id={$message["chat"]["id"]}&text={$answer}");

if (strlen($message['text']) >= 5 && substr($message['text'], 0, 5) == '/save') {
// выполняем запись текста после "/save" в бд
}
$cmd = new Commands($message); // тут все функции
$commands = array(
"всем привет" => "Дратути",
"/save" => "fun_saveText"
);
// проверки тут разные, в цикле перебор строки и т.д всё копипастить не буду.. в предыдущем комментарии это есть.
if (strlen($commands[$text_lower]) > 3 && substr($commands[$text_lower], 0, 4) == 'fun_') {
$fun_name = substr($commands[$text_lower], 4);
if (method_exists($cmd, $fun_name)) {
$answer = call_user_func(array($cmd, $fun_name));
}else{
$answer = "Функция {$fun_name} не найдена =(";
}
}else{
$answer = $commands[$text_lower];
}
for ($i=1; $i < strlen($text_lower); $i++) {
$text_lower_new = substr($text_lower, 0, $i);
if (isset($commands[$text_lower_new])) {
$text_lower = $text_lower_new;
break;
}
}
if (strpos($text_lower, "/save") == 0) {
// действие
}
поэтому не пойму тех кто хвастается кол-вом строк в коде
Читаю такие статьи и ни в одной не описано, зачем, используя вебхук, еще дополнительно дергать sendMessage? Ведь в webHook явно сказано, что вместо того, чтобы просто отвечать 200 — можно сразу ответить сообщением и оно уйдет в телеграм.
Какие-то накладные расходы? Минусы? Поделитесь, пожалуйста?
heroku run curl -X POST "https://api.telegram.org/botTOKEN/setWebhook?url=HOST/api/v1"port=os.environ.get('PORT', 8080)
Telegram-бот, webhook и 50 строк кода