|
02.12.2017, 18:49 | #1 |
Senior Member
Регистрация: 20.01.2015
Сообщений: 312
Вес репутации: 443 |
Telegram bot для Openwrt
Наткнулся на полезный проект -
https://github.com/ZigFisher/Glutini...master/tg-bot1 не упускаю возможности поделиться с общественностью Для тех кто понимает, можно прикрутить любые скрипты на любые команды в телеграмм. Чтобы установить нужно просто раскидать по папкам содержимое files, не забыть дать исполняемым скриптам права на исполнение. Из зависимостей нужен curl. потом редактируем etc/config/telegram option token - токен бота option rupor - id группы option start меняем на единичку, если нужно запускать. Сначала создаем группу, потом узнаем ее ID, прописываем его в конфиг бота, перезапускаем, после этого можно добавлять бота в группу. в папке usr/bin - примеры скриптов, можно редактировать для собственных целей. Последний раз редактировалось solalex; 02.12.2017 в 18:51. |
06.01.2018, 10:04 | #2 |
Junior Member
Регистрация: 06.01.2018
Адрес: Петербург
Сообщений: 4
Вес репутации: 0 |
Telegram bot для Openwrt
Отпишусь пожалуй тут.
Заинтересовал меня этот проект тем что практически ничего на OpenWRT не нужно ставить лишнего из зависимостей действительно только curl и jsonfilter. Обычный sh -скрипт. Работать сразу он у меня правда не захотел. Тк скрипт написан для общения тет а тет и не обрабатывает запросы если они идут из канала. Плюс небольшие помарки в скрипте и он не парсил json строку ответа правильно. Удалось таки разобраться что к чему. Не очень я силен в скриптах sh, так что пришлось немного повозиться. Теперь все работает и бот работает именно так как задумал автор. Если кому-то нужно могу подсказать что к чему. |
06.01.2018, 11:51 | #3 | |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Цитата:
|
|
07.01.2018, 10:51 | #4 |
Junior Member
Регистрация: 06.01.2018
Адрес: Петербург
Сообщений: 4
Вес репутации: 0 |
Вот подправленный скрипт. Все вместе, весь проект, zip-архиве telegram_bot.zip или отдельно только скрипт бота -
Развернуть для просмотраКод:
#!/bin/sh # PATH='/usr/bin:/usr/sbin:/bin:/sbin' token=`uci get telegram.bot.token` rupor=`uci get telegram.bot.rupor` start=`uci get telegram.bot.start` api="https://api.telegram.org/bot$token" offset_file=/tmp/telegram_offset if [ "$start" == "0" ]; then echo "Launch of the Telegram_bot is not allowed." | logger -t "telegram_bot" -p daemon.info exit 1 fi sleep 10 #keyboard='{"keyboard": [["/snap \uD83D\uDCF7","/guard \uD83D\uDC6E","/relay \uD83D\uDCA1"],["/system \uD83D\uDCCA","/reboot \uD83D\uDCA9","/menu \uD83D\uDD25"]],"resize_keyboard":true,"one_time_keyboard":false}' curl -k -s -X POST -H "Charset: UTF-8" $api/sendMessage -d chat_id=$rupor -d parse_mode=Markdown --data-urlencode text="Router started." >/dev/null 2>&1 curl -k -s -X POST -H "Charset: UTF-8" $api/sendMessage -d chat_id=$rupor -d "text=Please insert command:" >/dev/null 2>&1 curl -k -s -X POST -H "Charset: UTF-8" $api/sendMessage -d chat_id=$rupor -d "text=/guard /menu /reboot" >/dev/null 2>&1 curl -k -s -X POST -H "Charset: UTF-8" $api/sendMessage -d chat_id=$rupor -d "text=/relay /snap /system" >/dev/null 2>&1 #-d \"reply_markup=${keyboard}\" offset=0 if [ -f "$offset_file" ]; then offset=$( cat $offset_file ) else echo $offset > $offset_file fi reply_to_msg () { msg_id=$1 origin=$2 eval toReturn="$3" curl -k -s -X POST -H "Charset: UTF-8" $api/sendMessage -d reply_to_message_id=$msg_id -d chat_id=$origin -d parse_mode=HTML --data-urlencode text="$toReturn" >/dev/null 2>&1 } while [ true ] do updates=$(curl -s -k -X GET $api/getUpdates?offset=$offset) status=$(jsonfilter -s "$updates" -e '$.ok') if [ $status = 'true' ]; then update_ids=$(jsonfilter -s "$updates" -e '$.result[*].update_id') for update_id in $update_ids do offset=$((update_id+1)) echo $offset > $offset_file origin=$(jsonfilter -s "$updates" -e '$.result[@.update_id='$update_id'].channel_post.chat.id') msg_id=$(jsonfilter -s "$updates" -e '$.result[@.update_id='$update_id'].channel_post.message_id') command=$(jsonfilter -s "$updates" -e '$.result[@.update_id='$update_id'].channel_post.text') is_a_cmd=$(jsonfilter -s "$updates" -e '$.result[@.update_id='$update_id'].channel_post.entities[*].type') query_ans=$(jsonfilter -s "$updates" -e '$.result[@.update_id='$update_id'].callback_query.id') origin_ans=$(jsonfilter -s "$updates" -e '$.result[@.update_id='$update_id'].callback_query.channel_post.chat.id') if [[ "$origin" != "$rupor" && "$origin_ans" != "$rupor" ]];then curl -k -s -X POST -H "Charset: UTF-8" $api/sendMessage -d reply_to_message_id=$msg_id -d chat_id=$origin -d parse_mode=Markdown --data-urlencode text="This is a Private bot." >/dev/null 2>&1 curl -k -s -X POST $api/leaveChat -d chat_id=$origin >/dev/null 2>&1 else if [ "$is_a_cmd" == "bot_command" ]; then cmd=$(echo $command | awk '{print $1}') DATE=`date +%Y-%m-%d_%H:%M:%S` case "$cmd" in ("/guard") echo "[ $DATE ] Run /guard command !" | logger -t "telegram_bot" -p daemon.info informex_guard=$("tg_guard.sh") reply_to_msg $msg_id $origin "\${informex_guard}" ;; ("/menu") echo "[ $DATE ] Run /menu command !" | logger -t "telegram_bot" -p daemon.info curl -k -s -X POST -H "Charset: UTF-8" $api/sendMessage -d chat_id=$rupor -d "text=Please insert command:" >/dev/null 2>&1 curl -k -s -X POST -H "Charset: UTF-8" $api/sendMessage -d chat_id=$rupor -d "text=/guard /menu /reboot" >/dev/null 2>&1 curl -k -s -X POST -H "Charset: UTF-8" $api/sendMessage -d chat_id=$rupor -d "text=/relay /snap /system" >/dev/null 2>&1 #-d "reply_markup=${keyboard}" ;; ("/reboot") echo "[ $DATE ] Run /reboot command !" | logger -t "telegram_bot" -p daemon.info informex_reboot=$("tg_reboot.sh") reply_to_msg $msg_id $origin "\${informex_reboot}" ;; ("/relay") echo "[ $DATE ] Run /relay command !" | logger -t "telegram_bot" -p daemon.info informex_relay=$("tg_relay.sh") reply_to_msg $msg_id $origin "\${informex_relay}" ;; ("/snap") echo "[ $DATE ] Run /snap command !" | logger -t "telegram_bot" -p daemon.info informex_system=$("tg_snap.sh") reply_to_msg $msg_id $origin "\${informex_system}" ;; ("/system") echo "[ $DATE ] Run /system command !" | logger -t "telegram_bot" -p daemon.info informex_system=$("tg_system.sh") reply_to_msg $msg_id $origin "\${informex_system}" ;; (*) echo "[ $DATE ] $cmd command not enabled" | logger -t "telegram_bot" -p daemon.info informex_unknown="This command is not enabled." reply_to_msg $msg_id $origin "\${informex_unknown}" ;; esac else curl -k -s -X POST -H "Charset: UTF-8" $api/sendMessage -d reply_to_message_id=$msg_id -d chat_id=$origin -d parse_mode=Markdown --data-urlencode text="Is not a command." >/dev/null 2>&1 fi fi done fi sleep 1 done & [свернуть] |
07.01.2018, 11:09 | #5 |
Junior Member
Регистрация: 06.01.2018
Адрес: Петербург
Сообщений: 4
Вес репутации: 0 |
Так еще стоит отметить что в данном случае у меня бот привязан к каналу и соответственно слушает и отвечает всем в канале.
Да и еще в оригинале скрипта используется обьект ReplyKeyboardMarkup (клавиатура команд появляющиеся заместо обычной) для канала это не работает - пришлось ее убрать. Долго ковырялся с API не мог понять почему не хочет работать. Оффтоп: Думаю в ближайшее время я перепишу его. Есть идея использовать бота для хостела. Вместо rfid, точнее как дополнение к нему. Пользователь пишет боту. После чего бот сообщает в наш приватный канал от том что к нему обратился такой-то ник. Если человек действительно живет у нас кто-то из нашего приватного канала (из персонала хостела) сообщает боту что все окей и бот добавляет id канала в свою базу разрешенных id. Все человек может спокойно сам управлять шлагбаумом и дверьми. По выезду просто даем команду боту и он стирает id из базы. |
07.01.2018, 11:16 | #6 |
Junior Member
Регистрация: 06.01.2018
Адрес: Петербург
Сообщений: 4
Вес репутации: 0 |
Пожалуй перепишу клавиатуру под InlineKeyboardMarkup будет выводить в канале, но не снизу, а там-же где основные сообщения. Так вроде должно работать.
|
27.01.2018, 01:34 | #7 | |
Junior Member
Регистрация: 27.01.2018
Сообщений: 3
Вес репутации: 0 |
Цитата:
будет ли публичный релиз? наше еще web интерфейс для настройки этого бота от того же автора ссылка Последний раз редактировалось 3km; 27.01.2018 в 01:42. |
|
22.02.2018, 23:05 | #8 |
Junior Member
Регистрация: 22.02.2018
Сообщений: 1
Вес репутации: 0 |
У меня мой телеграм работает нормально и на телефоне и на компьютере.
Просто нужно скачивать его с официального сайта и всё будет нормально. А так я вам скажу очень удобный месенджер. |
07.01.2018, 13:52 | #9 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Спасибо!
|
Здесь присутствуют: 5 (пользователей: 0 , гостей: 5) | |
|
|