Jump to content

Управление роутером по Telegram


Recommended Posts

Можно организовать чат с роутером, словно вы находитесь в CLI кинетика.

b92d38f5d243.png

Для этого необходимо.

  • Установить необходимые пакеты:
    opkg install bash curl dtach
     

     

  • Скачать bash-скрипт, который будет выполнять функции бота Telegram:
    curl --output /opt/bin/bashbot.sh --insecure https://raw.githubusercontent.com/ryzhovau/telegram-bot-bash/master/opt/bin/bashbot.sh
    curl --output /opt/bin/JSON.sh --insecure https://raw.githubusercontent.com/ryzhovau/telegram-bot-bash/master/opt/bin/JSON.sh
    curl --output /opt/etc/init.d/S51bashbot  --insecure https://raw.githubusercontent.com/ryzhovau/telegram-bot-bash/master/opt/etc/init.d/S51bashbot
    chmod +x /opt/bin/bashbot.sh
    chmod +x /opt/bin/JSON.sh
    chmod +x /opt/etc/init.d/S51bashbot
     

     

  • Попросить робота @BotFather создать нового бота, в ответ получите токен для его авторизации.
  • Вписать полученный токен между одинарными кавычками в строке TOKEN='' файла /opt/bin/bashbot.sh.
  • Заменить в /opt/bin/bashbot.sh строчку
    *) msg="$MESSAGE";;
     

    на строчку

    *) msg=$(ndmq -p "$MESSAGE" -x);;
     

     

  • Запустить на роутере бота, выполнив /opt/etc/init.d/S51bashbot start. Бот будет автоматически стартовать после перезагрузки роутера.

Вопросы безопасности сознательно опускаю. К примеру, вы можете настроить бота так, чтобы он отвечал на сообщения только от определённого пользователя. Все обращению к боту фиксируются в файле /opt/var/log/bashbot.log.

Приведённый пример бота — просто баловство, proof of concept. Если пожелаете, вы можете найти ему более серьёзное применение.

Edited by Александр Рыжов
  • Thanks 3
  • Upvote 1
Link to comment
Share on other sites

  • 1 month later...

Есть возможно сделать скрипт более интересным образом к примеру чтобы при подключении к wifi приходила смс на телеграм, чет сам пытался не запустилось не чего.

Link to comment
Share on other sites

  • 3 months later...
@BotFather рассказывает про кнопки в момент общения. Видимо, проглядели, когда создавали бота.

