آموزش امنیت و تست نفوذ

آموزش امنیت و مبانی امنیت شبکه و اطلاعات

آموزش امنیت و تست نفوذ

آموزش امنیت و مبانی امنیت شبکه و اطلاعات

آموزش امنیت و تست نفوذ

این سایت تابع قوانین جمهوری اسلامی ایران میباشد.
مطالب درصورت درخواست کارگروه تعیین مصادق مجرمانه اینترنتی حذف خواهد شد.

طبقه بندی موضوعی

Telegram Bot API 2

Tuesday, 18 Khordad 1395، 04:39 PM

سلام مجدد ، خدمت شما دوستان عزیز و علاقه مندان به ربات تلگرام 

خب توی این پست در مورد WebHook صحبت میکنم. 

لطفا قبل از خواندن این پست , مطلب شماره یک را مطالعه کنید . قسمت اول 

برای شما عزیزان یک مقاله اماده کردم که در ان  ngrok کاملا توضیح داده شده  و کانفیگ اش رو ویندوز را تعریف شده است ./


خب بعد از اینکه Forward رو از طریق ngork انجام دادیم باید اون رو با متد WebHook ارسال کنیم به روباتمون ، در مقاله گفتم اینجا هم میگم ، اگر از WebHook استفاده کنید نمیشه از GetUpdates استفاده کرد ، برای اینکه دوباره از GetUpdates استفاده کنید باید متد WebHook رو با آرگومان url خالی ارسال کنید.

ببینید متد WebHook را :

کد:
https://api.telegram.org/bot56923213:AAFcPd-QK4jdR5Ye8YdbV_VkHHkKgJR7xoU/setWebhook?url=https://{Bot Page Address}

اون قسمت رو که با قرمز مشخص کردم محلی هست که روبات ما داخلشه ، من مثلا روباتم داخل پوشه ی index ئه لوکال هاست هست و Forward Address ام هم اینه : https://3d34ca81.ngrok.io

خب SetWebHook اینطوری میشه:

کد:
https://api.telegram.org/bot56923213:AAFcPd-QK4jdR5Ye8YdbV_VkHHkKgJR7xoU/setWebhook?url=https://3d34ca81.ngrok.io

خب ، اگر همه چیز درست باشه ، پاسخ اینه :

کد:
{
   "ok":true,
   "result":true,
   "description":"Webhook was set"
}

description میگه که Webhook تنظیم شد ، خب الآن چی شد دقیقا !؟ بذارید اینطوری بگم ، یک پیام میدم توی گروهی که روبات ام داخلش هست و پنل ngork رو میبینم :


