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

Report-Bot — Предложка для Telegram [Часть 3]

Статьи / PHP

В третьей части по написанию Telegram-ботов реализуем так называемую предложку. По сути это будет некий репорт-бот, который будет получать обращения/сообщения/новости/репорты от пользователей и отправлять админу. То бишь пользователь вводит команду /start -> бот предлагает ввести сообщение -> пользователь вводит сообщение -> сообщение отправляется админу.


Для сегодняшних задач обновил библиотеку и добавил класс-хранилище. Принцип его работы похож на тот, что я описывал в статье по ВК-боту. Но всё же чутка отличается.


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

telekot.zip


Далее создаём php-файл, в котором будем писать бота (bot.php) и сразу же подключаем библиотеку:

<?php

require_once __DIR__ . '/telekot/autoload.php'; // Подключение библиотеки


В константу REPORT_CHAT_ID нужно вписать айди чата, в который бот будет скидывать все сообщения юзеров. Я для этих целей буду юзать свою личку.

const REPORT_CHAT_ID = ''; // ID чата, в который будут приходить репорты


Создаём экземпляр класса Bot, попутно инициализируя $chat_id и $message:

$tg = \telekot\Bot::create( 'токен' ) // Создаём экземпляр класса Bot, передаём в метод create() токен бота
    ->initChatId( $chat_id ) // Инициализируем айди чата, из которого поступают боту сообщения (например, это может быть айди пользователя, написавшего боту)
    ->initMessage( $message ); // Инициализируем текст сообщения, которе было отправлено боту


И создаём экземпляр класса Storage, передавая в метод start() экземпляр класса Bot (он у нас записан в переменную $tg):

$ctx = \telekot\Storage::start( $tg ); // Создаём экземпляр класса Storage для работы с хранилищем


Поскольку репорт можно будет написать после введения команды /start - добавляем соответствующее условие в код:

if ( $message == '/start' )
{
    // Тут продолжим писать код
}


В связи с тем, что отправка репорта осуществляется в два этапа (1 - ввод команды /start, 2 - отправка репорта) - нужно записать статус диалога с написавшим боту пользователем в кэш, а также дать юзеру дальнейшие инструкции:

$ctx->ctx(); // Создаём файл в кэше и ставим статус диалога в положение 1

$tg->reply( 'Привет, напиши своё репорт/новость/обращение в следующем сообщении' ); // Отправляем мессаг юзеру

Метод ctx() создаёт в папке cache новый файл (формата *user_id*.php) и устанавливает статус 1 в сгенерированном массиве.


Значения из кэша можно извлекать методом get() по ключу (в нашем случае ключ - 'status'). Поэтому в блоке elseif проверяем, писал ли уже этот пользователь боту или нет. Если статус равен единице - значит писал, в противном случае условие не выполняется.

else if ( $ctx->get( 'status' ) == 1 )
{
    // Тут продолжим
}


Больше никаких данных пользователь вводить не будет, а значит из хранилища запись можно удалять. Делаем это, используя метод delete():

$ctx->delete(); // Удаляем запись из кэша


Ну, и осталось отослать репорт админу и уведомить юзера об успешной отправке:

$tg->sendMessage( REPORT_CHAT_ID, "Новый репорт от @{$data['message']['from']['username']}: \n\n" . $message ); // Отправляем админу репорт
$tg->reply( 'Репорт успешно отправлен админу, если хочешь написать ещё что-нибудь - введи команду /start' ); // Говорим челу, что репорт успешно отправлен


Весь код:

<?php

require_once __DIR__ . '/telekot/autoload.php'; // Подключение библиотеки


const REPORT_CHAT_ID = ''; // ID чата, в который будут приходить репорты



$tg = \telekot\Bot::create( 'токен' ) // Создаём экземпляр класса Bot, передаём в метод create() токен бота
    ->initData( $data )
    ->initChatId( $chat_id ) // Инициализируем айди чата, из которого поступают боту сообщения (например, это может быть айди пользователя, написавшего боту)
    ->initMessage( $message ); // Инициализируем текст сообщения, которе было отправлено боту
$ctx = \telekot\Storage::start( $tg ); // Создаём экземпляр класса Storage для работы с хранилищем


if ( $message == '/start' )
{
    $ctx->ctx(); // Создаём файл в кэше и ставим статус диалога в положение 1
    
    $tg->reply( 'Привет, напиши своё репорт/новость/обращение в следующем сообщении' ); // Отправляем мессаг юзеру
}
else if ( $ctx->get( 'status' ) == 1 )
{
    $ctx->delete(); // Удаляем запись из кэша

    $tg->sendMessage( REPORT_CHAT_ID, "Новый репорт от @{$data['message']['from']['username']}: \n\n" . $message ); // Отправляем админу репорт
    $tg->reply( 'Репорт успешно отправлен админу, если хочешь написать ещё что-нибудь - введи команду /start' ); // Говорим челу, что репорт успешно отправлен
}


bot.zip

  • 5id15
  • 23.08.2022
  • 9 315
  • 4
[PHP] Создание простого Telegram-бота на простой библиотеке.
[PHP] Создание простого Telegram-бота на простой библиотеке.
2-12-2019, 03:21, PHP
Создание простого Telegram-бота с клавиатурой и inline-кнопками [Часть 2]
Создание простого Telegram-бота с клавиатурой и inline-кнопками [Часть 2]
10-08-2022, 20:16, PHP
Как сделать цепочку сообщений (анкету) для бота ВК на PHP
Как сделать цепочку сообщений (анкету) для бота ВК на PHP
23-06-2022, 16:32, PHP
Стейты для бота ВК (последовательный ввод step by step)
Стейты для бота ВК (последовательный ввод step by step)
20-07-2022, 20:03, PHP
BOT VK — Использование хранилища (Store) на библиотеке SimpleVK 3.x [Часть 3]
BOT VK — Использование хранилища (Store) на библиотеке SimpleVK 3.x [Часть 3]
22-08-2022, 00:49, PHP
  1. 3NOT

    3NOT Гость 17 февраля 2023 01:42

    Не запускается

  2. Господин

    Господин Гость 24 сентября 2023 18:44

    Не запускается

  3. Айнур Бирдин

    Айнур Бирдин@Айнур Бирдин 25 сентября 2023 11:02

    Не работает скрипт  с Storage проблема

  4. МимоПро

    МимоПро Гость 10 октября 2023 16:54

    Так и что делаьт?

{login}

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

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

Рекламный блок
  • Новости
  • Платная категория
  • Блог
  • Игры
  • Обновления
  • Программы
  • Статьи
    • 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
Пользователей: 4125
Добавлено за сутки: +0
Полная статистика..
Подробная статистика сайта
Loading...

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

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

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

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

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

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