Ничего не получается(( Отправил пробные команды:

help - Помощь
top - Загрузка
logtail - Последние команды

, он ответил: Success! Command list updated., при этом ничего не изменилось, а еще вдруг непонятно отчего перестал запускаться сервис по /opt/etc/init.d/S51bashbot start, по /opt/bin/bashbot.sh запустился, роутер живет своей жизнью(

P.S.: После ручного удаления bashbot.socket заработало.. Это из-за чего так было и что можно сделать, чтобы не повторялось?

P.S.2: Появились типа кнопки, но не те о которых я говорил, я о таких как в ботах типа @clarabot

Link to comment
Share on other sites

:idea: вообщем, если я правильно понял для чего нужно "dtach -n /opt/var/bashbot.socket" , то я поменял эту строку на PREARGS="screen -dmS bashbot.socket". Как с dtach тормозов не наблюдаю :roll:

P.S.: А как воспользоваться ботом для отправки сообщения по событию или в кроне?

Edited by Guest
Link to comment
Share on other sites

  • 1 month later...
В 22.07.2016 в 16:27, Александр Рыжов сказал:

Хотел сделать так, отредактировал скрипт с учетом специфики прошивки, отредактировал на использование wget-ssl, но ругается:

ERROR: cannot verify api.telegram.org's certificate, issued by 'CN=Go Daddy Secure Certificate Authority - G2,OU=http://certs.godaddy.com/repository/,O=GoDaddy.com\\, Inc.,L=Scottsdale,ST=Arizona,C=US':
  Self-signed certificate encountered.

Как пофиксить?

 

Edited by rigmad
Link to comment
Share on other sites

  • 3 weeks later...

Если я верно понял то строка, вырезает ник отправителя

 USER=$(echo $res | JSON.sh | egrep '\["result",0,"message","from","user"\]' | cut -f 2 | cut -d '"' -f 2)

В логе в результате 

[2016.09.28_00:21:32][] /top

 

Нужно заменить user на first_name

 

USER=$(echo $res | JSON.sh | egrep '\["result",0,"message","from","first_name"\]' | cut -f 2 | cut -d '"' -f 2)

В результате

[2016.09.28_00:42:54][dcloud] /top

 

 

Link to comment
Share on other sites

В 07.09.2016 в 00:26, KorDen сказал:

Не секурно же, лучше opkg install ca-certificates

Боитесь, что кто-то перехватит скачивание скрипта на роутер? Ок, ваше право.

10 часов назад, doscloud сказал:

Нужно заменить user на first_name

 

Всё верно, ника у Telegram-пользователя может и не быть. Но есть ли толк в логе от его first_name — отнюдь не очевидно.

 

Перед вами конструктор, можете лепить из него всё, что пожелаете.

Link to comment
Share on other sites

1 минуту назад, Александр Рыжов сказал:

Всё верно, ника у Telegram-пользователя может и не быть. Но есть ли толк в логе от его first_name — отнюдь не очевидно.

На основе этой строчки делал проверку по нику, не вышло, вот и полез. Толк наверно чисто эстетический.

Link to comment
Share on other sites

  • 2 months later...

подскажите пожалуйста, как можно перезагрузить кинетик с помощью команды боту, так, чтобы кинетик не попадал в бутлуп?

Link to comment
Share on other sites

  • 4 weeks later...

Краткая инструкция:  Для автоматизаций и распарсивания далее по вкусу))) 

1. Написать в телеграмм пользователю @BotFather

    /newbot - создать бота, попросит придумать имя и ник (ник должен содержать слово "bot")

    /token - получить <API_ID>

2. Написать любоее сообщение своему боту, создать чат 

3. По ссылке "https://api.telegram.org/bot<API_ID>/getUpdates" узнать <CHAT_ID>  в поле "chat":"id": ХХХХХХХХ" 

4. Самые простые способы

         Отправить сообщение:

    wget -O - --no-check-certificate "https://api.telegram.org/bott<API_ID>/sendMessage?chat_id=<CHAT_ID>&text=Привет мир"

         Отправить фото (должно быть доступно по ссылке интернета):

    wget -O - --no-check-certificate "https://api.telegram.org/bot<API_ID>/sendphoto?chat_id=<CHAT_ID>&photo=http://XXXXXXXXX.jpg"

          Получить  отправленные боту сообщения: из ссылки в пункте 2 

    wget -O - --no-check-certificate "https://api.telegram.org/bot<API_ID>/getUpdates"

          Получить отправленную боту картинку:  <file_path> - также можно узнать из ссылки в пункте 2

    wget -O - --no-check-certificate "https://api.telegram.org/file/bot<API_ID>/<file_path>"  <file_path> - также можно узнать из ссылки в пункте 2

 

 

Edited by pitersidr
  • Thanks 2
  • Upvote 1
Link to comment
Share on other sites

  • 2 months later...

Как на гиге отследить события прошивочного pptp впн-сервера (подключение/отключение) клиента, чтобы отправлять по телеграму? Возможно ли так же отправлять только критические  события сислога?

Link to comment
Share on other sites

10 минут назад, Александр Рыжов сказал:

Можно фильтровать syslog налету и реагировать на определённые строки.


tail -f /tmp/syslog.log | \
while read line ; do
	echo "do something with $line"
done

 

а эту штуку чтобы она как демон работала тоже как бэшбот в скрине запустить наверное надо?

Edited by emlen
Link to comment
Share on other sites

  • 2 months later...
On 28.01.2016 at 1:56 PM, Александр Рыжов said:

Можно организовать чат с роутером, словно вы находитесь в CLI кинетика.

 

