Alexander Koryukin ngadorong kuring pikeun palaksanaan ieu
Sareng koméntar dina salah sahiji grup VK ku Kirill Kazakov:
Hehehehe, éta teu aman pisan. Abdi langkung resep nyerat bot telegram anu ngan ukur nampi paréntah aktivasina tina akun kuring.
Kuring mutuskeun nulis bot saperti.
Janten, hal anu munggaran dilakukeun nyaéta nyiptakeun bot dina telegram.
- Urang manggihan dina pilarian hiji akun ngaranna @botfather
- Pencét kana tombol Mimitian di handapeun layar
- Teras we nyerat anjeunna paréntah / newbot
Teras we ngajawab 2 patarosan basajan:
- Patarosan kahiji nyaeta nami bot nu bakal dijieun. MyMikrotikROuter
- Patarosan kadua nyaéta nickname tina bot nu keur dijieun (kedah ditungtungan ku bot) MikrotikROuter_bot
Salaku réspon, kami bakal nampi token bot kami, bisi kuring nyaéta:
Anggo token ieu pikeun ngaksés HTTP API: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4
Teras, anjeun kedah milarian bot kami dina milarian ku nami @MikrotikROuter_bot terus pencét tombol Mimitian.
Saatos éta, anjeun kedah muka browser sareng lebetkeun garis ieu:
https://api.telegram.org/botXXXXXXXXXXXXXXXXXX/getUpdates
Dimana XXXXXXXXXXXXXXXXXX mangrupa token bot anjeun.
Halaman anu sami sareng ieu bakal dibuka:
Kami mendakan téks di handap ieu dina éta:
"chat":{"id":631290,
Janten, urang gaduh sadayana inpormasi anu dipikabutuh pikeun nyerat skrip pikeun Mikrotik, nyaéta:
Token bot: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4
Chat ID dimana anjeunna kedah nyerat: 631290
Pikeun pariksa, urang tiasa ngalangkungan browser:
https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test
Kudu meunang hasilna:
Pikeun genah kami, kami bakal langsung nambihan paréntah pikeun bot:
Neangan hiji akun kalawan ngaran @bapa
Teras we nyerat anjeunna paréntah / setcommands
- Anjeunna bakal naroskeun bot mana
Urang nulis:
@MikrotikROuter_bot
Tambahkeun paréntah:
- helloworld< — Test pesen dina obrolan 1
- itsworking-Test Pesen dina obrolan 2
- wolmypc-hudang PC abdi
Ayeuna upami anjeun ngetik "/" dina obrolan, anjeun kedah nampi:
Ayeuna urang ngaléngkah ka MikroTik.
RouterOS gaduh utilitas konsol pikeun nyalin file via ftp atanapi http / https, utilitasna disebut fetch, anu bakal kami anggo.
Dibuka Terminal sareng lebetkeun:
/tool fetch url="https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test " keep-result=no
Punten dicatet yén MikroTik peryogi ""pikeun kabur tanda"?' dina URL.
Kudu meunang hasilna:
Ayeuna hayu urang ngalih ka skrip:
Halo Dunya
system script add name="helloworld" policy=read source={/tool fetch url="https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=Hello,world! " keep-result=no}
jalanna
system script add name="itsworking" policy=read source={/tool fetch url="https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=Test OK, it's Working " keep-result=no}
wolmypc
system script add name="wolmypc" policy=read source="/tool wol mac=XX:XX:XX:XX:XX:XX interface=ifnamer
n/tool fetch url="https://api.telegram.org/boXXXXXXXXXXXXXXXXXXX?chat_id=631290&text=wol OK" keep-resul
t=no"
Tong hilap sebutkeun nami Mac sareng antarmuka anu leres, kitu ogé bot-token sareng chat_id.
Ayeuna kuring bakal ngajelaskeun sakedik naon anu aranjeunna lakukeun:
Skrip "helloworld" ngirim pesen: "Halo, dunya!" kana obrolan urang jeung bot.
Skrip "nyaéta dianggo" ngirim pesen: "Test OK, éta Gawé!" kana obrolan urang jeung bot.
Naskah ieu kanggo tujuan démo.
Kuring ditambahkeun "wolmypc" Aksara salaku salah sahiji palaksanaan mungkin.
Saatos palaksanaan naskah, bot bakal nyerat "wol OK" kana obrolan.
Nyatana, anjeun tiasa ngajalankeun skrip naon waé.
Jieun tugas:
Telegram.src
/system scheduler
add interval=30s name=Telegram on-event=":tool fetch url=("https://api.telegr
am.org/".$botID."/getUpdates") ;r
n:global content [/file get [/file find name=getUpdates] contents] ;r
n:global startLoc 0;r
n:global endLoc 0;r
nr
n:if ( [/file get [/file find name=getUpdates] size] > 50 ) do={r
nr
n:set startLoc [:find $content "update_id" $lastEnd ] ;r
n:set startLoc ( $startLoc + 11 ) ;r
n:local endLoc [:find $content "," $startLoc] ;r
n:local messageId ([:pick $content $startLoc $endLoc] + (1));r
n:put [$messageId] ;r
n:#log info message="updateID $messageId" ;r
nr
n:set startLoc [:find $content "text" $lastEnd ] ;r
n:set startLoc ( $startLoc + 7 ) ;r
n:local endLoc [:find $content "," ($startLoc)] ;r
n:set endLoc ( $endLoc - 1 ) ;r
n:local message [:pick $content ($startLoc + 2) $endLoc] ;r
n:put [$message] ;r
n:#log info message="message $message ";r
nr
n:set startLoc [:find $content "chat" $lastEnd ] ;r
n:set startLoc ( $startLoc + 12 ) ;r
n:local endLoc [:find $content "," $startLoc] ;r
n:local chatId ([:pick $content $startLoc $endLoc]);r
n:put [$chatId] ;r
n:#log info message="chatID $chatId ";r
nr
n:if (($chatId = $myChatID) and (:put [/system script find name=$messa
ge] != "")) do={r
n:system script run $message} else={:tool fetch url=("https://api.teleg
ram.org/".$botID."/sendmessage?chat_id=".$chatId."&text=I can't t
alk with you. ") keep-result=no} ;r
n:tool fetch url=("https://api.telegram.org/".$botID."/getUpdates?
offset=$messageId") keep-result=no; r
n} r
n" policy=
ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon
start-date=nov/02/2010 start-time=00:00:00
add name=Telegram-startup on-event=":delay 5r
n:global botID "botXXXXXXXXXXXXXXXXXX" ;r
n:global myChatID "631290" ;r
n:global startLoc 0;r
n:global endLoc 0;r
n:tool fetch url=("https://api.telegram.org/".$botID."/getUpdates")
;" policy=
ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon
start-time=startup
Kabaca Témbongkeunteu jelas naha, tapi ti naskah digawé teu nyingkab data global, ditambahkeun naskah nalika sistem boot.
Telegram ngamimitian
:delay 5
:global botID "botXXXXXXXXXXXXXXXXXX" ; token bot
:global myChatID "xxxxxx" ; chat_id
:global startLoc 0;
:global endLoc 0;
:tool fetch url=("https://api.telegram.org/".$botID."/getUpdates") ;
telegram
:tool fetch url=("https://api.telegram.org/".$botID."/getUpdates") ;
:global content [/file get [/file find name=getUpdates] contents] ;
:global startLoc 0;
:global endLoc 0;
:if ( [/file get [/file find name=getUpdates] size] > 50 ) do={
:set startLoc [:find $content "update_id" $lastEnd ] ;
:set startLoc ( $startLoc + 11 ) ;
:local endLoc [:find $content "," $startLoc] ;
:local messageId ([:pick $content $startLoc $endLoc] + (1));
:put [$messageId] ;
#:log info message="updateID $messageId" ;
:set startLoc [:find $content "text" $lastEnd ] ;
:set startLoc ( $startLoc + 7 ) ;
:local endLoc [:find $content "," ($startLoc)] ;
:set endLoc ( $endLoc - 1 ) ;
:local message [:pick $content ($startLoc + 2) $endLoc] ;
:put [$message] ;
#:log info message="message $message ";
:set startLoc [:find $content "chat" $lastEnd ] ;
:set startLoc ( $startLoc + 12 ) ;
:local endLoc [:find $content "," $startLoc] ;
:local chatId ([:pick $content $startLoc $endLoc]);
:put [$chatId] ;
#:log info message="chatID $chatId ";
:if (($chatId = $myChatID) and (:put [/system script find name=$message] != "")) do={
:system script run $message} else={:tool fetch url=("https://api.telegram.org/".$botID."/sendmessage?chat_id=".$chatId."&text=I can't talk with you. ") keep-result=no} ;
:tool fetch url=("https://api.telegram.org/".$botID."/getUpdates?offset=$messageId") keep-result=no;
}
Kumaha teu karya ieu
Unduh pesen "getUpdates" kami unggal 30 detik, teras parse kanggo milarian update_id (nomer talatah) jeung naskah (tim kami) jeung chat_id . Sacara standar, getUpdates nampilkeun tina 1 dugi ka 100 pesen, pikeun genah, saatos maca paréntah, urang ngahapus pesen éta. Telegram api nyarios maca pesen anjeun peryogi nomer pesen + 1
/getUpdates?offset=update_id + 1
Kabéh diuji dina Mikrotik rb915 RouterOS 6.37.1
Upami anjeun ngirim seueur paréntah sakaligus, éta sadayana bakal dieksekusi dina waktosna sareng interval 30 detik.
PS Loba hatur nuhun kana Kirill Kazakov pikeun gagasan jeung sobat Alexander pikeun pitulung kalayan naskah.
rujukan
upd:
03:11:16
Aksara ningkat:
Ditambahkeun cek pikeun chat_id
Mariksa bodo, upami aya anu nyerat ka bot urang, anjeunna bakal ngajawab anjeunna: "Kuring henteu tiasa ngobrol sareng anjeun. ", Sarua bakal ngajawab kami lamun teu ngakuan paréntah.
Saatos ngalaksanakeun paréntah, bot ngabatalkeun kana obrolan (tingali skrip wolmypc)
UPDAT
Kapanggih jeung
UPD 08.12.2016
dina Telegram, katingalina, aranjeunna rada robah "knalpot" getUpdate. Ayeuna dina naskah utama anjeun kedah ngabenerkeun pesen offset ti 2 ka 1
parobahan
:local message [:pick $content ($startLoc + 2) $endLoc] ;
заменить на :
:local message [:pick $content ($startLoc + 1) $endLoc] ;
sumber: www.habr.com