Посмотрел я на днях ютубчик, попалась мне видюха, как сделать телеграм бота, решил поделиться, дописав на скорую руку.
Для работы бота, вам понадобится хостинг, любое доменное имя с установленным ssl сертификатом - ssl сертификат обязателен, можно использовать любой.
И так, что бы зарегистрировать нового бота и получить токены, необходимо написать боту @BotFather.
Далее он спросит, как назвать бота. Это не ник, а отображение имени в чате
Название может быть любым, даже на русском
Далее он попросит ввести ник. В нике должно быть слово bot. Он должен заканчиваться на «bot». Вот так, например: TetrisBot или tetris_bot.
Если ник не занят, вам дадут токен
Сохраните, он понадобится.
Путь у меня получился до файла такой:
Файл я назвал index.php, если у вас будет отличатся, то путь будет такой
И так, нам необходимо рассказать телеграму, где наш бот лежит. Переходим по ссылке
или
где
это полученный токен.
И так, переходим к самому боту
Бот принимает сообщение, но ничего не отвечает
Нужно научить. И так как первое сообщение которое может отправляться боту будет команда
После функции дописываем
Но где же анекдоты спросите вы?
Спокуха, щя всё будет
Для работы бота, вам понадобится хостинг, любое доменное имя с установленным ssl сертификатом - ssl сертификат обязателен, можно использовать любой.
И так, что бы зарегистрировать нового бота и получить токены, необходимо написать боту @BotFather.
Код:
/newbot
Название может быть любым, даже на русском
Далее он попросит ввести ник. В нике должно быть слово bot. Он должен заканчиваться на «bot». Вот так, например: TetrisBot или tetris_bot.
Если ник не занят, вам дадут токен
Сохраните, он понадобится.
Путь у меня получился до файла такой:
Код:
https://sitename.org/tgbot/
Код:
https://sitename.org/tgbot/filename.php
И так, нам необходимо рассказать телеграму, где наш бот лежит. Переходим по ссылке
Код:
https://api.telegram.org/bot1973334:AAmwToTcTlo4/setWebhook?url=https://sitename.org/tgbot/
Код:
https://api.telegram.org/bot1973334:AAmwToTcTlo4/setWebhook?url=https://sitename.org/tgbot/filename.php
Код:
1973334:AAmwToTcTlo4
И так, переходим к самому боту
PHP:
<?php
//константа токена
const TTOKEN = '1973334:AAmwToTcTlo4';
//константа URL с API + токен
const TBURL = 'https://api.telegram.org/bot'. TTOKEN .'/';
//Здесь мы получаем сообщение от пользователя в json формате, по этому декодируем его
$update = json_decode(file_get_contents('php://input'));
//Получаем id чата
$chat_id = $update->message->chat->id ?? '';
//Получаем получаем сообщение из чата
$text = $update->message->text ?? '';
//Здесь небольшая функция с параметрами и методом
function send_request ($method, $params =[])
{
if (!empty($params))
{
$url = TBURL . $method . '?' . http_build_query($params);
}
else
{
$url = TBURL . $method;
}
return json_decode(file_get_contents($url));
}
//тут будет код, который стёр кот....
?>
Бот принимает сообщение, но ничего не отвечает
Нужно научить. И так как первое сообщение которое может отправляться боту будет команда
Код:
/start
После функции дописываем
PHP:
if ($text == '/start')
{
$res = send_request('sendMessage',[
'chat_id' => $chat_id,
'text' => 'Халоу мазафака! Я глупенький бот, вот что ты мне можешь приказать
Все команды:
/start
/Привет
/Анекдот
',
]);
}
elseif ($text == 'Привет' || $text == 'привет' || $text == 'Привет.'|| $text == 'привет.'|| $text == 'Превет.'|| $text == 'превет.'|| $text == 'Привет'|| $text == 'превет')
{
$res = send_request('sendMessage',[
'chat_id' => $chat_id,
'text' => 'Я вас не знаю! Идите накол!:)',
]);
}
Но где же анекдоты спросите вы?
Спокуха, щя всё будет
PHP:
elseif ($text == '/Анекдот'|| $text == '/анекдот'|| $text == 'Анекдот'|| $text == 'анекдот')
{
$urls = "http://anekdotme.ru/random";
//получаем через file_get_contents страницу
$site = file_get_contents($urls);
//регулярочкой вытаскиваем всё что в диве <div class="anekdot_text"> в массив
preg_match_all('#<div[^>]+?class\s*?=\s*?["\']anekdot_text["\'][^>]*?>(.+?)</div>#s', $site , $body);
//берём первый анекдот
$anekdot = $body[0][0];
//Удаляем через поиск и замену лишнее. Сделал самый простой вариант, не заморачивался
$anekdot = str_replace('<div class="anekdot_text">', '', $anekdot);
$anekdot =str_replace('</div>', '', $anekdot);
$anekdot = (string) str_replace('<br>', "\r\n", $anekdot);
$anekdot = (string) str_replace('<br />', "\r\n", $anekdot);
$anekdot = (string) str_replace('<BR>', "\r\n", $anekdot);
$anekdot = (string) str_replace('<BR />', "\r\n", $anekdot);
//Да да, тут есть символы юникода. Какие попались на глаза, прописал
$anekdot = (string) str_replace('—', "-", $anekdot);
$anekdot = (string) str_replace('.', "-", $anekdot);
$anekdot = (string) str_replace('-', "-", $anekdot);
$anekdot = (string) str_replace('!', "!", $anekdot);
$anekdot = (string) str_replace('?', "?", $anekdot);
$anekdot = (string) str_replace(':', "?", $anekdot);
$anekdot = (string) str_replace('"', "\"", $anekdot);
$anekdot = (string) str_replace('-;-;-;', "---", $anekdot);
//Перекодируем, а то будет ошибка
$rand_an = mb_convert_encoding($anekdot, "UTF-8", "windows-1251");
$res = send_request('sendMessage',[
'chat_id' => $chat_id,
'text' => $rand_an,
]);
}
//Ну и самый последний ответ, во всех других случаях
else
{
$res = send_request('sendMessage',[
'chat_id' => $chat_id,
'text' => 'Я вас не поняло!',
]);
}
PHP:
<?php
//константа токена
const TTOKEN = '1973334:AAmwToTcTlo4';
//константа URL с API + токен
const TBURL = 'https://api.telegram.org/bot'. TTOKEN .'/';
//Здесь мы получаем сообщение от пользователя в json формате, по этому декодируем его
$update = json_decode(file_get_contents('php://input'));
//Получаем id чата
$chat_id = $update->message->chat->id ?? '';
//Получаем получаем сообщение из чата
$text = $update->message->text ?? '';
//Здесь небольшая функция с параметрами и методом
function send_request ($method, $params =[])
{
if (!empty($params))
{
$url = TBURL . $method . '?' . http_build_query($params);
}
else
{
$url = TBURL . $method;
}
return json_decode(file_get_contents($url));
}
if ($text == '/start')
{
$res = send_request('sendMessage',[
'chat_id' => $chat_id,
'text' => 'Халоу мазафака! Я глупенький бот, вот что ты мне можешь приказать
Все команды:
/start
/Привет
/Анекдот
',
]);
}
elseif ($text == 'Привет' || $text == 'привет' || $text == 'Привет.'|| $text == 'привет.'|| $text == 'Превет.'|| $text == 'превет.'|| $text == 'Привет'|| $text == 'превет')
{
$res = send_request('sendMessage',[
'chat_id' => $chat_id,
'text' => 'Я вас не знаю! Идите накол!:)',
]);
}
elseif ($text == '/Анекдот'|| $text == '/анекдот'|| $text == 'Анекдот'|| $text == 'анекдот')
{
$urls = "http://anekdotme.ru/random";
$site = file_get_contents($urls);
preg_match_all('#<div[^>]+?class\s*?=\s*?["\']anekdot_text["\'][^>]*?>(.+?)</div>#s', $site , $body);
$anekdot = $body[0][0];
$anekdot = str_replace('<div class="anekdot_text">', '', $anekdot);
$anekdot =str_replace('</div>', '', $anekdot);
$anekdot = (string) str_replace('<br>', "\r\n", $anekdot);
$anekdot = (string) str_replace('<br />', "\r\n", $anekdot);
$anekdot = (string) str_replace('<BR>', "\r\n", $anekdot);
$anekdot = (string) str_replace('<BR />', "\r\n", $anekdot);
$anekdot = (string) str_replace('—', "-", $anekdot);
$anekdot = (string) str_replace('.', "-", $anekdot);
$anekdot = (string) str_replace('-', "-", $anekdot);
$anekdot = (string) str_replace('!', "!", $anekdot);
$anekdot = (string) str_replace('?', "?", $anekdot);
$anekdot = (string) str_replace(':', "?", $anekdot);
$anekdot = (string) str_replace('"', "\"", $anekdot);
$anekdot = (string) str_replace('"', "-;-;-", $anekdot);
$anekdot = (string) str_replace("\r\n \r\n", "\r\n", $anekdot);
$rand_an = mb_convert_encoding($anekdot, "UTF-8", "windows-1251");
$res = send_request('sendMessage',[
'chat_id' => $chat_id,
'text' => $rand_an,
]);
}
else
{
$res = send_request('sendMessage',[
'chat_id' => $chat_id,
'text' => 'Я вас не понял!',
]);
}
?>
Последнее редактирование: