KOTOFF.NET
  • Главная
  • Пользователи
  • Контакты
  • Статистика
  • Правила
  • О нас
  • Вход / Регистрация

[PHP] Создание простого Telegram-бота на простой библиотеке.

Статьи / PHP


Здравствуйте, жители KotOFF.NET!
Как-то меня заинтересовала тема ботов на Телеграм и я удивился, насколько это можно просто сделать даже тому, кто мало разбирается в PHP. Соответственно, я принялся за это дело и готов поделится с вами этой вещью, чтобы вы точно знали, как такое делается.

Создание бота у BotFather.
Исток истоков — это регистрация бота у BotFather.
Ничего страшного нет. Просто следуйте простой инструкции.

1. Начинаем диалог с t.me/botfather.

2. Пишем /newbot, а следом имя боту.

3. Пишем айди боту. Заметьте, он должен обязательно оканчиваться на bot.

Всё. Регистрация окончена!
По желанию можно добавить аватарку боту через /setuserpic, описание через /setdescription или/и краткое «О боте» через /setabouttext. Совершенно сложного тут нет, поддерживается кириллица, кстати, как и у имени бота.

Главное «но» при создании бота на Телеграм.
Читаешь себе документацию, всё тебе ясно, пытаешься сам вебхук установить и видишь, что вебхуки-то проходят лишь с SSL-сертификатами! Что делать-то? Без паники. Тут есть два пути, или даже больше решению этого вопроса.
Можно взять да просто платить за хостинг, а к любому современному хостингу сейчас идёт SSL-сертификат. Но платить не хочется, верно?
Тогда можно подключиться к CloudFlare, если получится, однако я вам дам спойлер: мало где это получится. Так что и этот вариант не наш.
Значит, надо искать бесплатные хостинги с SSL, и таких я знаю два: darkhost.pro и 000webhost.com. Последний вариант я терпеть не могу — медленный, что жуть, хотя SSL есть, и домен тоже бесплатный… Но из-за медленности второго варианта буду использовать первый. И нет, это не реклама — я никак не управляю ни тем, ни тем хостом. 

Настройка хостинга, его получение.
Делается всё элементарно и просто. Выполняйте понятную инструкцию, ничего не пропуская, желательно, и всё будет отлично.

АХТУНГ! Сейчас хост условно бесплатный! Чтобы его далее держать, каждые 90 дней надо писать о просьбе продлить вам хост или платить определённую сумму в месяц!

1. Заходим на darkhost.pro, регистрируем себе аккаунт и подтверждаем его через подтверждение e-mail. Данные можно указывать не свои, но старайтесь вводить их похожими на правду, ладно? Чтобы вопросов никаких не было уже тут.


2. После регистрации и входа в кабинет личный, нажимаем на «Услуги"->«Заказать новую услугу», а на появившейся странице заказываем тариф «Light-MINI».

3. Выбираем «субдомен darkhost.pro» и вводим в свободное поле что угодно на латинице, после чего на следующей странцие просто жмём «Оформить», а далее уж жмём «Завершить заказ».
После этого вам на почту придут данные для входа в панель управления и FTP-сервер.
4. Нажимаем на «Услуги» и выбираем «Продукты/услуги». Там ищем свой сайт, что вы только что создали и нажимаете по нему. На открывшейся странице выбираем «Вход в панель управления» и ждём, пока нас перекинет и авторизирует в ISPmanager-е.

5. Слева есть панель. Там выбираем «SSL-сертификаты». В открывшейся странице нажимаем «Let’s Encrypt» и просто нажимаем далее. 

6. Пока ставится сертификат Let’s Encrypt, который работает, кстати, три месяца, настроим PHP. Просто заходим в «WWW-домены», находим свой сайт там, двойным кликом открываем его (или нажимаем на «Изменить») и выбираем версию PHP, промотав ниже. Желательно ставить PHP или 7.0, или выше.
Если сайт ваш выдаёт ошибку после того, как поменяли версию PHP — подождите. Заработает само.

Вот и всё. Мы настроили хостинг для работы с ним.

А теперь как бота написать-то?!
Всё просто. Скачайте архив и просто перекиньте через FTP или на через ISPmanager файлы на ваш хостинг.
telelibon-master.zip
Нам же там надо файлик "tgLib.php" и именно его вкладывать в ваш основной файл бота.
А вот как загружать файлы через ISPmanager:
(1 — перейти в Менеджер файлов; 2 — пройти по этому пути (последняя папка будет вашим доменом); 3 — нажать на закачать (далее надо будет просто выбрать файлы. также можно сделать папку через «Создать», если вам надо))

Разбор самого кода главного файла: bot.php.
<?
include 'tgLib.php'; //загружаем библиотеку

const TOKEN = 'ТУТ ВАШ ТОКЕН';
$bot = new tgBot(TOKEN);
$data = json_decode(file_get_contents('php://input'),true);

//переменные, что тут надо будут, ладно?
$text = $data['message']['text'];
$chat = $data['message']['chat']['id'];
$id = $data['message']['from']['id'];
$first_name = $data['message']['from']['first_name'];
$reply_author = $data['message']['reply_to_message']['from']['id'];
$reply_message_id = $data['message']['reply_to_message']['message_id'];

//чтобы мощность зря не тратилась
if ($text){
    if (strtolower($text) == "/start") $bot->reply($chat, "*Привет.* Я - обычный бот Телеграма. Можешь посмотреть команды, нажав на кнопку ''рамка со слэшем в центре''."); //reply - это просто отсылка сообщения
    if (strtolower(mb_substr($text,0,5)) == "/kick") {
        if ($reply_author){
            $bot->kick($chat,$reply_author); //kick тут работает именно так, да. если что, он выдаст ошибку и закончит скрипт.
            $bot->reply($chat,"[Предатель](tg://user?id={$reply_author}) выгнан, [{$first_name}](tg://user?id={$id})."); // [{$first_name}](tg://user?id={$id}) есть упоминание того, кто выполнил команду.
        } else { //получить айди пользователя сложно, так что работаем с ответом на сообщение. 
            $bot->reply($chat, "Ответь на сообщение предателя этой команды и выгони его.");
        }
    }
    if(strtolower($text) == "/picture") $bot->pictureReply($chat,"Держи *картин очку*, [{$first_name}](tg://user?id={$id}).", "http://pm1.narvii.com/7360/5109a4d976422ebdcdbfa23563d6b37a10a27966r1-736-1104v2_hq.jpg"); //а так отправляются картинки. url можно свой, но и file_id, кстати, не отменяли. если что, отпишитесь, как оно.
    if(strtolower($text) == "/video") $bot->videoReply($chat,"Держи *видяшку*, [{$first_name}](tg://user?id={$id}).", "http://f0329289.xsph.ru/tg/videoplayback.mp4"); //такой же принцип как и с фото, только видео.
    if(strtolower($text) == "/gif") $bot->gifReply($chat,"Держи *гифку*, [{$first_name}](tg://user?id={$id}).", "https://media.giphy.com/media/ifAxq0ON2i5fcjeOdR/giphy.gif"); //аналогично...
    if(strtolower($text) == "/audio") $bot->audioReply($chat,"Держи *песенку*, [{$first_name}](tg://user?id={$id}).",  "https://mp3star.ru/mp3/Ly9tb29zaWMubXkubWFpbC5ydS9maWxlLzA0YjQ5NDBiNzg5ZDRmNjVhMzVkM2MwMDE5NjU2ZGUyLm1wMw==/МАЛЬЧУГЕНГ%20-%20Том%20и%20Джерри.mp3"); //аналогично.. кстати, так только mp3 читаются
    if(strtolower($text) == "/voice") $bot->voiceReply($chat,"Держи *голосовуху*, [{$first_name}](tg://user?id={$id}).", "http://f0329289.xsph.ru/tg/МАЛЬЧУГЕНГ+-+ТУДА-СЮДА.ogg"); //это отсылка аудиосообщений. у меня не сработало, хотя всё верно, НО ЧТОБЫ ЗАРАБОТАЛО НУЖЕН .ogg В КОДЕКЕ OPUS И ТОЛЬКО!!!! 
    if(strtolower($text) == "/videonote") $bot->videoNoteReply($chat, "https://cs564500.vkuservideo.net/8/e03PD46MT80MTU-/videos/a000a322a2.360.mp4"); //это отсылка видеосообщений. так должно работать, но на время написания это пока не поддерживается. однако заработает file_id ;)
    if(strtolower(mb_substr($text,0,9)) == "/newtitle") {
        $bot->setChatTitle($chat,mb_substr($text,10)); //эта команда меняет название чата
        $bot->reply($chat,"*Имя чата поменялось.* Всё же верно, [{$first_name}](tg://user?id={$id})?");
    }
    if(strtolower($text) == "/invitelink" or strtolower($text) == "/chatlink") $bot->reply($chat,"*Ссылка на эту беседу:* {$bot->chatInviteLink($chat)['result']}"); //chatInviteLink даёт ссылку на беседу. зачем ['result']? мне лень исправлять там кое-что в библиотеке, но зато вы можете.
    if(strtolower($text) == "/pin") {
        if (!$reply_message_id) die($bot->reply($chat,"Ответьте на сообщение, что хотите закрепить, этой командой и оно будет закреплено.")); //это вам не вк, где боты не могут получить айди сообщений любых в беседах!
        $bot->pinMessage($chat,$reply_message_id); //прикрепление сообщений. ноу-хао будто
        $bot->reply($chat,"Сообщение успешно закреплено, [{$first_name}](tg://user?id={$id}).");
    }
    if(strtolower($text) == "/unpin") { 
        $bot->unpinMessage($chat); //ну открепление поняятно, даа
        $bot->reply($chat,"Всё, что было закреплено, я открепил, [{$first_name}](tg://user?id={$id}).");
    }
    if(strtolower(mb_substr($text,0,8)) == "/tempban") { 
        if ($reply_author){
            $tempban = $bot->tempban($chat,$reply_author,mb_substr($text,9));
            die($bot->reply($chat,"[Предатель](tg://user?id={$reply_author}) выгнан на {$bot->toUnix(mb_substr($text,9))} секунд, [{$first_name}](tg://user?id={$id}). Если он выгнан на <30 или >31622400 секунд, то он навеки выгнан.")); //toUnix конвертирует время типа 1m, 3w, 3y в unix-время. секунд нет, они сломались :) кстати, а вы знали, что в телеграме уже есть поддержка времени бана заранее? :D и да, это возможно не работает пока что.
        } else {
            die($bot->reply($chat, "Ответь на сообщение предателя этой команды и выгони его.")); //команда по итогу прст должна выглядеть так: /tempban 1m [ответ на сообщение]. и да, я использую die, чтобы сразу завершался скрипт. вы можете это не делать.
        }
    }
} 