خب دیدید چی شد !؟ تلگرام به ما درخواست داد ، نه ما به تلگرام :>
در حالی که در موردهای قبلی این ما بودیم که به تلگرام درخواست میدادیم (:

این باعث میشه روبات ما Real Time باشه ، نه اینکه ما همش Request بدیم ، اما درخت JSON متد WebHook با GetUpdates تفاوتایی داره ، مثلا والد Result وجود نداره.
بذارید همون مثلا قبلی رو انجام بدیم ، میخوایم وقتی گفته شد ، "سلام" ما بگیم "سلام. خوبی!؟"
اینجا دیگه نیاز نیست message_id رو نگه داریم ، چون WebHook هر 1 پیام مجزا رو Request میده.
الآن میخوام بر مبنای WebHook این برنامه رو بنویسیم :


کد PHP:
<?php
$update 
json_decode(file_get_contents('php://input'));
$message=$update->message->text;
if(
$message=="سلام"){
        
$rep=json_decode(file_get_contents("https://api.telegram.org/bot117421868:AAFO2KMXjoy5Bf5gsEQdmzhjNHV43BDAwKw/SendMessage?chat_id=".$update->message->chat->id."&text=".urldecode("سلام. خوبی !؟")));
        echo 
"Ok";
}
?>


خط دوم باعث میشه هر دیتایی که به صورت POST دریافت میکنیم json_decode کنیم ، خط سوم متغیر پیام را با مقدار ولد text پر میکنه و خط چهارم اگر این متغیر برابر با "سلام" بود پیام "سلام. خوبی!؟" را ارسال میکنه به گروهی با chat_id مشخص شده :



و اما بحثی شد در مورد روبات تینا و اینکه چجوری به پیام کاربران جواب میده و تاحدودی باهاشون صحبت میکنه ، در مبحث هوش مصنوعی چیزی داریم به نام NLP که میشه Natural language processing ، که رایانه را طوری به عمل میاره که زبان نوشتاری و گفتاری رو بتونه تحلیل کنه و بر مبنای اون جواب بده ، 

برای PHP یک لایبری وجود داره ؛ من در آینده سعی میکنم که روی این مبحث مانور بدم اگر عمری بود!

حسن ختام این پست ، یک اسکریپت هست که مشابه اش رو کانال های IRC باید دیده باشید ، این اسکریپت به این صورته که یه کامند میدیم بهش ، مثلا "random/" ، بعد اسکریپت یک عدد رندوم مثلا از 1 تا 100 در متغیر ذخیره میکنه ، کاربران گروه پیام میدن و عدد رو حدس میزنن ، و روبات اگر عدد بالاتر از مقدار حدس زده باشه میگه : "برو بالا" و اگر پایین تر از مقدار حدس زده باشه میگه : "برو پایین"

الگوریتم به صورتیه که telegram متوالی و به صورت جداگانه در برابر هر PM به ما ریکوئست میده ، این یعنی متغیر رو باید جوری تعریف کنیم که مقدارش از دست نره ، راه اصولی این کار در PHP استفاده از apc cache یا Memcached هست ، اما من میام یک فایل txt درست میکنم و متغیر رو از اون میخونم.

اول باید بگیم بازی چجوری شروع بشه ، فرض کنید با کامند "randomgame/" میخوایم بازی رو شروع کنیم ، باید عدد رندوم را در یک فایل txt ذخیره کنیم که در دفعات بعدی ازش استفاده کنیم
در دفعات بعدی اول باید چک کنیم فایل var.txt خالی هست یا نه ، اگر خالی باشه یعنی اصلاً بازی شروع نشده ، پس نباید به پیام ها پاسخی بدیم ، اما اگر این فایل حاوی عدد بود ، و پیام کاربر هم فقط عدد بود کار شروع میشه ، اگر عددی که یوزر داده بود ، پایین تر از مقدار var.txt بود بگه : "برو بالا" ، اگر هم بالاتر بود ، بگه : "برو پایین"

کد PHP:
<?php
$update 
json_decode(file_get_contents('php://input'));
$message=$update->message->text;
$id=$update->message->message_id;
if(
$message=="/randomgame"){
    
$file fopen("var.txt","w");
    echo 
fwrite($file,rand(1,100));
    
fclose($file);
    
$rep=json_decode(file_get_contents("https://api.telegram.org/bot117421868:AAFO2KMXjoy5Bf5gsEQdmzhjNHV43BDAwKw/SendMessage?chat_id=".$update->message->chat->id."&text=".urldecode("یه عدد انتخاب کردم ، اگه گفتی چیه !؟ :D")));
}else{
    if((
is_numeric($message)) && (filesize('var.txt') != 0) ){
        if(
$message<file_get_contents('var.txt')){
            
$rep=json_decode(file_get_contents("https://api.telegram.org/bot117421868:AAFO2KMXjoy5Bf5gsEQdmzhjNHV43BDAwKw/SendMessage?chat_id=".$update->message->chat->id."&text=".urldecode("برو بالا")."&reply_to_message_id=".$id));
        }elseif(
$message>file_get_contents('var.txt')){
            
$rep=json_decode(file_get_contents("https://api.telegram.org/bot117421868:AAFO2KMXjoy5Bf5gsEQdmzhjNHV43BDAwKw/SendMessage?chat_id=".$update->message->chat->id."&text=".urldecode("بیا پایین")."&reply_to_message_id=".$id));
        }elseif(
$message==file_get_contents('var.txt')){
            
$rep=json_decode(file_get_contents("https://api.telegram.org/bot117421868:AAFO2KMXjoy5Bf5gsEQdmzhjNHV43BDAwKw/SendMessage?chat_id=".$update->message->chat->id."&text=".urldecode("آفرین درسته :)")."&reply_to_message_id=".$id));
            
file_put_contents("var.txt""");
        }
    }
}
?>

فقط یه چیزی هست ، اینجا یک پارامتر reply_to_message_id هم ارسال کردم به متد SendMessage که برای نقل قول به کار میره.

موفق باشید 

با تشکر فراوان  از 4L1R3Z4  . 

تقدیم به دوستان خیلی خوبم @Mohamadtictic & @Iam_Amir_Hosein 

لینک مقابله ngrok

  • امیر امینی

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی