PDA

Просмотр полной версии : [Мануал] dc_crashreport: Как создать и настроить Telegram-бота



Daniel_Cortez
04.12.2022, 14:49
Всем привет!

В версии 1.2.0 инклуда dc_crashreport (https://pro-pawn.ru/showthread.php?16642-dc_crashreport) появилась возможность отправлять отчёты об ошибках в мессенджер Telegram (https://telegram.org/).
http://ihost.pro-pawn.ru/image.php?di=EMBA

Для отправки отчётов в Telegram требуется сначала создать бота (который, собственно, и будет отправлять вам отчёты), но этот процесс на удивление простой: бот "крутится" на серверах Telegram, т.е. не нужно арендовать серверные мощности для поддержания его работы. Достаточно лишь зарегистрировать бота, открыть с ним чат и прописать настройки для dc_crashreport.

Для наибольшей наглядности я постарался снабдить данный мануал скриншотами на каждом важном этапе, но если вы думаете, что чего-то не хватает - обязательно скажите; посмотрю, что можно сделать.

Приступим.

1. Чтобы создать бота в Telegram, нам нужно обратиться к боту @BotFather.
Для этого откройте меню "Контакты", нажмите значок поиска, введите "@BotFather" и выберите вышеупомянутого бота (показано на скриншоте).
http://ihost.pro-pawn.ru/image.php?di=8RA7

2. Откроется приветственная страница с описанием всего того, что можно сделать через @BotFather (правда, у меня на русском только заголовок, а всё остальное на инглише - интересно, это баг или фича?) - просто нажмите "Старт", чтобы начать работу с ботом.
http://ihost.pro-pawn.ru/image.php?di=Q04Q

3. Бот выдаст сообщение, в котором перечислены все команды. Нас интересует команда "/newbot", просто нажмите на неё в сообщении (обведено на скриншоте).
http://ihost.pro-pawn.ru/image.php?di=YHOG

4. @BotFather спросит вас, как назвать нового бота (какое имя будет отображаться в списке контактов; для примера я указал "CrashReport"), а также глобальное имя (т.е. под каким хендлом бота можно будет найти). Учтите, что выбранное глобальное имя может быть уже занято - в этом случае придумайте более уникальное, специфическое имя. Кроме того, глобальное имя должно заканчиваться на "bot", например: "my_new_awesome_bot" или "MyNewAwesomeBot".
http://ihost.pro-pawn.ru/image.php?di=Z0WZ

5. Бот создан! @BotFather выдаст сообщение, в котором есть адрес бота, по которому его можно найти и добавить в контакты, а также токен (последовательность из случайных букв, цифр и знаков) для авторизации и управления ботом.
Пока что нас интересует сам бот. Найдите в сообщении ссылку на бота (обведено на скриншоте) и нажмите её.
http://ihost.pro-pawn.ru/image.php?di=2EC1

6. Откроется чат с новым ботом - просто нажмите кнопку "Старт", чтобы начать беседу с ботом (этим вы разрешите боту отправлять вам сообщения).
http://ihost.pro-pawn.ru/image.php?di=ET10

7. Теперь вернитесь к последнему сообщению от @BotFather и обратите внимание на токен (обведён на скриншоте) - сейчас он нам пригодится.
Откройте на своём ПК блокнот (или что вы там используете вместо него) и перепечатайте токен с экрана мобильного девайса. Либо, если вы используете версию Telegram для ПК, то можете просто скопировать-вставить токен из сообщения.
http://ihost.pro-pawn.ru/image.php?di=ZMSL

8. Чтобы заставить бота отправить сообщение, нужно знать ID чата между вами и ботом - узнаем же его! Откройте в браузере страницу:

https://api.telegram.org/bot<токен>/getUpdates
где "<токен>" - это та длинная последовательность из букв и цифр, которую вы скопировали на предыдущем шаге.
Если всё сделано правильно, то должна открыться страница с JSON-объектом. Не нужно особо вдумываться в её содержимое, вам понадобится только значение "result => 0 => message => chat => id" (обведено на скриншоте) - это и есть интересующий нас ID чата. Вернитесь к блокноту и запишите этот ID рядом с токеном.
http://ihost.pro-pawn.ru/image.php?di=DAFI
Если вместо этого вы получили практически пустой объект с первым значением "ok: false" - проверьте ещё раз токен (возможно, вы неправильно переписали его), а также сам адрес страницы на предмет ошибок (одна из самых частых: забыли написать "bot" перед токеном).

9. С ботом разобрались, теперь настроим сервер SA-MP.
Взаимодействие с ботом производится путём отправки HTTPS-запросов, обычный HTTP в Telegram не поддерживается. Поскольку сервер умеет "из коробки" работать только с "голым" HTTP, для HTTPS нам понадобится плагин. Пока что единственным известным мне плагином для таких целей является pawn-requests (https://github.com/Southclaws/pawn-requests).
Зайдите на страницу релизов плагина, скачайте архив с самим плагином и инклудами к нему (обведено на скриншоте) и раскидайте содержимое архива по нужным папкам: плагин (*.dll/*.so) - в "plugins", а инклуды (да, именно во множественном числе; почему-то автор решил сделать для плагина целых 4 файла "*.inc", и нам понадобятся все) - в "pawno/include".
http://ihost.pro-pawn.ru/image.php?di=YUEI

10. Почти готово. Остаётся только подключить dc_crashreport к вашему моду и заставить его работать с Telegram.
Для этого достаточно лишь прописать несколько строк в начале мода, как на скриншоте, указав полученные вами токен бота и ID чата.
Для ленивых я приготовил простой пример скрипта, в котором демонстрируется ошибка использования sscanf2 - просто вставьте свои ID чата и токен:

#include <a_samp>
#include "sscanf2.inc"

#pragma option -d2 // Включим отладочную информацию, чтобы выводить номера строк в файлах
#define DC_CRASHREPORT_EXTRA_SSCANF2 // Включить перехват сообщений об ошибках от sscanf2

#define DC_CRASHREPORT_TELEGRAM // Включить отправку отчётов через Telegram
#define DC_CRASHREPORT_TELEGRAM_TOKEN "<токен>" // Токен бота
#define DC_CRASHREPORT_TELEGRAM_SENDTO "<ID чата>" // ID чата между Вами и ботом

#include "dc_crashreport.inc"

stock TestFunc()
{
static const params[] = "12 abc";
new buffer[4];
new x;
// Здесь должна быть ошибка, т.к. для спецификатора "s" не указана длина
sscanf(params, "is", x, buffer);
}

main()
{
TestFunc();
}

http://ihost.pro-pawn.ru/image.php?di=GWH7

11. Компилируем скрипт, запускаем сервер и наблюдаем магию!
http://ihost.pro-pawn.ru/image.php?di=EMBA


На этом всё, Telegram-бот готов. Как вариант, можно заставить бота поставить себе какой-нибудь аватар или сделать ещё что-нибудь из разряда украшательства, но это чисто опционально.

Удачной охоты за ошибками!



Специально для Pro-Pawn.ru (http://www.pro-pawn.ru)
Копирование данной статьи на других ресурсах без разрешения автора запрещено!

$continue$
06.12.2022, 14:57
Есть ещё: https://github.com/Sreyas-Sreelal/tgconnector

Daniel_Cortez
06.12.2022, 19:00
Есть ещё: https://github.com/Sreyas-Sreelal/tgconnector
Есть, но его автор не додумался сделать нормальную лицензию, не накладывающую неадекватных обязательств на пользователя. (GPL (https://github.com/Sreyas-Sreelal/tgconnector/blob/master/LICENSE)? Нет, спасибо.)

Leogin
08.12.2022, 19:09
Годно