الیگزینڈر کوریوکن نے مجھے اس عمل کی طرف دھکیل دیا۔
اور VK گروپوں میں سے ایک میں کیرل کازاکوف کا تبصرہ:
ہاں، یہ بالکل بھی محفوظ نہیں ہے۔ میں اس کے بجائے ایک ٹیلیگرام بوٹ لکھوں گا جو صرف میرے اکاؤنٹ سے ایکٹیویشن کمانڈز کو قبول کرتا ہے۔
میں نے ایسا بوٹ لکھنے کا فیصلہ کیا۔
لہذا، سب سے پہلے ٹیلیگرام میں بوٹ بنانا ہے۔
- ہمیں تلاش میں @botfather کے نام سے ایک اکاؤنٹ ملتا ہے۔
- اسکرین کے نیچے اسٹارٹ بٹن پر کلک کریں۔
- پھر ہم اسے کمانڈ / نیو بوٹ لکھتے ہیں۔
پھر ہم 2 آسان سوالات کے جواب دیتے ہیں:
- پہلا سوال اس بوٹ کا نام ہے جسے بنایا جائے گا۔ MyMikrotikROuter
- دوسرا سوال بوٹ کی تخلیق کا عرفی نام ہے (بوٹ کے ساتھ ختم ہونا چاہئے) MikrotikROuter_bot
جواب میں، ہمیں اپنے بوٹ کا ٹوکن ملے گا، میرے معاملے میں یہ ہے:
HTTP API تک رسائی کے لیے یہ ٹوکن استعمال کریں: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4
اس کے بعد، آپ کو نام کے ذریعہ تلاش میں ہمارے بوٹ کو تلاش کرنے کی ضرورت ہے۔ @MikrotikROuter_bot اور اسٹارٹ بٹن دبائیں۔
اس کے بعد، آپ کو براؤزر کھولنے اور درج ذیل لائن کو داخل کرنے کی ضرورت ہے:
https://api.telegram.org/botXXXXXXXXXXXXXXXXXX/getUpdates
جہاں XXXXXXXXXXXXXXXXXX آپ کے بوٹ کا ٹوکن ہے۔
مندرجہ ذیل کی طرح ایک صفحہ کھلے گا:
ہمیں اس پر درج ذیل عبارت ملتی ہے:
"chat":{"id":631290,
لہذا، ہمارے پاس Mikrotik کے لیے اسکرپٹ لکھنے کے لیے تمام ضروری معلومات ہیں، یعنی:
بوٹ ٹوکن: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4
چیٹ آئی ڈی جہاں اسے لکھنا چاہیے: 631290
چیک کرنے کے لیے، ہم براؤزر کے ذریعے جا سکتے ہیں:
https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test
نتیجہ حاصل کرنا چاہئے:
ہماری سہولت کے لیے، ہم فوری طور پر بوٹ کے لیے کمانڈز شامل کریں گے:
نام کے ساتھ اکاؤنٹ تلاش کرنا @botfather
پھر ہم اسے ایک حکم لکھتے ہیں۔ / سیٹ کامانڈز
- وہ پوچھے گا کہ کون سا بوٹ ہے۔
ہم لکھتے ہیں:
@MikrotikROuter_bot
کمانڈز شامل کریں:
- helloworld< — چیٹ 1 پر ٹیسٹ پیغام
- چیٹ 2 پر اس کا ورکنگ ٹیسٹ پیغام
- wolmypc - میرے پی سی کو جگا دو
اب اگر آپ چیٹ میں "/" ٹائپ کرتے ہیں، تو آپ کو ملنا چاہیے:
اب آئیے MikroTik کی طرف۔
RouterOS میں ftp یا HTTP/https کے ذریعے فائلوں کو کاپی کرنے کے لیے کنسول یوٹیلیٹی ہے، اس یوٹیلیٹی کو fetch کہتے ہیں، جسے ہم استعمال کریں گے۔
کھولو ٹرمینل اور درج کریں:
/tool fetch url="https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test " keep-result=no
براہ کرم نوٹ کریں کہ MikroTik کی ضرورت ہے "نشانی سے بچنے کے لیے?' URL میں۔
نتیجہ حاصل کرنا چاہئے:
اب اسکرپٹس کی طرف چلتے ہیں:
helloworld
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}
یہ کام کر رہا ہے
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"
درست میک اور انٹرفیس نام کے ساتھ ساتھ بوٹ ٹوکن اور chat_id بتانا نہ بھولیں۔
اب میں تھوڑی وضاحت کروں گا کہ وہ کیا کرتے ہیں:
"ہیلو ورلڈ" اسکرپٹ ایک پیغام بھیجتا ہے: "ہیلو، دنیا!" بوٹ کے ساتھ ہماری بات چیت کے لیے۔
"اس کا کام کرنے والا" اسکرپٹ ایک پیغام بھیجتا ہے: "ٹیسٹ ٹھیک ہے، یہ کام کر رہا ہے!" بوٹ کے ساتھ ہماری بات چیت کے لیے۔
یہ اسکرپٹ مظاہرے کے مقاصد کے لیے ہیں۔
میں نے "wolmypc" اسکرپٹ کو ممکنہ نفاذ میں سے ایک کے طور پر شامل کیا۔
اسکرپٹ پر عمل درآمد پر، بوٹ چیٹ پر "wol OK" لکھے گا۔
درحقیقت، آپ بالکل کسی بھی اسکرپٹ کو چلا سکتے ہیں۔
ایک کام بنائیں:
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
پڑھنے کے قابل منظریہ واضح نہیں ہے کہ کیوں، لیکن ورکنگ اسکرپٹ سے یہ عالمی ڈیٹا کو ظاہر نہیں کرتا، جب سسٹم بوٹ ہوتا ہے تو اسکرپٹ کو شامل کیا جاتا ہے۔
ٹیلیگرام اسٹارٹ اپ
: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") ;
تار
: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;
}
یہ کیسے کام کرتا ہے
ہمارے "getUpdates" پیغامات کو ہر 30 سیکنڈ میں ڈاؤن لوڈ کریں، پھر تلاش کرنے کے لیے تجزیہ کریں۔ update_id (پیغام نمبر) اور متن (ہماری ٹیمیں) اور chat_id . پہلے سے طے شدہ طور پر، getUpdates 1 سے 100 پیغامات دکھاتا ہے، سہولت کے لیے، کمانڈ کو پڑھنے کے بعد، ہم پیغام کو حذف کر دیتے ہیں۔ ٹیلیگرام اے پی آئی کہتا ہے کہ کوئی پیغام پڑھنے کے لیے آپ کو میسج نمبر + 1 کی ضرورت ہے۔
/getUpdates?offset=update_id + 1
Mikrotik rb915 RouterOS 6.37.1 پر تمام ٹیسٹ کیے گئے۔
اگر آپ ایک ساتھ کئی کمانڈز بھیجتے ہیں، تو ان سب کو 30 سیکنڈ کے وقفے کے ساتھ بدل دیا جائے گا۔
PS اس آئیڈیا کے لیے کرل کازاکوف اور اسکرپٹ میں مدد کے لیے میرے دوست الیگزینڈر کا بہت شکریہ۔
حوالہ جات
upd:
03:11:16
بہتر اسکرپٹس:
chat_id کے لیے چیک شامل کر دیا گیا۔
بیوقوف کی جانچ پڑتال کرتے ہوئے، اگر کوئی ہمارے بوٹ کو لکھتا ہے، تو وہ اسے جواب دے گا: "میں آپ سے بات نہیں کر سکتا۔ "، اسی طرح ہمیں جواب دے گا اگر یہ کمانڈ کو نہیں پہچانتا ہے۔
کمانڈ پر عمل کرنے کے بعد، بوٹ چیٹ کی رکنیت ختم کر دیتا ہے (وولمی پی سی اسکرپٹ دیکھیں)
یو پی ڈی
کے ساتھ ملا
UPD 08.12.2016۔
ٹیلیگرام میں، بظاہر، انہوں نے getUpdate کے "ایگزاسٹ" کو قدرے تبدیل کر دیا۔ اب مین اسکرپٹ میں آپ کو میسج آفسیٹ کو 2 سے 1 تک درست کرنے کی ضرورت ہے۔
تبدیلیاں
:local message [:pick $content ($startLoc + 2) $endLoc] ;
заменить на :
:local message [:pick $content ($startLoc + 1) $endLoc] ;
ماخذ: www.habr.com