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
  • 18 542
  • 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'

    2. Егор Прокофьев

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

      а для вк?)

    3. Нео Метал

      Нео Метал@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
  • Дизайн
    • PSD исходники
  • DLE
    • Шаблоны
      • Игровые
    • Модули
    • Хаки
  • Магазин
Комментарии
Авторизация на сайте через ВК с занесением пользователя в базу данных (PHP)
В статье используется библиотека для работы с MySQLi, которая исключает SQL инъекции при
Авторизация на сайте через ВК с занесением пользователя в базу данных (PHP)
Когда будет гайд про защиту от sql injection?
Скрипт исключения из беседы VK и не только, написанный на PHP
Совсем забыл, что адекватное использование addChatUser отключили. Метод вызывается только ключом
Cкрипт добавление возможных друзей Вконтакте, законная накрутка друзей без блокировок!
Скрипт всего лишь имитирует нажатие кнопки для добавления в друзья. Само собой у Вк есть алгоритмы
Cкрипт добавление возможных друзей Вконтакте, законная накрутка друзей без блокировок!
Баны летят только так. Крутил 10 аккаунтов с помощью этого скрипта и использова хорошие прокси. 9
Все комментарии..
Полный список последних комментариев
Лучшие новости
Всего публикаций: 79
Добавлено за сутки: +0
Записей в блоге: 1
Добавлено за сутки: +0
Комментариев: 867
Добавлено за сутки: +0
Пользователей: 3904
Добавлено за сутки: +0
Полная статистика..
Подробная статистика сайта
Loading...

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

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

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

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

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

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