Не так давно я начал изучать Telegram API и решил написать несколько простых и полезных утилит для работы с сайтом, одной из которых я поделюсь здесь.
Речь идёт про уведомления об авторизации на сайте: когда кто-то авторизуется в панели управления сайтом, telegram-бот отправляет определённому telegram-пользователю сообщение, содержащее (по желанию) логин, пароль, адрес электронной почты, адрес админки, IP, User-Agent и пр.

Этот функционал нужен в основном для сайтов, над которым работает несколько человек — в таком случае удобно следить за активностью пользователей.
Я не буду рассказывать о том, как создавать бота для Telegram (обращайтесь к @BotFather), получать токен и так далее, а опишу непосредственно плагин для MODX Revolution.
Порядок действий примерно такой:
- Регистрация бота
- Получение токена
- Создание и настройка плагина
Создание плагина
Имя, как обычно, можно указать любое. Привязать плагин нужно к событию OnManagerLogin, где будет доступна информация об авторизовавшемся пользователе (остальная информация есть в его профиле и глобальных переменных).$apiHost = 'https://api.telegram.org/';
$token = '123456789:AAE4SAmRwSsaFSpPNCeBfy0sSK76Syd_6uU';
$chatId = '123456';
if (!function_exists('cleanSiteUrl')) {
function cleanSiteUrl($url) {
$url = str_replace('https://', '', $url);
$url = str_replace('http://', '', $url);
$url = rtrim($url, '/');
return $url;
}
}
switch ($modx->event->name) {
case 'OnManagerLogin':
$profile = $user->getOne('Profile');
$managerUri = cleanSiteUrl($modx->getOption('site_url')).$modx->getOption('returnUrl', $_POST, '');
$message = 'Авторизация на сайте '.$managerUri."\n"
.'Логин: '.$user->get('username')."\n"
.'Пароль: '.$modx->getOption('password', $_POST, '')."\n"
.'E-mail: '.$profile->get('email')."\n"
// .'Array: '.print_r($_POST, true)."\n"
// .'IP: '.$modx->getOption('REMOTE_ADDR', $_SERVER, '')."\n"
// .'User-Agent: '.$modx->getOption('HTTP_USER_AGENT', $_SERVER, '')
;
$message = urlencode($message);
$apiUri = $apiHost.'bot'.$token.'/sendMessage?chat_id='.$chatId.'&text='.$message;
$response = file_get_contents($apiUri);
break;
default:
break;
}
В начале кода нужно указать токен для бота, chatId — свой id в Telegram (обращайтесь к @userinfobot), а затем просто подкорректировать информацию, которая будет приходить в уведомлении.
Решение проблем
Если вам ничего не пришло от бота, то причин несколько:- Бот не сможет написать вам первым. Отбросьте гордость и напишите боту сначала сами.
- Неправильный токен.
- Неправильно указанный ваш идентификатор.
Игорь Сухинин 22.08.2017 13:49 #
Идея интересная, можно много чего так отслеживать в принципе по действиям пользователей на сайте. Но я чего-то не понял в примере, зачем может понадобиться следить за паролями пользователей? Как-то это некрасиво получается. В базе пароли зашифрованы, а тут прямо так, прямым текстом… Фу-фу-фу (голосом Быкова). Конечно, это может быть просто пример, но все-таки. Прям представил, как отслеживаются пароли пользователей MODX.RU.
Игорь Сухинин 22.08.2017 13:51 #
Михаил 22.08.2017 13:57 #
Игорь Сухинин 22.08.2017 14:07 #
Михаил 22.08.2017 14:17 #
Вторая причина — я уже писал похожие плагины с отправкой уведомлений на почту. Субъективно мне больше понравилось чатиться с ботом. К тому же, в перспективе можно настроить бота не только на отправку уведомлений, но и на управление сайтом (очистить кэш, забанить пользователей, сбросить блокирову и пр).
Идей куча и невозможно написать решение, которое устроит абсолютно всех.
Игорь Сухинин 22.08.2017 14:45 #
Игорь Сухинин 22.08.2017 13:54 #
Михаил 22.08.2017 14:07 #