Александр Рыжов Posted February 25, 2018 Author Share Posted February 25, 2018 18 часов назад, emlen сказал: А как -то можно локальное фото отправлять? Да. 1 Quote Link to comment Share on other sites More sharing options...
Fedor V Posted March 14, 2018 Share Posted March 14, 2018 Spoiler BusyBox v1.27.2 () built-in shell (ash) ~ # /opt/etc/storage/tg_say.sh -sh: /opt/etc/storage/tg_say.sh: not found ~ # Помогите понять, что это за ошибка. Все установлено, что ему еще не хватает? Даже просто скрипт с wget идет с ошибкой. Первый раз начал работать с такими скриптами, прошу не пинать. Quote Link to comment Share on other sites More sharing options...
slava.trifonov Posted March 21, 2018 Share Posted March 21, 2018 С точки начинай. ./opt/blabla Или путь должен быть в path (Где-то я уже слышал эту шутку про путь и path) Quote Link to comment Share on other sites More sharing options...
emlen Posted March 22, 2018 Share Posted March 22, 2018 В 25.02.2018 в 19:36, Александр Рыжов сказал: Да. А есть примеры использования? Quote Link to comment Share on other sites More sharing options...
Fedor V Posted March 22, 2018 Share Posted March 22, 2018 12 hours ago, slava.trifonov said: С точки начинай. ./opt/blabla Или путь должен быть в path Аналогично. Не помогает. Quote Link to comment Share on other sites More sharing options...
Александр Рыжов Posted March 22, 2018 Author Share Posted March 22, 2018 7 часов назад, emlen сказал: А есть примеры использования? Да. Quote Link to comment Share on other sites More sharing options...
emlen Posted April 16, 2018 Share Posted April 16, 2018 кто как решает вопрос с блокировкой на bashbot? как-то завернуть только его на тор можно? Quote Link to comment Share on other sites More sharing options...
emlen Posted April 16, 2018 Share Posted April 16, 2018 7 минут назад, r13 сказал: ценное замечание))) а всетаки по поводу торушки? Quote Link to comment Share on other sites More sharing options...
r13 Posted April 16, 2018 Share Posted April 16, 2018 (edited) 23 минуты назад, emlen сказал: ценное замечание))) а всетаки по поводу торушки? а по поводу тора, то что в профильной теме описано, ip сабжа в ipset , dnsы в dnsmasq который будет их транслировать в ipsetы и правила iptables с редиректом всего этого счастья в тор прокси. по типу такого https://github.com/blackcofee/rublock-tor/wiki/Home-RU Edited April 16, 2018 by r13 2 Quote Link to comment Share on other sites More sharing options...
Павел Posted April 20, 2018 Share Posted April 20, 2018 (edited) Доброго времени суток. На ентваре стоит Тор из этой статьи, вариант 1. Работает замечательно. Можноли как-то что башбот работал через прокси? Edited April 20, 2018 by Павел Quote Link to comment Share on other sites More sharing options...
emlen Posted April 21, 2018 Share Posted April 21, 2018 Доброго времени суток. На ентваре стоит Тор из этой статьи, вариант 1. Работает замечательно. Можноли как-то что башбот работал через прокси?типа если статью из предыдущего сообщения под нас перекроить, кто бы из знающих хаутуху запилилGIGA II Quote Link to comment Share on other sites More sharing options...
emlen Posted May 5, 2018 Share Posted May 5, 2018 вообщем все оказалось очень просто, параметр --socks5 в вызове curl и дело в шляпеGIGA II Quote Link to comment Share on other sites More sharing options...
emlen Posted May 12, 2018 Share Posted May 12, 2018 не очень жизнеспособно получилось, почему-то при работающем торе проц занят на 100 процентов((GIGA II Quote Link to comment Share on other sites More sharing options...
Павел Posted May 21, 2018 Share Posted May 21, 2018 (edited) есть такое дело, грузиться прилично. И может только у меня: скрипт запускаеться, но не работает - бот не отвечает, файлы не изменял ни как(не считая параметр --socks5) с момента как он перестал работать из-за блокириовки. Edited May 21, 2018 by Павел дополнил Quote Link to comment Share on other sites More sharing options...
John9110 Posted June 1, 2018 Share Posted June 1, 2018 (edited) В 10.01.2018 в 00:12, exared сказал: Скрытый текст Добавьте в скрипт приведенную ниже функцию, предварительно задав новую переменную 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}") } Скрыть содержимое Аргументы функции: первый - сообщение в чате, последующие - надписи на кнопках. При нажатии на кнопку соответствующая надпись может быть использована как команда. Поэтому кириллица в аргументах функции (кроме первого) нежелательна.Поле one_time_keyboard указывает клиенту скрыть или нет клавиатуру после использования (после нажатия на кнопку). Её по-прежнему можно будет открыть через иконку в поле ввода сообщения. По умолчаниюFalse Пример использования: send_keyboard "I can help you find and share classical music" "Get random music" "Send music to friends" Может поможете, как использовать Inline keyboard? Edited June 1, 2018 by John9110 Quote Link to comment Share on other sites More sharing options...
ankar84 Posted June 7, 2018 Share Posted June 7, 2018 (edited) Мне с помощью телеграм бота хочется реализовать такого помощника, который всегда под рукой, который помогает решать если не повседневные, то наиболее частые задачи. Основное - хочется в моменте получать от бота сообщения, о том, что кто-то успешно или не успешно подключается на WebUI, по FTP или подключается к серверу VPN. В качестве команд, которые нужно отдавать боту наиболее интересна перезагрузка роутера и добавление торрента на закачку через URL на торрент файл. Что уже сделал. # vi /opt/bin/tg_say.sh # chmod +x /opt/bin/tg_say.sh tg_say.sh: #!/opt/bin/bash API_TOKEN='токен моего бота' CHAT_ID='айди моего с ботом чата' if [ -z "$CHAT_ID" ]; then echo 'Please, define CHAT_ID first! See "chat":{"id":xxxxxxx string below:' /opt/bin/wget -qO - https://api.telegram.org/bot$API_TOKEN/getUpdates exit 1 fi MSG="<b>$(hostname)</b>: $@" /opt/bin/wget -q "https://api.telegram.org/bot$API_TOKEN/sendMessage?chat_id=$CHAT_ID&parse_mode=html&text=$MSG" 2>&1 if [ $? -eq 0 ]; then echo 'Message sent successfully.' else echo 'Error while sending message!' exit 1 fi Поправил /opt/etc/init.d/S51bashbot как тут рекомендовали с установкой screen через opkg install screen #!/bin/sh ENABLED=yes PROCS=bashbot.sh ARGS="" PREARGS="screen -dmS bashbot.socket" DESC=$PROCS PATH=/opt/sbin:/opt/bin:/opt/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin . /opt/etc/init.d/rc.func И теперь пробую править bashbot.sh с помощью наработок и советов этой темы: #!/opt/bin/bash TOKEN='токен моего бота' NAMEA='мой логин в телеграм' URL='https://api.telegram.org/bot'$TOKEN MSG_URL=$URL'/sendMessage?chat_id=' UPD_URL=$URL'/getUpdates?offset=' KMSG_URL=$URL'/sendMessage' OFFSET=0 TIMEOUT='&timeout=30' function send_message { res=$(curl --insecure --data-urlencode "text=$2" "$MSG_URL$1&") } 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\": true}") } while true; do { res=$(curl --insecure $UPD_URL$OFFSET$TIMEOUT) TARGET=$(echo $res | JSON.sh | egrep '\["result",0,"message","chat","id"\]' | cut -f 2) OFFSET=$(echo $res | JSON.sh | egrep '\["result",0,"update_id"\]' | cut -f 2) MESSAGE=$(echo $res | JSON.sh -s | egrep '\["result",0,"message","text"\]' | cut -f 2 | cut -d '"' -f 2) USER=$(echo $res | JSON.sh | egrep '\["result",0,"message","from","username"\]' | cut -f 2 | cut -d '"' -f 2) [ -z "$MESSAGE" ] || echo "[$(date +%Y.%m.%d_%H:%M:%S)][$USER] $MESSAGE" >> /opt/var/log/bashbot.log OFFSET=$((OFFSET+1)) tail -f с | \ while read line ; do if [[ $line =~ "ndm: Core::Scgi::Auth: authentication failed for user" ]] ; then /opt/bin/tg_say.sh "$line"; fi done if [ $OFFSET != 1 ]; then case $MESSAGE in '/help') send_keyboard "Bot knows commands:" "/help" "/top" "/meminfo" "/cpuinfo" "/uname" "/log";; '/start') msg="Just few commands are implemented. Blame @ryzhov_al if something goes wrong.";; '/top') msg="$(top -n1 | head -n3)";; '/meminfo') msg="$(cat /proc/meminfo)";; '/cpuinfo') msg="$(cat /proc/cpuinfo)";; '/uname') msg="$(uname -a)";; '/log') msg="$(cat /opt/var/log/bashbot.log)";; *) msg=$(ndmq -p "$MESSAGE" -x);; esac [ $USER = $NAMEA ] || send_message "$TARGET" "Sorry. Private bot" [ $USER = $NAMEA ] && send_message "$TARGET" "$msg" fi } &>/dev/null; done Но в таком виде сообщения о не успешной авторизиции приходят, но бот не реагирует на посылаемые ему команды. Я не очень понимаю, где мне брать журнал "реального времени". То есть для сбора логов у меня в Entware установлен syslog-ng, который собирает все логи и пишет их в файл (/opt/var/log/syslog.log) но в этом случае получается, что стоит мне перезапустить бота и он тут же высыпет мне россыпь сообщений о неудачной авторизации в WebUI (мои предыдущие тесты). А мне хочется, что бы бот начал смотреть "живой" лог роутера и парсил его на лету. Файлов в /var/log/ у меня нет. В общем, сейчас 2 проблемы - совместить в одном скрипте бота ответы на мои запросы и понять как парсить живой лог роутера. UPD: Кажется первая проблема решена с помощью параметра -n 0 команды tail. Теперь бот реагирует только на актуальные события, которые произошли после его запуска, а не на все, что нашел в логе. То есть часть парсера логов теперь выглядит вот так: tail -f -n 0 /opt/var/log/syslog.log | while read line ; do if [[ $line =~ "ndm: Core::Scgi::Auth: authentication failed for user" ]] ; then /opt/bin/tg_say.sh "$line"; fi done Edited June 7, 2018 by ankar84 1 Quote Link to comment Share on other sites More sharing options...
ankar84 Posted June 8, 2018 Share Posted June 8, 2018 В итоге полное решение на данный момент это вынесение оповещательной части бота в отдельный сервис (демон). По аналогии создал /opt/bin/bashbotevent.sh: #!/opt/bin/bash tail -f -n 0 /opt/var/log/syslog.log | while read line ; do if [[ $line =~ "ndm: Core::Scgi::Auth: authentication failed for user" ]] ; then /opt/bin/tg_say.sh "$line"; fi done В этот скрипт со временем будут добавлять реакции на нужные мне события. И создал новый /opt/etc/init.d/S52bashbotevent: #!/bin/sh ENABLED=yes PROCS=bashbotevent.sh ARGS="" PREARGS="screen -dmS bashbot.socket" DESC=$PROCS PATH=/opt/sbin:/opt/bin:/opt/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin . /opt/etc/init.d/rc.func Оба сделал исполняемыми chmod +x /opt/bin/bashbotevent.sh chmod +x /opt/etc/init.d/S52bashbotevent И после # /opt/etc/init.d/S52bashbotevent start Бот реагирует и на команды и присылает сообщения о не успешных попытках авторизации. Quote Link to comment Share on other sites More sharing options...
John9110 Posted July 10, 2018 Share Posted July 10, 2018 допилил бота, теперь при получении серого ip отправляет клавиатурку с возможностью перезапустить интерфейс. Скрытый текст #!/opt/bin/bash TOKEN='' URL='https://api.telegram.org/bot'$TOKEN MSG_URL=$URL'/sendMessage?chat_id=' UPD_URL=$URL'/getUpdates?offset=' update_id=0 TARGET= #chat_id KMSG_URL=$URL'/sendMessage' proxy='--socks5 127.0.0.1:9055' # TOR send_fw_avalible=0 send_message() { if [[ -z $3 ]] then res1=$(curl $proxy -s -X POST -H "Charset: UTF-8" $URL/sendMessage -d chat_id=$1 -d "text=$2") else if [[ $3 == 'inline_keyboard' ]] then inline_keyboard='{"inline_keyboard":[ [{"text":"'$4'","callback_data":"'$5'"}, {"text":"'$6'","callback_data":"'$7'"}] ]}' res=$(curl $proxy -s -X POST -H "Charset: UTF-8" $URL/sendMessage -d chat_id=$1 -d "reply_markup=${inline_keyboard}" -d "text=$2") fi fi } edit_message () { res=$(curl $proxy -s -X POST -H "Charset: UTF-8" $URL/editMessageText -d chat_id=$callback_query_message_chat_id -d message_id=$callback_query_message_message_id -d "text=$1") } while true; do { res='' until [[ -n $res ]]; do { res=$(curl $proxy $UPD_URL$update_id) } done update_id=$(echo $res | JSON.sh | egrep '\["result",0,"update_id"\]' | cut -f 2) callback_query=$(echo -e $res | JSON.sh | egrep '\["result",0,"callback_query"\]' | cut -f 2) callback_query_data=$(echo -e $res | JSON.sh | egrep '\["result",0,"callback_query","data"\]' | cut -f 2 | cut -d '"' -f 2) callback_query_id=$(echo $res|JSON.sh|egrep '\["result",0,"callback_query","id"\]' | cut -f 2) callback_query_message_chat_id=$(echo $res|JSON.sh|egrep '\["result",0,"callback_query","message","chat","id"\]' | cut -f 2) callback_query_message_message_id=$(echo $res|JSON.sh|egrep '\["result",0,"callback_query","message","message_id"\]' | cut -f 2) callback_query_message_text=$(echo -e $res|JSON.sh|egrep '\["result",0,"callback_query","message","text"\]' | cut -f 2 | cut -d '"' -f 2) message_from_id=$(echo $res|JSON.sh|egrep '\["result",0,"message","from","id"\]' | cut -f 2) message_text=$(echo -e $res|JSON.sh|egrep '\["result",0,"message","text"\]' | cut -f 2 | cut -d '"' -f 2) message=$(echo -e $res|JSON.sh|egrep '\["result",0,"message"\]' | cut -f 2) update_id=$((update_id+1)) # # # commands if [ $update_id != 1 ] then if [[ $message_from_id == $TARGET || $callback_query_message_chat_id == $TARGET ]] then if [[ -n $callback_query ]] then curl $proxy -s $URL/answerCallbackQuery?callback_query_id=$callback_query_id case $callback_query_data in 'Breboot') edit_message "Сейчас будет произведен перезапуск интерфейса." ndmq -p 'interface PPPoE0 down' -P MESSAGE sleep 1 ndmq -p 'interface PPPoE0 up' -P MESSAGE sleep 10 ndmq -p 'ndns get-update auto' -P MESSAGE /opt/etc/init.d/S35tor restart ;; 'Bnoreboot') edit_message "Перезапуск интерфейса не произведен. Вы можете выполнить перезапуск вручную." ;; *) ;; esac fi if [[ -n $message ]] then case $message_text in '/start') send_message "$message_from_id" "Старт" ;; '/info') ;; '/reboot') send_message "$message_from_id" "Сейчас будет произведен перезапуск интерфейса." ndmq -p 'interface PPPoE0 down' -P MESSAGE sleep 1 ndmq -p 'interface PPPoE0 up' -P MESSAGE sleep 10 ndmq -p 'ndns get-update auto' -P MESSAGE ;; *) send_message "$message_from_id" "$message_text" "inline_keyboard" "Yes" "BYes" "No" "bNo";; esac fi else echo "[$(date +%Y.%m.%d_%H:%M:%S)][$message_from_id][$message_text]" >> /opt/var/log/bashbot.log send_message "$message_from_id" "Это приватный бот, доступ запрещен!" fi else fw_installed=$(ndmq -p 'components list beta' -x | egrep -m 1 '\<installed>'|cut -d ">" -f 2|cut -d "<" -f 1) fw_avalible=$(ndmq -p 'components list beta' -x | egrep -m 1 '\<version>'|cut -d ">" -f 2|cut -d "<" -f 1) if [[ "$fw_installed" != "$fw_avalible" && "$send_fw_avalible" == 0 ]] then send_message "$TARGET" "Возможно доступно обновление прошивки роутера." send_fw_avalible=1 fi ip_web=$(curl https://wtfismyip.com/text) #curl'ом с сайта вытаскиваем ip-адрес ip_local=$(ndmq -p 'show interface PPPoE0' -x|grep address|cut -d ">" -f 2|cut -d "<" -f 1) ip_temp=$(tail -n 1 /opt/root/TempIP) if [[ -n "$ip_web" && -n "$ip_local" ]] then if [[ "$ip_web" == "$ip_local" ]] then if [[ "$ip_local" != "$ip_temp" ]] then echo $ip_local> /opt/root/TempIP send_message "$TARGET" "Ваш новый белый IP-адрес $ip_local" fi else if [[ "$ip_local" != "$ip_temp" ]] then echo $ip_local> /opt/root/TempIP send_message "$TARGET" "Обнаружен серый IP-адрес. Перезапустить интерфейс?" "inline_keyboard" "Yes" "Breboot" "No" "Bnoreboot" fi fi else send_message "$TARGET" "Не удалось получить IP-адрес: IP_Web=$ip_web IP_Local=$ip_local" fi fi } &>/dev/null; done 4 Quote Link to comment Share on other sites More sharing options...
exared Posted July 10, 2018 Share Posted July 10, 2018 (edited) Цитата Мне с помощью телеграм бота хочется реализовать такого помощника, который всегда под рукой, который помогает решать если не повседневные, то наиболее частые задачи. Возможно, одной из интересных возможностей, которую можно добавить в функционал такого помощника, будет система домашней охранной сигнализации. Реализация данной функции предполагает подключение (пайку) трех контактов простейшего датчика движения к монтажной плате роутера. Соответственно, два контакта датчика должны быть подключены к питающему напряжению роутера, сигнальный контакт - к распаянной на плате функциональной кнопке. Скрытый текст Внимание! При осуществлении указанных здесь действий по аппаратной модернизации роутера вы лишаетесь гарантии на ваше устройство и рискуете вывести его из строя. Если у вас нет необходимого навыка, паяльной станции и тестера, то лучше не рисковать работоспособностью устройства. При грамотной доработке вашего роутера вы получаете вполне рабочую систему домашней охранной сигнализации, функционал которой включает в себя: 1. Отправку сообщения о наличии движения в ваше отсутствие в чат/чаты Telegram 2. Отправку в чат/чаты фотоснимка/серии снимков/видеозаписи интересующего вас участка квартиры после срабатывания датчика (требуется IP камера) 3. Автоматическое отключение/включение рассылки тревожных сообщений во время присутствия/отсутствия дома вас и ваших близких 4. Простейший лог тревожных событий Установите недостающий пакет: opkg install curl Обеспечьте жизнеспособность вашего бота в изменчивом мире, следуя рекомендациям из этой темы: Создайте на роутере файл /opt/etc/ndm/button.d/buttons.sh со следующим содержимым: #!/opt/bin/bash TOKEN='token' URL='https://api.telegram.org/bot'$TOKEN MSG_URL=$URL'/sendMessage' CHATIDA='CHAT_ID_1'; CHATIDB='CHAT_ID_2' MACA='00:00:00:00:00:00'; MACB='11:11:11:11:11:11' grp() { res=$(ndmq -x -p "show associations"|grep $1) } smg() { res=$(curl --socks5 admin:password@127.0.0.1:63128 -s "$MSG_URL" -d "chat_id=$2" -d "text=$1" -d "parse_mode=markdown" -d "disable_web_page_preview=true") &> /dev/null } if grp $MACA; then exit 0; fi if grp $MACB; then exit 0; fi smg "_Обнаружено движение!_" "$CHATIDA" smg "_Обнаружено движение!_" "$CHATIDB" echo "$(date +"%c") MODET!" >> /opt/var/log/bashbot.log Здесь CHAT_ID_1, CHAT_ID_2 - ID чатов, в которые отправляется тревожное сообщение MACA, MACB - MAC адреса телефонов, при регистрации которых в домашней беспроводной сети, тревожные сообщения о движении не отправляются. Сделайте скрипт исполняемым: chmod +x /opt/etc/ndm/button.d/buttons.sh Измените в интерфейсе роутера назначение задействованной в проекте кнопки на "OPKG - Запуск скриптов button.d" Теперь при нажатии на клавишу роутера или при срабатывании датчика вам и вашим близким придет сообщение в чат Telegram. При наличии свободной IP камеры, поддерживающей отправку фотоснимка через SFTP по команде, вы можете реализовать отправку в чат/чаты фотоснимка/серии снимков/видеозаписи интересующего вас участка квартиры после срабатывания датчика. Я, например, реализовал эту функцию с помощью программы IP Webcam, установленной на старый смартфон с Android на борту. Телефон, расположенный рядом с датчиком, в данном случае играет роль указанной выше IP камеры. Конечно, большинство IP камер имеют собственный датчик движения, но приведенное здесь решение все же имеет ряд преимуществ. В этом случае в скрипт могут быть добавлены несколько строк. В моем случае, к примеру: #!/opt/bin/bash TOKEN='token' URL='https://api.telegram.org/bot'$TOKEN MSG_URL=$URL'/sendMessage' CHATIDA='CHAT_ID_1'; CHATIDB='CHAT_ID_2' MACA='00:00:00:00:00:00'; MACB='11:11:11:11:11:11'; MACD='22:22:22:22:22:22' COM_URL='http://user:password@192.168.0.2:8088/photo_save_only.jpg' grp() { res=$(ndmq -x -p "show associations"|grep $1) } smg() { res=$(curl --socks5 admin:password@127.0.0.1:63128 -s "$MSG_URL" -d "chat_id=$2" -d "text=$1" -d "parse_mode=markdown" -d "disable_web_page_preview=true") &> /dev/null } if grp $MACA; then exit 0; fi if grp $MACB; then exit 0; fi if grp $MACD; then smg "_Обнаружено движение!_" "$CHATIDA" smg "_Обнаружено движение!_" "$CHATIDB" /opt/bin/curl -s $COM_URL else smg "_Обнаружено движение! Камера оффлайн_" "$CHATIDA" smg "_Обнаружено движение! Камера оффлайн_" "$CHATIDB"; fi echo "$(date +"%c") MODET!" >> /opt/var/log/bashbot.log Здесь MACD - MAC адрес телефона с установленной IP Webcam. COM_URL - отправляемый для создания снимка HTTP запрос, в котором присутствуют данные для авторизации и IP адрес устройства. Отправлять в чат различные графические файлы, полученные по SFTP, можно, к примеру, используя следующую конструкцию в основном скрипте bashbot.sh: TOKEN='token'' URL='https://api.telegram.org/bot'$TOKEN PHO_URL=$URL'/sendPhoto' CHATIDA='CHAT_ID_1' SDIR="/opt/alarm/*" sph() { res=$(curl --socks5 admin:password@127.0.0.1:63128 -s -X POST $PHO_URL -F chat_id=$2 -F photo="@$1") &> /dev/null } slg() { res=$(echo "$(date +"%c") $1" >> /opt/var/log/bashbot.log) } for FILE in $SDIR; do filename=$(basename "$FILE"); ext="${filename##*.}" case $ext in jpg) sph "$FILE" "$CHATIDA"; slg "$ext";; png) sph "$FILE" "$CHATIDA"; slg "$ext";; gif) sph "$FILE" "$CHATIDA"; slg "$ext";; *) esac; rm -f $FILE; done fi Здесь SDIR - папка, в которую складываются полученные по SFTP графические файлы. Еще немного дополнив скрипт, можно добавить более точные и сложные условия отключения/включения рассылки тревожных сообщений или управлять этими условиями из чата, включать бытовую технику с поддержкой WoL в момент вашего прихода домой, реализовать возможность использования нормально закрытых датчиков на герконах (электропитание им не требуется) в дополнение к датчику движения (соответственно, может быть организовано до трех раздельных независимых зон охраны), и многое другое. Удачи в ваших проектах! Edited July 10, 2018 by exared 3 Quote Link to comment Share on other sites More sharing options...
Александр Рыжов Posted July 10, 2018 Author Share Posted July 10, 2018 25 минут назад, exared сказал: Реализация данной функции предполагает подключение (пайку) трех контактов простейшего датчика движения к монтажной плате роутера. Соответственно, два контакта датчика должны быть подключены к питающему напряжению роутера, сигнальный контакт - к распаянной на плате функциональной кнопке. Просто как вариант: Чтобы не трогать плату и корпус роутера, я делал аналогичную штуку с помощью начинки из старой USB-клавиатуры, платка из неё довольно миниатюрна. На кинетике она будет определяться как HID-устройство, а события отлавливаться с помощью triggerhappy. Модули USB HID в кинетиковской прошивке есть. 4 Quote Link to comment Share on other sites More sharing options...
exeigor Posted January 31, 2019 Share Posted January 31, 2019 Есть возможность добавить второй логин в bashbot.sh и что для этого требуется сделать?! Quote Link to comment Share on other sites More sharing options...
Quendi Posted February 22, 2022 Share Posted February 22, 2022 Подскажите, а можно реализовать такую штуку, что бы по отправке сообщения в ТГ боту по заданному адресу создавался файл с заданным содержанием(текстом)? Quote Link to comment Share on other sites More sharing options...
evgeny1503 Posted March 2, 2022 Share Posted March 2, 2022 Ктонибудь ещё пользуется ботом? Перестал работать tg_say.sh(или wget и curl) Если сформированную им ссылку напрямую скормить wget'y, то ответ приходит: 400 bad request Если эту же ссылку напрямую в браузер вставить, то все нормально проходит. Quote Link to comment Share on other sites More sharing options...
MercuryV Posted March 2, 2022 Share Posted March 2, 2022 Можно, например, через curl #!/bin/sh CURL_BIN="/opt/bin/curl -m 600 -k -i -X GET" API_TOKEN="" CHAT_ID="" ROUTER_NAME=$(/opt/bin/uname -n) MSG="<b>$ROUTER_NAME</b>: $@" MSG2=${MSG// /%20} infomsg=$($CURL_BIN "https://api.telegram.org/bot$API_TOKEN/sendMessage?chat_id=$CHAT_ID&parse_mode=HTML&text=$MSG2" 2>&1) 1 Quote Link to comment Share on other sites More sharing options...
evgeny1503 Posted March 5, 2022 Share Posted March 5, 2022 Ещё вопрос. bashbot.sh настроил на двух юзеров. У одного (андроид) всегда доступна кнопка дополнительной клавиатуры с командами для роутера, у другого(айфон) клава появляется только если написать /start, соответственно после выбора любой из команд клава пропадает и не появляется даже кнопочки для ее вызова. Почему так происходит? Quote Link to comment Share on other sites More sharing options...
Playmax Posted April 18, 2022 Share Posted April 18, 2022 (edited) В 28.01.2016 в 13:56, Александр Рыжов сказал: Можно организовать чат с роутером, словно вы находитесь в CLI кинетика. http://s017.radikal.ru/i433/1601/86/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 April 18, 2022 by Playmax Все получилось Quote Link to comment Share on other sites More sharing options...
CJMAXiK Posted June 16, 2022 Share Posted June 16, 2022 В 06.02.2022 в 15:10, kilia сказал: всем привет! Развернут Entware и настроен выборочный обход блокировок. Есть скрипт, который лежит в /opt/bin/unblock_vpn.sh. Есть ли способ послать команду боту типа /update, а бот запустил этот скрипт? Я сделал примерно вот так: Скрытый текст [..] DOMAIN_LIST='/opt/etc/unblock.txt' UNBLOCK_UPDATE='/opt/bin/unblock_update.sh' [..] case $MESSAGE in '/list') msg="$(cat /opt/etc/unblock.txt)";; '/add') msg="Send a hostname without https://";; '/remove') msg="Send a hostname without https://";; '/add '*) site="${MESSAGE:5}" sed -i "/$site/d" $DOMAIN_LIST echo "$site" >> $DOMAIN_LIST sh $UNBLOCK_UPDATE msg="Added $site to the list!" ;; '/remove '*) site="${MESSAGE:8}" sed -i "/$site/d" $DOMAIN_LIST sh $UNBLOCK_UPDATE msg="Removed '$site' from the list" ;; '/restart') sh $UNBLOCK_UPDATE msg="Service has been restarted" ;; *) msg="$MESSAGE";; esac send_message "$TARGET" "$msg" Quote Link to comment Share on other sites More sharing options...
shildik Posted September 24, 2022 Share Posted September 24, 2022 Всем привет! А можно где-нибудь посмотреть лог запуска и работы бота? Устанавливал всё по инструкции из первого поста, токен вписал, строчку с message заменил, запускается нормально, по команде /opt/etc/init.d/S51bashbot check пишет alive. Но не реагирует ни на какие стандартные сообщения, /start /top / meminfo - на всё в ответ тишина. Лог с сообщениями в папке /opt/var/log/bashbot.log тоже не появляется. Может, он на старых роутерах и не должен работать? - keenetic III, 2.11.D.10.0-3 tgsay при этом функционирует исправно, шлёт кое-какие события из стандартного журнала роутера. Quote Link to comment Share on other sites More sharing options...
Rodstvennik63 Posted May 23, 2023 Share Posted May 23, 2023 Ребят, знающие и понимающие, помогите, пожалуйста. Да, тема зачахла немного, но, может быть, её кто-то мониторит из старожилов. Бот у меня работает и почти выполняет свои функции. Задача: сидеть в чате CLI с роутером; сидеть в чате с модемом (at командами); выполнять команды, заранее заготовленным списком. И вот проблема, что в любой из основных задач присутствуют команды на перезагрузку, либо роутера, либо интерфейса, либо модема, для применения. И как только бот выполняет такую задачу, всё идет по одному известному месту. Либо роутер, либо интерфейс, либо модем, падают в бутлуп. Как только бот даст команду на выполнение команды, которая влечет за собой пропадание интернета, он дожидается его восстановления и посылает команду снова. Как это можно обойти? Может как-то можно дать ему условие, что получение результата выполнения команды - не обязательно. Мол получил ответ - замечательно, вывел. Не получил - тоже ничего. Или как-то сделать, что для определенных команд, не требуется подтверждение выполнения? Буду рад помощи. Quote Link to comment Share on other sites More sharing options...
Mastersland Posted May 26, 2023 Share Posted May 26, 2023 В 23.05.2023 в 19:14, Rodstvennik63 сказал: Ребят, знающие и понимающие, помогите, пожалуйста. Да, тема зачахла немного, но, может быть, её кто-то мониторит из старожилов. Бот у меня работает и почти выполняет свои функции. Задача: сидеть в чате CLI с роутером; сидеть в чате с модемом (at командами); выполнять команды, заранее заготовленным списком. И вот проблема, что в любой из основных задач присутствуют команды на перезагрузку, либо роутера, либо интерфейса, либо модема, для применения. И как только бот выполняет такую задачу, всё идет по одному известному месту. Либо роутер, либо интерфейс, либо модем, падают в бутлуп. Как только бот даст команду на выполнение команды, которая влечет за собой пропадание интернета, он дожидается его восстановления и посылает команду снова. Как это можно обойти? Может как-то можно дать ему условие, что получение результата выполнения команды - не обязательно. Мол получил ответ - замечательно, вывел. Не получил - тоже ничего. Или как-то сделать, что для определенных команд, не требуется подтверждение выполнения? Буду рад помощи. вот тут бот немного для другого, но если необходимо его можно допилить для работы выполнения "левых" команд. Просто это с точки зрения безопасности дырка)) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.