А как вообще прикрепить вебхук-то к боту? Ты нам не сказал!
Да, я дико извиняюсь, что это пишу под конец, конечно, поста, но я просто хотел сперва показать, как это всё делается, чтобы вы определились, надо ли вам это.
А так, просто выполните запрос какой-то такой:
https://api.telegram.org/bot<ТОКЕН ВАШ>/setWebhook?url=https://<ССЫЛКА НА ФАЙЛ bot.php ИЛИ ДРУГОЙ, ГДЕ КОД БОТА САМ>

Удачного денька.
Пост подходит к концу. Если что — задавайте вопросы. Отвечу на них по возможности.
P. S. Если ответа нет довольно долго, значит либо не заметил, либо нет времени, но вероятен сценарий банальности ошибки вашей или вопроса.

Архив с библиотекой и исходным кодом:
telelibon-master.zip
  • Нео Метал
  • 02.12.2019
  • 22 153
  • 17
Создание бота ВК на inline кнопках и обновление на версию API 5.103+ подробная инструкция и примеры
Создание бота ВК на inline кнопках и обновление на версию API 5.103+ подробная инструкция и примеры
2-11-2019, 06:01, Статьи / PHP
Создаем собственного бота VK, подробная инструкция как создать бота VK за 5 минут!
Создаем собственного бота VK, подробная инструкция как создать бота VK за 5 минут!
16-01-2019, 06:02, Статьи / PHP
Как создать бота Вконтакте с кнопками (keyboard)
Как создать бота Вконтакте с кнопками (keyboard)
1-04-2019, 23:36, Статьи / PHP
Скрипт исключения из беседы VK и не только, написанный на PHP
Скрипт исключения из беседы VK и не только, написанный на PHP
21-02-2019, 04:04, Статьи / PHP
  1. Егор Прокофьев

    Егор Прокофьев@Егор Прокофьев 7 декабря 2019 16:20

    хотелось бы увидеть бота, который при входе в беседу, бот пишет сообщение.
    1. Нео Метал

      Нео Метал@Infinite 15 декабря 2019 12:51

      а тут ничего сложного.
      заходите в гости к боту @userinfobot в телеграме и туда шлёте сообщение вашего бота. он выдаст айди цифренный бота твего.
      а потом перед if ($text) вставляешь этот код:

      if($data['message']['new_chat_members'][0]['id'] == 'айди бота ,короче'){
          die($bot->reply($chat,"*Спасибо за приглашение меня в беседу!* Теперь вы можете меня назначить тут администратором, чтобы управлять беседой!"));
      }

      ничего сложного. :)
      -
      а ещё рекомендую скачать новую версию библиотеки с гитхаба, там можно сделать новые строки в сообщениях через привычный пыхерам '\n'
      1. Егор Прокофьев

        Егор Прокофьев@Егор Прокофьев 2 января 2020 19:54

        а для вк?)
        1. Нео Метал

          Нео Метал@Infinite 12 января 2020 17:54

          есть короче штука такая как chat_invite_user и chat_invite_user_by_link
          ставь проверку через if ($data->message->action->type == "chat_invite_user") в проверке на новое сообщение и будет тебе счастье

          но лично я тут работал с массивами и писал так: $data["object"]["message"]["action"]["type"], ну и + у меня версия апи стоит 5.103 в настройках сервера, не в коде. если у тебя ниже то убери object
  2. Егор Флай

    Егор Флай@Егор Флай 2 января 2020 19:50

    Можете сделать гайд по созданию бота вк на пхп? (Лонгполл)
    1. Сергей Котов

      Сергей Котов@Сергей Котов 3 января 2020 19:02

      Да, напишу
  3. Виталий Калугин

    Виталий Калугин@Виталий Калугин 29 января 2020 18:32

    он только под тг? Под вк не подойдёт чтоль?
    1. Сергей Котов

      Сергей Котов@Сергей Котов 30 января 2020 14:15

      Используя статьи на сайте, можно точно такого же сделать и под вк
  4. Виталий Калугин

    Виталий Калугин@Виталий Калугин 31 января 2020 18:48

    когда еще боты с апи 103 будут?
    1. Сергей Котов

      Сергей Котов@Сергей Котов 31 января 2020 21:13

      Постараюсь сегодня написать
  5. ГоСтЬ

    ГоСтЬ Гость 15 февраля 2020 08:55

    КАК скоро бот на пыхе вк на лонгпул?
  6. jaygen

    jaygen@jaygen 25 апреля 2020 00:14

    подскажите как ставить кнопки ?
  7. Юрий

    Юрий Гость 5 мая 2020 10:08

    Спасибо за статью! Подскажите пожалуйста как можно сделать к примеру категории (кнопками) и при нажатии на определенную категорию выводилось случайное сообщение из этой категории. Как понимаю это нужно подключать базу данных и вносить туда необходимые сообщения? Хотелось бы, чтобы сообщение "привязывалось" к пользователю на сутки, а затем рандомилось другое) Как гороскоп к примеру)
    1. Нео Метал

      Нео Метал@Infinite 9 мая 2020 02:04

      Отвечая на вопрос кнопок... Я пока этим не занимался и не разбирался.
      Если дойдут руки - я сделаю соответствующий пост, где рассказываю, как их использовать. Но что-то подсказывает что либо это вперёд меня сделают, либо придётся мно-ого ждать.)))
  8. Дмитрий

    Дмитрий Гость 20 июня 2020 11:15

    Здравствуйте, а как можно сделать чтобы бот заходил в определенный канал и пересылал все посты оттуда мне в лс?
    1. Нео Метал

      Нео Метал@Infinite 15 августа 2021 12:49

      Извиняюсь за поздний ответ, но бота может в канал пригласить лишь администратор, увы. :)

  9. Нео Метал

    Нео Метал@Infinite 21 августа 2021 02:34

    Немного информации:
    Обновляю библиотеку, добавляя возможность создавать кнопки, а также их отправлять.
    Как только обновлю, сделаю статью. Обещаю, про вас не забуду. Поздновато, думаю, правда, однако почему нет всё же. :)

