Бот Telegram: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
Нет описания правки
Строка 13: Строка 13:
#*По завершению сего действа BotFather пришлет токен-жетон свежего бота, каковой в дальнейшем и задействуем.
#*По завершению сего действа BotFather пришлет токен-жетон свежего бота, каковой в дальнейшем и задействуем.
#Добавим бота в группу/чат, куда нужно слать мессаги.
#Добавим бота в группу/чат, куда нужно слать мессаги.
#Получим ИД этой группы (гуглится)<ref name="Search"/>.
#Получим ИД этой группы, для чего нужно:
#*запустить бота [https://t.me/getmyid_bot Get My Id] и
#*переслать ему сообщение из чатика, который хотим идентифицировать,
#**на что он выдаст сообщение с 3 ИДами, из которых нужен только '''Forwarded from:''' — это и есть искомое значение.
#Внесём в баш-скрипт команду ''(удобнее оформить как функцию — см. в примере ниже)'', которая при наступлении отслеживаемого события будет слать соответствующий текст по жетону бота и ИДу канала.
#Внесём в баш-скрипт команду ''(удобнее оформить как функцию — см. в примере ниже)'', которая при наступлении отслеживаемого события будет слать соответствующий текст по жетону бота и ИДу канала.
{{Внимание|Токен бота храним пуще зеницы ока, поскольку всякий, кому он ведом, может невозбранно слать мессаги от его имени!}}
{{Внимание|Токен бота храним пуще зеницы ока, поскольку всякий, кому он ведом, может невозбранно слать мессаги от его имени!}}
Строка 57: Строка 60:
Notify "$TESTDB распакована за $TIME, можно проверять целостность."
Notify "$TESTDB распакована за $TIME, можно проверять целостность."
</source>
</source>
<references>
    <ref name="Search">Статья только начата и пока в стадии создания, так что данные лакуны будут заполняться по мере того, как вспомню/восстановлю, эким макаром это делал. Подсказки нашедших самостоятельно — приветствуются.</ref>
</references>
=Обратная связь=
=Обратная связь=
*[https://t.me/gbIMoBou @gbIMoBou]
*[https://t.me/gbIMoBou @gbIMoBou]

Версия от 05:04, 26 января 2023

Многие ищут способы отправлять оповещения о событиях на инфраструктуре в свои телеграм-группы/чаты.

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

А меж тем всё довольно просто:

  1. Cгенерим нового телегобота в... генераторе телегоботов BotFather, для чего следует:
    • Отправить в чат @BotFather команду /newbot.
    • Ввести название бота — в этой категории особых ограничений нет.
    • Ввести техническое имя бота, которое будет отображаться в адресной строке. К нему есть требования — оно должно:
      • быть уникальным,
      • написано латиницей,
      • оканчиваться на bot (так Телега защищается от злоумышленников, выдающих ботов за реальных людей).
    • По завершению сего действа BotFather пришлет токен-жетон свежего бота, каковой в дальнейшем и задействуем.
  2. Добавим бота в группу/чат, куда нужно слать мессаги.
  3. Получим ИД этой группы, для чего нужно:
    • запустить бота Get My Id и
    • переслать ему сообщение из чатика, который хотим идентифицировать,
      • на что он выдаст сообщение с 3 ИДами, из которых нужен только Forwarded from: — это и есть искомое значение.
  4. Внесём в баш-скрипт команду (удобнее оформить как функцию — см. в примере ниже), которая при наступлении отслеживаемого события будет слать соответствующий текст по жетону бота и ИДу канала.
Внимание: Токен бота храним пуще зеницы ока, поскольку всякий, кому он ведом, может невозбранно слать мессаги от его имени!

Команда выглядит так (на куски разбито для удобочитаемости, можно одной строкой):

curl -s -X POST -H 'Content-Type: application/json' \
    -d "{\"chat_id\": \"ИД_чатика\", \"text\": \"текст сообщения\", \"disable_notification\": true}" \
    https://api.telegram.org/bot<токен бота>/sendMessage

Пример такого скрипта (у меня распаковывается дамп базы для проверки его на целостность — dumpcheck):

#!/bin/bash

WD=/mnt/dumps.psql/daily                                # Ежедневные дампы на СХД.
DUMP=`ls -1 $WD/$1*| tail -2 | head -1 | sed 's|.*/||'` # Проверять предпоследнюю ежедневку.
DATE=`echo $DUMP | cut -d, -f2`
ChatID="-13_цифр"                                       # ИД чатика, куда слать оповещения.
BoTokn="10_цифр:???-31_цифробуква"                      # Токен/жетон созданного для этого бота.

Notify(){ # Функция отправки оповещений, предварительно формирующая текст.
    curl -s -X POST -H 'Content-Type: application/json' \
         -d "{\"chat_id\": \"$ChatID\", \"text\": \"$1\", \"disable_notification\": true}" \
         https://api.telegram.org/bot$BoTokn/sendMessage 2>&1 >/dev/null
}

case ${DUMP##*.} in
    zst) UNPAK=zstdcat      ;;
    lzo) UNPAK="lzop -dcf"  ;;
esac

TESTDB=check_${DUMP%%,*}

Notify "Распаковывается база $TESTDB от $DATE."

# [пере]создадим проверочную базу:
[ `psql -U postgres -c "\l+" | grep -c $TESTDB` -lt 1 ] ||
    for DO in drop create; do
        ${DO}db -U postgres $TESTDB
    done
# и распакуем в неё дамп:
$UNPAK $WD/$DUMP | psql -U postgres -d $TESTDB >/dev/null 2>&1
#date +"Elapsed %T" -ud @$[`date +%s`-START]            # Сколько длился весь процесс.
TIME=$(date +%T -ud @$[`date +%s`-START])

Notify "$TESTDB распакована за $TIME, можно проверять целостность."

Обратная связь