Temat: Robimy bota do telegrama!
Dziś trochę tak rozrywkowo - zrobimy sobie bota do telegrama. Dla tych mniej zorientowanych - bot, czy automat coś robiący, telegram - taki komunikator do rozmów (nie mylić z facebookowym messengerem). No ale po co ten bot? On po prostu nasłuchuje na określone polecenia i je wykonuje, można zrobić np. listę klientów, uruchomienie wol, włączenie zasilania jak ma się podłączone jakieś przekaźniki itd. Tak, wiem, są vpny i takie inne sprawy, ale czemu nie podejść do sprawy z innej strony?
API telegrama jest powszechnie znane i przy pomocy curla oraz jsona można to zrobić dość prosto samemu. Tylko nie będziemy się tu męczyć ponieważ odpowiednie kody są już dostępne na githubie, a jak dobrze się rozejrzeć to i można znaleźć gotowe paczki dla OpenWrt. Przygodę rozpoczynamy od założenia sobie telegrama jeżeli jeszcze nie mamy, a później trzeba uzyskać dwie rzeczy - nasz tzw chat_id - w tym celu piszemy do użytkownika (kontaktu @get_id_bot) oraz token dla naszego bota - w tym celu piszemy do @BotFather. Podajmy mu polecenie /newboot, nazywamy jakoś naszego bota - mój się nazywa wieslaw (bo i czemu nie) i wybieramy username, który musi się kończyć na "bot" - jadąc po najmniejszej linii oporu mój dostał przydomek wieslawboot. Zapisujmy sobie na boku otrzymane dane.
Przechodzimy do OpenWrt. Bez wysiłku instalujemy jeden z pakietów:
# opkg update
# opkg install http://openwrt.132lan.ru/packages/packages-19.07/mipsel_24kc/packages/telegrambot_0.0.3-1_all.ipk
Paczka jest dla dowolnej architektury i działa także dla wydania 21.02.
Kody "źródłowe" innych rozwiązań można znaleźć np. tu lub tu.
Ja użyłem po prostu gotowca znalezionego na jednej z rosyjskich stron. Teraz trzeba bota nauczyć kim on jest, więc uzupełniamy jego konfigurację:
# /etc/init.d/telegrambot stop
# uci set telegrambot.config.bot_token='yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
# uci set telegrambot.config.chat_id='xxxxxx'
# uci commit
# /etc/init.d/telegrambot start
Gdzie za xxxxx i yyyy podstawiamy uzyskane wcześniej odpowiednio chat_id oraz token. Jeżeli wszystko jest zrobione poprawnie to na naszym telegramie właśnie powinien odezwać się nasz OpenWrt:
wieslaw, [06.05.21 20:38]
OpenWrt. TelegramBot started.
Co bot potrafi? Standardowo w kodzie jest kilka poleceń które można rozszerzyć za pomocą "pluginów" - czyli zwykłych skryptów umieszczonych w /usr/lib/telegrambot/plugins. Spytajmy się więc wiesława co umie:
Cezary Jackiewicz, [06.05.21 20:38]
/helpwieslaw, [06.05.21 20:38]
[W odpowiedzi na Cezary Jackiewicz]
/memory return RAM info
/leases current dhcp leases
/wll_list wifi clients
/reboot reboot the device
/wol <mac_address> wake on lan over the Internet
/wanip WAN ip address
/plugins aviable commandsCezary Jackiewicz, [06.05.21 20:38]
/memorywieslaw, [06.05.21 20:38]
[W odpowiedzi na Cezary Jackiewicz]MemTotal: 239656 kB
MemFree: 185168 kB
MemAvailable: 172816 kB
Buffers: 2188 kB
Cached: 19432 kB
Zobaczmy pluginy:
Cezary Jackiewicz, [06.05.21 20:57]
/pluginswieslaw, [06.05.21 20:58]
[W odpowiedzi na Cezary Jackiewicz]
Aviable commands are:
/ifconfig
/kernel
/leases
/memory
/netstat
/opkg
/ping
/plugins
/swports_list
/uci
/uptime
/wanip
/wifi_list
/wll_list
/wolCezary Jackiewicz, [06.05.21 20:58]
/pingwieslaw, [06.05.21 20:58]
[W odpowiedzi na Cezary Jackiewicz]
DownCezary Jackiewicz, [06.05.21 20:58]
/ping 8.8.8.8wieslaw, [06.05.21 20:58]
[W odpowiedzi na Cezary Jackiewicz]
Up
Możemy zrobić własne skrypty które zrobią coś więcej. A po co to wszystko? Bo niektórym prościej jest po prostu na czacie napisać coś niż logować się przez vpn, ssh itd. Może ktoś bardziej polubi taki sposób komunikacji z routerem (przepraszam - z wieslawem...)