{login}

Твой комментарий..

Заказывай!
Разработка ботов на заказ, любой сложности, обращаться:
 VK KOTOFF.net - Сообщество, в личные сообщения или по контактам указанным там 
 mail: [email protected]

Рекламный блок
  • Новости
  • Платная категория
  • Блог
  • Игры
  • Обновления
  • Программы
  • Статьи
    • PHP
    • Python
    • JS
  • Дизайн
    • PSD исходники
  • DLE
    • Шаблоны
    • Модули
    • Хаки
  • Магазин
    • Скрипты
Комментарии
Система комментариев на PHP
<Script>Alert("hello");</Script>
Генерация всевозможных комбинаций из набора символов — комбинаторика в Python (itertools)
Qwertyuiopasdfghjklzxcvbnm 1234567890
Система комментариев на PHP
Полезная статья
Создание простого Telegram-бота с клавиатурой и inline-кнопками [Часть 2]
Класс, хорошая тема
Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее
Как отключить вывод результата cron в папку modules/cron в Open Server? Крон запускает несколько
Все комментарии..
Полный список последних комментариев
Лучшие новости
Всего публикаций: 115
Добавлено за сутки: +0
Записей в блоге: 1
Добавлено за сутки: +0
Комментариев: 938
Добавлено за сутки: +0
Пользователей: 4124
Добавлено за сутки: +0
Полная статистика..
Подробная статистика сайта
Loading...

Нашли ошибку?
Вы можете сообщить об этом администрации.
Выделив текст нажмите CTRL+Enter

Полезные ссылки
  • О проекте
  • Наши контакты
  • Администрация
  • Рекламные материалы
  • Идеи и предложения
  • Ответы на вопросы
Информация
  • Условия сделки
  • Способы оплаты
  • Поддержка / F.A.Q
  • Онлайн документация
  • Статистика сайта
  • Список пользователей
Услуги/Работа
  • Разработка ботов ВК
  • Обновление проекта
  • Консультация/поддержка
KOTOFF.net

Copyright © Footer 2019-2023. All right reserved.
KOTOFF.net - Уроки по PHP, SQL, IT новости
Быстрый вход

Используйте социальные сети для быстрой регистрации и авторизации.

Google
ВКонтакте
Яндекс
Mail.ru
Создать аккаунт / Регистрация
Авторизация

Я забыл свой пароль