Интересно, а можно такое сделать для Pidgin-а?

Link to comment
Share on other sites

  • 3 months later...
  • 2 months later...

Доброго времени суток,  эта строчка скрипта

USER=$(echo $res | JSON.sh | egrep '\["result",0,"message","from","username"\]' | cut -f 2 | cut -d '"' -f 2)

определяет  имя пользователя пишушего боту.

Подскажите как правильно прикрутить - чтоб бот общалься с одни юзером, а остольным, кто пишет ему, отправлял определенное сообщение.

if then else, пробую сам , но увы не силен я в скриптах.

или может добавить куда chat_id , чтолб только с одним юзером общавлся.

Помогите пожалуйста.

 

Все спасибо. вопрос закрыт. разобрался.

Edited by Павел
Разобрался
Link to comment
Share on other sites

Цитата

Подскажите как правильно прикрутить - чтоб бот общалься с одни юзером, а остольным, кто пишет ему, отправлял определенное сообщение


Поздно заметил Ваш вопрос. Все-таки поделюсь.
В своем проекте использовал следующую простую конструкцию, помещенную в самом конце скрипта:

[ $USER = $NAMEA ] || send_message "$TARGET" "Sorry. Private bot"
[ $USER = $NAMEA ] && send_message "$TARGET" "$msg"

Заменив строку

send_message "$TARGET" "$msg"
  Переменная NAMEA задается в начале скрипта и хранит значение Вашего username, взятого из Telegram
Edited by exared
  • Upvote 1
Link to comment
Share on other sites

ага. спс . попробую так,

Сам решил так.

добавил еще одно условие

if [ $USER = "тут имя" ]; then

а потом далее оригинал скрипта

        if [ $OFFSET != 1 ]; then
                case $MESSAGE in
..........................

...................................
                    *) msg="$MESSAGE";;

                esac
                send_message "$TARGET" "$msg"
            fi
        else

            send_message "$TARGET" "Соробщение ограничения."

          fi 

 

Link to comment
Share on other sites

В 23.12.2017 в 15:24, exared сказал:

Подскажите, как реализовать перенос строки в сообщениях от бота Telegram? Ни один из способов не работает: /n \n %0A /r/n

У меня работает просто enter в скрипте между ' '

типа:

'blablabla
blablabla'

в telegram прилетает 2 строки.

  • Thanks 1
Link to comment
Share on other sites

  • 2 weeks later...
В 27.06.2016 в 08:30, emlen сказал:

Доброго дня! А в этом боте можно свои кнопки сделать? Если да, то как?

Добавьте в скрипт приведенную ниже функцию, предварительно задав новую переменную KMSG_URL:

KMSG_URL=$URL'/sendMessage'

 

function send_keyboard {
    local text="$1"; shift 1; local keyboard=init
    OLDIFS=$IFS; IFS=$(echo -en "\"")
    for f in $*;do [ "$f" != " " ] && local keyboard="$keyboard, [\"$f\"]";done
    IFS=$OLDIFS; local keyboard=${keyboard/init, /}
    res=$(curl -s "$KMSG_URL" --header "content-type: multipart/form-data" -F "chat_id=$TARGET" -F "text=$text" -F "reply_markup={\"keyboard\": [$keyboard],\"one_time_keyboard\": false}")
}
Скрытый текст

c87484e3e4258cd7b4bfe58d0f93b829.png


Аргументы функции: первый - сообщение в чате, последующие - надписи на кнопках. При нажатии на кнопку соответствующая надпись может быть использована как команда. Поэтому кириллица в аргументах функции (кроме первого) нежелательна.
Поле one_time_keyboard указывает клиенту скрыть или нет клавиатуру после использования (после нажатия на кнопку). Её по-прежнему можно будет открыть через иконку в поле ввода сообщения. По умолчаниюFalse
Пример использования:

send_keyboard "I can help you find and share classical music" "Get random music" "Send music to friends"



 

Edited by exared
  • Upvote 3
Link to comment
Share on other sites

  • 1 month later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...