Бот телеграмм с анекдотами

  • Автор темы Автор темы Denzy
  • Дата начала Дата начала

Denzy

Злобный самаритянин
Команда форума
Moderator
Разрушитель (V)
Сообщения
412
Реакции
277
Баллы
3 803
Посмотрел я на днях ютубчик, попалась мне видюха, как сделать телеграм бота, решил поделиться, дописав на скорую руку.
Для работы бота, вам понадобится хостинг, любое доменное имя с установленным ssl сертификатом - ssl сертификат обязателен, можно использовать любой.

И так, что бы зарегистрировать нового бота и получить токены, необходимо написать боту @BotFather.
Код:
/newbot
Далее он спросит, как назвать бота. Это не ник, а отображение имени в чате
Название может быть любым, даже на русском
Далее он попросит ввести ник. В нике должно быть слово bot. Он должен заканчиваться на «bot». Вот так, например: TetrisBot или tetris_bot.
Если ник не занят, вам дадут токен
Сохраните, он понадобится.

Путь у меня получился до файла такой:
Код:
https://sitename.org/tgbot/
Файл я назвал index.php, если у вас будет отличатся, то путь будет такой
Код:
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' => 'Я вас не знаю! Идите накол!:)',
]);
}

Но где же анекдоты спросите вы?
Спокуха, щя всё будет:ok:

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('&mdash;', "-", $anekdot);
$anekdot = (string) str_replace('&#046', "-", $anekdot);
$anekdot = (string) str_replace('&#045;', "-", $anekdot);
 $anekdot = (string) str_replace('&#033;', "!", $anekdot);
 $anekdot = (string) str_replace('&#063;', "?", $anekdot);
 $anekdot = (string) str_replace('&#058;', "?", $anekdot);
 $anekdot = (string) str_replace('&quot;', "\"", $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('&mdash;', "-", $anekdot);
$anekdot = (string) str_replace('&#046', "-", $anekdot);
$anekdot = (string) str_replace('&#045;', "-", $anekdot);
 $anekdot = (string) str_replace('&#033;', "!", $anekdot);
 $anekdot = (string) str_replace('&#063;', "?", $anekdot);
 $anekdot = (string) str_replace('&#058;', "?", $anekdot);
 $anekdot = (string) str_replace('&quot;', "\"", $anekdot);
 $anekdot = (string) str_replace('&quot;', "-;-;-", $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' => 'Я вас не понял!',
]);
}


?>
 
Последнее редактирование:
А как наполнять, может парсить?
 
Можно написать скрипт запроса к OpenAI o1-mini или Gemini как альтернативный источник.
От $0.0001 до $0.0002 за запрос и передавать подсказку:
- расскажи мне случайный анекдот о погоде? случайный новый анекдот, популярный советский анекдот и т.п.

По поводу стоимости доработки с базой данных: в зависимости от того что Вы хотите?
Агрегатор по категориям анекдотов? С кнопками для бота?
Какой функционал нужен?

Если просто случайный анекдот, то база не нужна.
Автор темы привел отличное решение.
 
Да вроде неплохо получается. Скрин прикрепляю по prompt:

пожалуйста, найди мне самый популярный русский анекдот за ноябрь месяц 2024 года в категории политика

просто нужно поработать над prompt.

у меня сейчас висит что-то подобное как телеграмм бот с одной random философской цитатой в чат для компании на английском (аля мотиватор с юмором). в целом норм работает.
 

Вложения

  • 1734517209867.png
    1734517209867.png
    37,9 КБ · Просмотры: 6
рекомендую посмотреть видео на youtube c make автоматизацией наполнения новостных и телеграмм каналов при помощи o-mini. будете удивлены. пишет и переписывает неплохо, в том числе: новости, спорт прогнозы и т.п. причем можно задать роль и множество настроек. читается в итоге вполне легко и интересно.
 
Ну может, ну то то шутки получаются не сильно смешные, для цитат и всякого такого да, а вот именно анекдоты не встречал, только брать с какие то ресурсов где уже люди рейтинг стаивли о они реально смешные
 
Назад
Верх