Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > OpenWRT/LEDE

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.12.2017, 18:49   #1
solalex
Senior Member
 
Регистрация: 20.01.2015
Сообщений: 312
Вес репутации: 443
solalex has much to be proud ofsolalex has much to be proud ofsolalex has much to be proud ofsolalex has much to be proud ofsolalex has much to be proud ofsolalex has much to be proud ofsolalex has much to be proud ofsolalex has much to be proud ofsolalex has much to be proud of
По умолчанию 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.
solalex вне форума   Ответить с цитированием
Старый 06.01.2018, 10:04   #2
DotBob
Junior Member
 
Регистрация: 06.01.2018
Адрес: Петербург
Сообщений: 4
Вес репутации: 0
DotBob is an unknown quantity at this point
По умолчанию Telegram bot для Openwrt

Отпишусь пожалуй тут.
Заинтересовал меня этот проект тем что практически ничего на OpenWRT не нужно ставить лишнего из зависимостей действительно только curl и jsonfilter. Обычный sh -скрипт.
Работать сразу он у меня правда не захотел. Тк скрипт написан для общения тет а тет и не обрабатывает запросы если они идут из канала.
Плюс небольшие помарки в скрипте и он не парсил json строку ответа правильно.
Удалось таки разобраться что к чему. Не очень я силен в скриптах sh, так что пришлось немного повозиться. Теперь все работает и бот работает именно так как задумал автор. Если кому-то нужно могу подсказать что к чему.
DotBob вне форума   Ответить с цитированием
Старый 06.01.2018, 11:51   #3
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Цитата:
Если кому-то нужно могу подсказать что к чему.
Подскажи. Можешь выложить подправленный скрипт?
Admin вне форума   Ответить с цитированием
Старый 07.01.2018, 10:51   #4
DotBob
Junior Member
 
Регистрация: 06.01.2018
Адрес: Петербург
Сообщений: 4
Вес репутации: 0
DotBob is an unknown quantity at this point
По умолчанию

Вот подправленный скрипт. Все вместе, весь проект, 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 &
[свернуть]
DotBob вне форума   Ответить с цитированием
Старый 07.01.2018, 11:09   #5
DotBob
Junior Member
 
Регистрация: 06.01.2018
Адрес: Петербург
Сообщений: 4
Вес репутации: 0
DotBob is an unknown quantity at this point
По умолчанию

Так еще стоит отметить что в данном случае у меня бот привязан к каналу и соответственно слушает и отвечает всем в канале.
Да и еще в оригинале скрипта используется обьект ReplyKeyboardMarkup (клавиатура команд появляющиеся заместо обычной) для канала это не работает - пришлось ее убрать. Долго ковырялся с API не мог понять почему не хочет работать.

Оффтоп:
Думаю в ближайшее время я перепишу его. Есть идея использовать бота для хостела. Вместо rfid, точнее как дополнение к нему.
Пользователь пишет боту. После чего бот сообщает в наш приватный канал от том что к нему обратился такой-то ник. Если человек действительно живет у нас кто-то из нашего приватного канала (из персонала хостела) сообщает боту что все окей и бот добавляет id канала в свою базу разрешенных id. Все человек может спокойно сам управлять шлагбаумом и дверьми. По выезду просто даем команду боту и он стирает id из базы.
DotBob вне форума   Ответить с цитированием
Старый 07.01.2018, 11:16   #6
DotBob
Junior Member
 
Регистрация: 06.01.2018
Адрес: Петербург
Сообщений: 4
Вес репутации: 0
DotBob is an unknown quantity at this point
По умолчанию

Пожалуй перепишу клавиатуру под InlineKeyboardMarkup будет выводить в канале, но не снизу, а там-же где основные сообщения. Так вроде должно работать.
DotBob вне форума   Ответить с цитированием
Старый 07.01.2018, 13:52   #7
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Спасибо!
Admin вне форума   Ответить с цитированием
Старый 27.01.2018, 01:34   #8
3km
Junior Member
 
Регистрация: 27.01.2018
Сообщений: 3
Вес репутации: 0
3km is an unknown quantity at this point
По умолчанию

Цитата:
Сообщение от DotBob Посмотреть сообщение
Так еще стоит отметить что в данном случае у меня бот привязан к каналу и соответственно слушает и отвечает всем в канале.
Да и еще в оригинале скрипта используется обьект ReplyKeyboardMarkup (клавиатура команд появляющиеся заместо обычной) для канала это не работает - пришлось ее убрать. Долго ковырялся с API не мог понять почему не хочет работать.

Оффтоп:
Думаю в ближайшее время я перепишу его. Есть идея использовать бота для хостела. Вместо rfid, точнее как дополнение к нему.
Пользователь пишет боту. После чего бот сообщает в наш приватный канал от том что к нему обратился такой-то ник. Если человек действительно живет у нас кто-то из нашего приватного канала (из персонала хостела) сообщает боту что все окей и бот добавляет id канала в свою базу разрешенных id. Все человек может спокойно сам управлять шлагбаумом и дверьми. По выезду просто даем команду боту и он стирает id из базы.
Отличная идея с управлением шлагбаумом!
будет ли публичный релиз?

наше еще web интерфейс для настройки этого бота от того же автора ссылка

Последний раз редактировалось 3km; 27.01.2018 в 01:42.
3km вне форума   Ответить с цитированием
Старый 22.02.2018, 23:05   #9
assacoolandl
Junior Member
 
Регистрация: 22.02.2018
Сообщений: 1
Вес репутации: 0
assacoolandl is an unknown quantity at this point
По умолчанию

У меня мой телеграм работает нормально и на телефоне и на компьютере.
Просто нужно скачивать его с официального сайта
и всё будет нормально. А так я вам скажу очень удобный месенджер.
assacoolandl вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 02:06. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика