نمایش نتایج: از شماره 1 تا 8 , از مجموع 8

موضوع: آموزش ساخت روبات تلگرام (کامل) - Let's play with Telegram Bot API

  1. #1
    عضو انجمن miladtnt آواتار ها
    تاریخ عضویت
    Mar 2016
    محل سکونت
    TabriZ
    نوشته ها
    247
    تشکر تشکر کرده 
    219
    تشکر تشکر شده 
    376
    تشکر شده در
    275 پست

    پیش فرض آموزش ساخت روبات تلگرام (کامل) - Let's play with Telegram Bot API

    دوستان توجه کنند این پستت کپی هست نویسندش من نیستم ! ولی گفتم تو اینجا هم بزارم مفید واقع شه براتون روش فوق العاده ای هست و خودم با این روش یاد گرفتم

    ادرس اصلی پست :

    http://ashiyane.org/forums/showthrea...legram-Bot-API

    * فقط یجاهای پست اشتباهات سینتکس کد و... بود که برطرف کردم و گذاشتم



    خب ، قصد من اینه که اینجا مراحل ساخت یک روبات را بررسی کنیم ، اولین مرحله ی ساخت یک روبات برای تلگرام اینه که با BotFather@ روبات را رجیستر کنیم و یک Token براش دریافت کنیم ، من بیش از این توضیح نمیدم چون میخوام به مباحث دیگه ای بپردازم ، به این لینک مراجعه کنید اگر روباتتون رو نساختید هنوز :

    http://apkfa.ir/telegram-bot-botfather/

    خب اگر طبق آموزش بالا پیش رفته باشید در آخر BotFather یک Token میده بهتون به این شکل :

    Use this token to access the HTTP API:
    56923213:AAFcPd-QK4jdR5Ye8YdbV_VkHHkKgJR7xoU


    بسی خوب ، شکل کلی Request هایی که به تلگرام میدیم به این صورته :

    https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/getMe


    ما میتونیم به دو صورت POST و GET به این API درخواست بدیم ، که در ادامه هر 2 حالتشو بررسی میکنیم ، فعلا ببینید خروجی این دستور چیه :


    کد PHP:
    {"ok":true,"result":{"id":56944213,"first_name":"MyBot","username":"MyBot"}} 


    کد PHP:
    {
        
    "ok":true,
        
    "result":{
            
    "id":56944213,
            
    "first_name":"MyBot",
            
    "username":"MyBot"
        
    }


    الآن راحت تر میتونیم به عناصر دسترسی داشته باشیم ، خب در آینده ما نیاز داریم که عنصر خاصی از این خروجی JSON را بدست بیاریم ، پس بذارید نشون بدم چجوری باید اینکار بکنیم :
    کد PHP:
    <?php
    $json 
    '{"ok":true,"result":{"id":56944213,"first_name":"MyBot","username":"MyBot"}}';
    $obj json_decode($json);
    echo 
    $obj->result->username;
    ?>
    فکر کنم متوجه شدید چیکار کردیم ، رشته ی JSON را با تابع json_decode دیکد کردم تا بتونم به Object های اون دسترسی داشته باشم ، بعد از اون از obj$ که والد کل هست ، به ولدهای result و username رفتم ، خروجی کد بالایی MyBot هست که همون Username سایت ما هست


    از cURL استفاده میکنم تا با بقیه ی زبان ها شباهت بیشتری داشته باشه کارمون.

    کد PHP:
    <?php
    $curl 
    curl_init();
    curl_setopt($curl,CURLOPT_URL,"https://api.telegram.org/bot56923213:AAFcPd-QK4jdR5Ye8YdbV_VkHHkKgJR7xoU/getMe");
    curl_setopt($curlCURLOPT_SSL_VERIFYPEERfalse);
    curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
    $json=curl_exec($curl);
    $obj json_decode($json);
    echo 
    $obj->result->username;
    ?>
    1 نکته باید اینجا مد نظر داشت ، اینکه CURLOPT_SSL_VERIFYPEER رو روی False قرار بدید ، من اینجا Certificate رو Ignore کردم ، مشکلی هم نداره از نظر من ، ولی اگر میخواید Ignore نکنید با آپشن CURLOPT_CAINFO مسیر گواهینامه رو مشخص کنید.



    خیلی خب اینجا اسم روبات رو دریافت کردم ، کار بعدی که میخوام انجام بدم اینه که ببینم روبات من در چه گروه هایی عضو هست و چه کامندهایی بهش داده شده ، برای این کار 2 راه تعبیه کردند ، یکی کامند getUpdates هست و دیگری
    WebHook
    توی getUpdates ما باید مدام Req بدیم ببینیم کامند جدیدی بهمون داده شده یا نه ، اما توی WebHook اینطوری نیست ، WebHook وقتی کامند به ما داده میشه خودش برامون ارسالش میکنه ، و نیازی به ریکوئست ما نیست. مسلماً WebHook خیلی راحت تره نه !؟ (:

    الآن بیشتر روبات های انجمن ها Request ـی هستند ، یعنی باید مدام Request بدیم ببینیم مثلا تاپیک Duty آپدیت شده یا نه !؟
    اما در WebHook این ما نیستیم که به تاپیک Duty ریکوئست میدیم تا ببینیم آپدیت شده یا نه!! بلکه این انجمن آشیانه هست که به ما Request میده و میگه تاپیک Duty آپدیت شده ، این هم پست هاش

    خب یه جورایی میشه گفت پیاده سازی WebHook در Telegram یکمی سخت هست ، ولی من 1 روز وقت گذاشتم روش و تونستم انجامش بدم ، اما الآن با هم متد GetUpdates رو بررسی می کنیم ، در آینده WebHook رو.
    یه چیزی که باید بهش توجه داشته باشیم اینه که ولدهایی که از GetUpdates نشأت میگیرند با WebHook یکمی تفاوت دارند که اون رو هم جداگانه بررسی میکنیم

    اولین کار اینه که ببینیم چه پیام هایی در گروه هایی که روبات ما در اون عضو هست داده شده ، در BotFather@ میتونید تنظیم کنید که پیام هایی که با / شروع میشن (مثلا salam/) براتون فرستاده بشن یا همه ی پیام ها. شما همه ی پیام ها رو انتخاب کنید چون در آینده لازمش داریم

    خب اینجا GetUpdates رو بررسی میکنم ، Url ـی که به ما خروجی میده به این صورته :

    کد:
    https://api.telegram.org/bot56923213...xoU/getUpdates

    خب خروجی این ، 100 پیام آخر هست ، به این صورت :

    http://pastebin.com/raw.php?i=pVHjYR8V

    خب اینجا میخوام برای راحتی کار همیشه آخرین ولد رو بگیرم ، نه همه ی ولدها رو ، متد GetUpdates یک فیلد به نام offset داره که میشه update_id مورد نظر رو داخلش قرار بدیم تا فقط اون رو بگیریم ، Update_id یکی یکی جلو میره ، در قدم اول لازمه من کل JSON رو بگیرم ، و در آخر به ولد آخر اشاره کنم و Update ID رو تنظیم کنم روی اون ،

    خب کد PHP من به این شکل میشه :

    کد PHP:
    <?php
    $up_id
    ='';
    function 
    GetUpdateId(){
        
    $obj=json_decode(file_get_contents("https://api.telegram.org/bot56923213:AAFcPd-QK4jdR5Ye8YdbV_VkHHkKgJR7xoU/getUpdates"));
        
    $fin=end($obj->result);
        
    $GLOBALS['up_id']=$fin->update_id;
    }
    GetUpdateId();
    $fin=json_decode(file_get_contents("https://api.telegram.org/bot56923213:AAFcPd-QK4jdR5Ye8YdbV_VkHHkKgJR7xoU/getUpdates?offset=".$up_id++));
    echo 
    $fin->result[0]->message->text;
    ?>
    اول یک متغیر up_id تعریف میکنم که update_id رو در اون ذخیره میکنم ، بعد یک تابع GetUpdateId تعریف میکنم که میره به متد getUpdates ، مقدار JSON را دیکد میکنه و آخرین update_id را درون متغیر up_id قرار میده ، و در اخر یک بار تابع GetUpdateId را اجرا میکنم تا آخرین UpdateID رو بدست بیارم و متن آخرین پیامی که در گروههای روباتم ارسال میشن رو به دست بیارم ، ممکنه سوال پیش بیاد که چرا اینکارو کردم ، به خاطر اینکه متد GetUpdates والدهای ارسالیش محدود به 100 تا هست ، یعنی با ارسال پیام 101 ام ، پیام ئه اول را در اختیار نخواهیم داشت..

    خیلی خب الآن پیام رو گرفتم ، میخوام یه پیام بفرستم ، میخوام اگر کسی در گروه گفت "سلام" من بهش بگم : "سلام. خوبی!؟"

    متد دریافت پیام ها رو که کار کردیم ، متد بعدی متد ارسال پیامه ،


    کد PHP:
    https://api.telegram.org/bot56923213:AAFcPd-QK4jdR5Ye8YdbV_VkHHkKgJR7xoU/sendMessage?chat_id={Chat_ID}&text={Message Text} 

    خب 2 قسمت قرمز مشخص کردم که حتما باید به این متد بدیمش ، اولی Chat_ID هست ، Chat_ID منظور گروهی هست که در اون پیام "سلام" داده شده و ما باید بهش جواب بدیم ، یه بار دیگه خروجی JSON ـی که متد GetUpdates بهمون داده رو ببینین :

    http://pastebin.com/raw.php?i=pVHjYR8V

    داخل والد Message ولد Chat رو می بینیم که والد ولدهای title و id هست ، title عنوان گروهی هست که در اون پیام ارسال کردیم و id هم ایدی اون گروه که ما اینجا باهاش کار داریم.

    خب الآن سورس من میشه چیزی شبیه به این :

    https://gist.github.com/anonymous/293774dd163f66c84713

    تابع GetUpdateID رو که قبلا توضیح دادم ، الآن یک متغیر جدید می بینید به نام Message_ID ، فکر میکنید چرا این رو ایجاد کردم !؟
    به خاطر اینکه اگر این متغیر وجود نداشته باشه ، یک بار که یه کاربر بگه "سلام" روبات تا ابد بهش میگه : "سلام ، خوبی!؟"
    اما وقتی Message_ID رو ست کنیم و در شرط ببینیم که متفاوت باشه با پیام قبلی ، این اتفاق نمی افته.
    ما اینجا یک حلقه ی بی نهایت داریم ، توی این حلقه ی بی نهایت GetUpdateID رو صدا می زنیم ، آخرین پیام هارو میگیریم ، و اگر متن پیام برابر بود با "سلام" و آیدی پیام ، با آیدی پیام قبلی برابر نبود ، پیام "سلام. خوبی!؟" را در همون گروه ارسال می کنیم

    ببینید :



    مشکلی که این روبات داره اینه که real Time نیست ، یعنی ما باید هی Request بدیم و چک کنیم ، در پست بعدی در مورد WebHook صحبت میکنم که اصلا چجوری باید باهاش کار کنیم...

    https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/getMe

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------



    سلام مجدد ،


    الآن میخوام بر مبنای 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 مشخص شده :


    ساخت یک بازی :

    اول باید بگیم بازی چجوری شروع بشه ، فرض کنید با کامند "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 که برای نقل قول به کار میره.



    موفق باشید

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


    سلام مجدد ،


    من از cURL خالص استفاده میکنم.

    متد SendPhoto به این صورت استفاده میشه:

    کد:
    https://api.telegram.org/TOKEN/SendPhoto

    الزام توضیحات نام متد
    بله آیدی چت رومی که روبات در آن است chat_id
    بله عکس (در ادامه توضیحات داده خواهد شد) photo
    خیر متنی در مورد عکس caption
    خیر آیدی پیامی که نقل قول می شود reply_to_message_id


    خب ، پس ما حتما باید chat_id و photo را ارسال کنیم. اما اینجا یک مسئله ای هست ، اونم اینه که تلگرام فقط فایلهایی که بر روی سرور خودش آپلود شدن و file_id دارند رو به مسنجر ارسال می کنه ، این یعنی ما باید اول فایل رو آپلود کنیم و بعد اون رو ارسال کنیم.

    فرض میکنم که قصد دارم این عکس رو ارسال کنم:


    اول باید عکس رو در سرور خودم ذخیره کنم ، از این تابع استفاده میکنم:

    کد PHP:
    function Download($url$saveto)
    {
        
    $content file_get_contents($url);
        
    file_put_contents($saveto$content);

    بسی خوب ، این تابع رو به این صورت که اجرا کنیم :

    کد PHP:
    Download("http://up.ashiyane.org/images/40r2bz28vnf9tc5ztegl.jpg","file.jpg"); 

    عکس روی سرور با نام file.jpg ذخیره میشه. الآن نیاز دارم تا یک Request ئه cURL بدم به متد SendPhoto ، برای اینکه فایل رو ارسال کنیم با هدر multipart ، یک '@' قبل از محل فایل قرار میدادیم ، اما در PHP 5.5 کلاس CURLFile به جای این کار استفاده میشه ، در Guzzle یا urllib2 هم تقریبا به همین صورته

    کد PHP:
    <?php
    $token
    ='bot93735019:AAHjnEyT614C5nXDxWpiouLZQ1B1sxbpzO4';
    $ch curl_init('https://api.telegram.org/'.$token.'/SendPhoto');
    $cfile = new CURLFile(realpath('file.png'),'image/png','photo.png');
    $data = array('chat_id' => '108432389''photo' => $cfile );
    curl_setopt($chCURLOPT_POST,1);
    curl_setopt($chCURLOPT_POSTFIELDS$data);
    curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
    curl_exec($ch);
    ?>

    خروجی که به ما داده میشه ، حاوی file_id ، نام کاربری روباتمون ، حجم فایل ، طول و عرض عکس هست. یادتونه گفتم telegram فقط فایلهایی رو به مسنجر میفرسته که file_id داشته باشن !؟ اینجا میتونیم file_id رو بدست بیاریم که اگر دوباره خواستیم همین عکس رو ارسال کنیم دیگه آپلودش نکنیم

    خروجی JSON به صورت Format شده :

    https://gist.githubusercontent.com/a...688bdca/a.json

    ولد photo خودش والد 3 تا ولد دیگه هست ، به ترتیب حاوی 3 تا سایز مختلف از عکس ، اگر بخواین هر وقت عکس با بیشترین سایز خودش ارسال بشه ، اینطوری باید عمل کرد.

    کد PHP:
    کد PHP:
    $json='{"ok":true,"result":{"message_id":555,"from":{"id":93735019,"first_name":"Boogh","username":"BooghBot"},"chat":{"id":108432389,"first_name":"Alireza"},"date":1437582347,"photo":[{"file_id":"AgADBAADzKcxG2tIlgVTV4qymcwQpYXBaTAABE-OpMG5MyiTeAgAAgI","file_size":1504,"width":69,"height":90},{"file_id":"AgADBAADzKcxG2tIlgVTV4qymcwQpYXBaTAABD-OvbH4eCgSdwgAAgI","file_size":22617,"width":247,"height":320},{"file_id":"AgADBAADzKcxG2tIlgVTV4qymcwQpYXBaTAABHLnGv34_RnFdggAAgI","file_size":38955,"width":500,"height":649}]}}';
    $obj=json_decode($json);
    echo 
    $obj->result->photo[2]->file_id
    حالا میخوام وقتی کامند ashiyane/ رو دریافت کردم ، هدر آشیانه (
    اینجا
    ) رو ارسال کنم.

    سورس میشه این :

    کد PHP:
    <?php
    function Download($url$saveto)
    {
        
    $content file_get_contents($url);
        
    file_put_contents($saveto$content);
    }
    $update json_decode(file_get_contents('php://input'));
    $message=$update->message->text;
    if(
    $message=="/ashiyane"){
        if(
    file_exists("ashiyane.png")){
            
    $token='bot93735019:AAHjnEyT614C5nXDxWpiouLZQ1B1sxbpzO4';
            
    $ch curl_init('https://api.telegram.org/bot'.$token.'/SendPhoto');
            
    $cfile file_put_contents('FileID.txt');
            
    $data = array('chat_id' => '108432389''photo' => $cfile );
            
    curl_setopt($chCURLOPT_POST,1);
            
    curl_setopt($chCURLOPT_POSTFIELDS$data);
            
    curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
            
    $result=curl_exec($ch);
        }else{
            
    Download("http://ashiyane.org/forums/images/metro/blue/misc/vbulletin4_logo.png","ashiyane.png");
            
    $token='bot93735019:AAHjnEyT614C5nXDxWpiouLZQ1B1sxbpzO4';
            
    $ch curl_init('https://api.telegram.org/bot'.$token.'/SendPhoto');
            
    $cfile = new CURLFile(realpath('ashiyane.png'),'image/png','ashiyane.png');
            
    $data = array('chat_id' => '108432389''photo' => $cfile );
            
    curl_setopt($chCURLOPT_POST,1);
            
    curl_setopt($chCURLOPT_POSTFIELDS$data);
            
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
            
    curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
            
    $result=curl_exec($ch);
            
    $obj=json_decode($result);
            
    $fileID=$obj->result->photo[2]->file_id;
            
    file_put_contents('FileID.txt',$fileID);
        }
    }
    ?>
    خب این سورس چیکار میکنه !؟ اول یک تابع Download داریم که دو آرگومان Link و File رو میدیم بهش ، تابع لینک را دریافت میکنه و دانلود را آغاز میکنه. و در فایلی که گفتیم ذخیره میکنه
    متغیر update$ مقدار ارسالی WebHook را دیکد میکنه و متغیر message$ ولد پیام را استخراج میکنه و در خودش قرار میده.

    چک میکنم اگر کامند وارده ashiyane/ بود ، اگر فایلی به اسم ashiyane.png در سرور وجود داشت ، بر مبنای FileID که در FileID.txt قرار داره فایل رو ارسال کنه ، و اگر این فایل وجود نداشت ، فایل رو آپلود کنه و از روی Response که داده میشه FileID را در یک فایل متنی ذخیره کنه.

    البته یکمی طولانیه کدها که میتونید خودتون تابعش کنید و طبیعتا اینطوری کدنویسی یکمی کمتر میشه.

    بقیه ی متدها هم اکثرا به همین صورت هستند ، مثلا SendAudio

    کد PHP:
    <?php
    $token
    ='bot93735019:AAHjnEyT614C5nXDxWpiouLZQ1B1sxbpzO4';
    $ch curl_init('https://api.telegram.org/'.$token.'/SendAudio');
    $cfile = new CURLFile(realpath('Test.mp3'),'audio/mpeg3','Test.mp3');
    $data = array('chat_id' => '108432389''audio' => $cfile );
    curl_setopt($chCURLOPT_POST,1);
    curl_setopt($chCURLOPT_POSTFIELDS$data);
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
    curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
    $result=curl_exec($ch);
    $obj=json_decode($result);
    $fileID=$obj->result->audio->file_id;
    file_put_contents('FileID.txt',$fileID);
    ?>
    با این مباحثی که گفتم ، امیدوارم با روبات نویسی برای تلگرام آشنا شده باشین



    موفق باشید

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    سلام ،

    یک سری مباحث هست که باقی مونده که اونها رو توی این پست تکمیل خواهم کرد ، اول به یک سوال دوستان ( که سوال اکثریت هم بوده!) پاسخ میدم ؛

    چیزی که در این پست میخوام توضیح بدم Keyboard هایی هست که بعضی روباتها دارند ،
    شبیه به این
    این کیبوردها توسط شئ ReplyKeyboardMarkup ایجاد میشن ، این شئ خودش 4 تا مقدار داره :


    1. keyboard : آرایه از کلید که بعد با هم بررسی میکنیم ، این مورد اجباری هست
    2. resize_keyboard : باعث می شود سایز کیبورد به صورت عمودی تنظیم شود
    3. one_time_keyboard : باعث می شود کیبورد فقط یک بار قابل استفاده باشد ، یعنی با اولین استفاده کیبورد مخفی شود
    4. selective : باعث می شود کیبورد فقط برای اشخاص خاصی قابل نمایش باشد ، نام کاربری این اشخاص باید در قسمت text ـه شی message درج شود



    خب ، در ابتدا اجازه دهید درخت JSON یک کیبورد ساده را بررسی کنیم:
    کد PHP:

    {
       
    "keyboard":[
          [
             
    "Row 1->Column 1",
             
    "Row 1->Column 2"
          
    ],
          [
             
    "Row 2->Column 1",
             
    "Row 2->Column 2"
          
    ],
          [
             
    "Row 3->Column 1",
             
    "Row 3->Column 2"
          
    ]
       ]

    کیبوردی که توسط این JSON برای ما ساخته خواهد شد به شکل زیر خواهد بود:
    http://up.ashiyane.org/images/8zesdmrl7isl5ijyooy.png

    فکر کنم با مقایسه ی کیبورد و JSON به ماجرا پی برده باشید :

    هر ولد Keyboard یک سطر است و مقادیر درون آن که با , جدا می شود ستون های آن سطر هستند

    حالا یک آرایه ی PHP خواهم ساخت و آن را به JSON تبدیل میکنم :

    کد PHP:
    $ar = array( 
       
    'keyboard' =>  
      array ( 
        
    =>  
        array ( 
          
    => 'Row 1->Column 1'
          
    => 'Row 1->Column 2'
        ), 
        
    =>  
        array ( 
          
    => 'Row 2->Column 1'
          
    => 'Row 2->Column 2'
        ), 
        
    =>  
        array ( 
          
    => 'Row 3->Column 1'
          
    => 'Row 3->Column 2'
        ), 
      ), 
    ); 
    مقادیر keyboard را مشاهده می کنید ، 3 سطر داریم که آرایه های درونی keyboard هستند و داخل هر سطر یک آرایه است که بیانگر ستون هاست ، سایر تنظیمات را نیز می توان به همین صورت اعمال کرد ، مثلا resize_keyboard را برابر true قرار دهیم:

    کد PHP:
    $ar = array( 
       
    'keyboard' =>  
      array ( 
        
    =>  
        array ( 
          
    => 'Row 1->Column 1'
          
    => 'Row 1->Column 2'
        ), 
        
    =>  
        array ( 
          
    => 'Row 2->Column 1'
          
    => 'Row 2->Column 2'
        ), 
        
    =>  
        array ( 
          
    => 'Row 3->Column 1'
          
    => 'Row 3->Column 2'
        ), 
      ), 
      
    'resize_keyboard'=>true 
    ); 
    حال قصد داریم روباتی بنویسیم که ستونها و سطرهای یک کیبورد را برای ما محاسبه کرده و آن کیبورد را به ما نمایش می دهد ، سورس به صورت زیر است :

    کد PHP:
    <?php 
    function AddtoKeyboard($row,$col){ 
        
    $ar = array( 
            
    'keyboard' =>  
            array ( 
            ), 
        ); 
        for(
    $i=1,$f=0;$i<=$row;$i++,$f++){ 
            
    $ar2=array("Row ".$i); 
            
    array_push($ar["keyboard"],$ar2); 
            for(
    $d=1;$d<$col;$d++){ 
                
    array_push($ar["keyboard"][$f],"Column"); 
            } 
        } 
        return 
    $ar

    $array = array(); 
    $update json_decode(file_get_contents('php://input')); 
    $id=$update->message->message_id
    $message=$update->message->text
    $m explode(","$message); 
    if((
    count($m))==2){ 
        
    $keyb=json_encode(AddtoKeyboard($m[0],$m[1])); 
        
    $rep=file_get_contents("https://api.telegram.org/bot93735019:AAG09uklgYZlSrRKtgDwgE2XxPRBWh7Sc8o/SendMessage?chat_id=".$update->message->chat->id."&text=Success!"."&reply_markup=".$keyb); 
    }else{ 
        
    $rep=json_decode(file_get_contents("https://api.telegram.org/bot93735019:AAG09uklgYZlSrRKtgDwgE2XxPRBWh7Sc8o/SendMessage?chat_id=".$update->message->chat->id."&text=".urldecode("Enter in (row,col) format! (E.g : (2,3) means a keyboard with 2 rows and 3 columns)"))); 

    ?>
    روبات در ابتدا نوع تعداد سطر و ستون را به صورت row,col دریافت می کند ، سپس با Explode این 2 را به یک تابع AddtoKeyboard ارسال میکند ، وظیفه ی این تابع Push کردن کلیدها در آرایه ی شئ ReplyKeyboardMarkup است تا آن را به متد SendMessage ارسال کنیم ، در زیر نمونه ای از کارکرد این روبات را می بینید :
    http://up.ashiyane.org/images/x1gtzzp66uif1l1nry9r.png

    به روبات گفته شد کیبوردی با 2 سطر و 3 ستون بسازد ، که آن را مشاهده میکنید...


    بسیار خب ، فکر نکنم مطلب دیگه ای باقی مونده باشه ، هر سوالی داشتید میتونید بپرسید در تاپیکهای مربوطه...
    موفق باشید ، در پناه حق
    ویرایش توسط miladtnt : May 23rd, 2016 در ساعت 12:31

  2. تعداد تشکر ها ازmiladtnt به دلیل پست مفید


  3. # ADS




     

  4. #2
    عضو انجمن miladtnt آواتار ها
    تاریخ عضویت
    Mar 2016
    محل سکونت
    TabriZ
    نوشته ها
    247
    تشکر تشکر کرده 
    219
    تشکر تشکر شده 
    376
    تشکر شده در
    275 پست

    پیش فرض پاسخ : آموزش ساخت روبات تلگرام (کامل) - Let's play with Telegram Bot API

    لطفا نظراتتونم بگید مرسی
    ویرایش توسط miladtnt : May 29th, 2016 در ساعت 11:15

  5. #3
    عضو انجمن
    تاریخ عضویت
    Dec 2010
    محل سکونت
    تبريز
    نوشته ها
    686
    تشکر تشکر کرده 
    391
    تشکر تشکر شده 
    573
    تشکر شده در
    427 پست

    پیش فرض پاسخ : آموزش ساخت روبات تلگرام (کامل) - Let's play with Telegram Bot API

    دوستان تلگرام تحت وب خودش چطوری کار می کنه من می خوام با اکانت خودم از طریق url پیام ارسال کنم به یه گروهی ممنون میشم راهنمایی کنید !

  6. #4
    عضو انجمن miladtnt آواتار ها
    تاریخ عضویت
    Mar 2016
    محل سکونت
    TabriZ
    نوشته ها
    247
    تشکر تشکر کرده 
    219
    تشکر تشکر شده 
    376
    تشکر شده در
    275 پست

    پیش فرض پاسخ : آموزش ساخت روبات تلگرام (کامل) - Let's play with Telegram Bot API

    نقل قول نوشته اصلی توسط ms313 نمایش پست ها
    دوستان تلگرام تحت وب خودش چطوری کار می کنه من می خوام با اکانت خودم از طریق url پیام ارسال کنم به یه گروهی ممنون میشم راهنمایی کنید !
    گروه هم chat_id داره باید پیداش کنین با روش هایی...

    بعد با sendMesaage به اون chat_id پیاماتونو بفرستین

  7. #5
    عضو انجمن
    تاریخ عضویت
    Dec 2010
    محل سکونت
    تبريز
    نوشته ها
    686
    تشکر تشکر کرده 
    391
    تشکر تشکر شده 
    573
    تشکر شده در
    427 پست

    پیش فرض پاسخ : آموزش ساخت روبات تلگرام (کامل) - Let's play with Telegram Bot API

    نقل قول نوشته اصلی توسط miladtnt نمایش پست ها
    گروه هم chat_id داره باید پیداش کنین با روش هایی...

    بعد با sendMesaage به اون chat_id پیاماتونو بفرستین
    دوست عزیز نمونه کد برای پی اچ پی یا ند جی اس دارید ؟!
    یا میشه از طریق crul ارسال کرد ؟!
    فقط من می خوام با اکانت خودم ارسال کنم نه بات !

  8. #6
    عضو انجمن miladtnt آواتار ها
    تاریخ عضویت
    Mar 2016
    محل سکونت
    TabriZ
    نوشته ها
    247
    تشکر تشکر کرده 
    219
    تشکر تشکر شده 
    376
    تشکر شده در
    275 پست

    پیش فرض پاسخ : آموزش ساخت روبات تلگرام (کامل) - Let's play with Telegram Bot API

    نقل قول نوشته اصلی توسط ms313 نمایش پست ها
    دوست عزیز نمونه کد برای پی اچ پی یا ند جی اس دارید ؟!
    یا میشه از طریق crul ارسال کرد ؟!
    فقط من می خوام با اکانت خودم ارسال کنم نه بات !
    روش کار برنامه های تلگرام (مثل برنامه خودش و موبوگرام و... ) با ارسال اطلاعات با json هست

    اما تاحالا نشنیدم با url بشه اینکارو کرد!

  9. #7
    عضو انجمن
    تاریخ عضویت
    Dec 2010
    محل سکونت
    تبريز
    نوشته ها
    686
    تشکر تشکر کرده 
    391
    تشکر تشکر شده 
    573
    تشکر شده در
    427 پست

    پیش فرض پاسخ : آموزش ساخت روبات تلگرام (کامل) - Let's play with Telegram Bot API

    نقل قول نوشته اصلی توسط miladtnt نمایش پست ها
    روش کار برنامه های تلگرام (مثل برنامه خودش و موبوگرام و... ) با ارسال اطلاعات با json هست

    اما تاحالا نشنیدم با url بشه اینکارو کرد!
    خود وب تلگرام چطوری کار می کنه ؟!
    به یه لینکی داده ها رو ارسال می کنه حالا جی سان !
    همون لینک رو می خوام با یوزر خودم ارسال کنم فقط می خوام با یوزر خودم یه پیام ساده به خودم بتونم ارسال کنم !
    قبلا با بات ها نوشتیم واسه وی بولتین ولی نتونستم با یوزر خودم پارامتر ها رو پیدا کنم ارسال کنم !
    ممنون میشم کمک کنید اینو رو هم اکی کنم !

  10. #8
    عضو انجمن miladtnt آواتار ها
    تاریخ عضویت
    Mar 2016
    محل سکونت
    TabriZ
    نوشته ها
    247
    تشکر تشکر کرده 
    219
    تشکر تشکر شده 
    376
    تشکر شده در
    275 پست

    پیش فرض پاسخ : آموزش ساخت روبات تلگرام (کامل) - Let's play with Telegram Bot API

    نقل قول نوشته اصلی توسط ms313 نمایش پست ها
    خود وب تلگرام چطوری کار می کنه ؟!
    به یه لینکی داده ها رو ارسال می کنه حالا جی سان !
    همون لینک رو می خوام با یوزر خودم ارسال کنم فقط می خوام با یوزر خودم یه پیام ساده به خودم بتونم ارسال کنم !
    قبلا با بات ها نوشتیم واسه وی بولتین ولی نتونستم با یوزر خودم پارامتر ها رو پیدا کنم ارسال کنم !
    ممنون میشم کمک کنید اینو رو هم اکی کنم !

    هزارتا پارامتر داره برنامه مثل روبات نیست به یه لینک حل بشه
    هزارجور تایید و ...

اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. ویجت لاگین تلگرام Telegram [آموزش]
    توسط shahinmq در انجمن مباحث دیگر
    پاسخ ها: 1
    آخرين نوشته: March 28th, 2018, 13:04
  2. پاسخ ها: 0
    آخرين نوشته: May 29th, 2017, 00:24
  3. از رازهای google play سر دربیاورید + آموزش
    توسط saeed1988m در انجمن مباحث دیگر
    پاسخ ها: 1
    آخرين نوشته: May 22nd, 2016, 18:01
  4. پاسخ ها: 2
    آخرين نوشته: May 5th, 2016, 12:20

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •