پرش به محتویات

متد ها

گرفتن اطلاعات بات

  • متد: getMe
  • اطلاعات پایه‌ای بات را بازمی‌گرداند، شامل نام، نام کاربری، شناسه و... تا بتوان هویت و تنظیمات اولیه بات را بررسی کرد.
  • ورودی
  • این متد اطلاعات پایه‌ای بات را برمی‌گرداند. معمولاً برای تست اتصال بات و شناسایی آن استفاده می‌شود و هیچ پارامتری به عنوان ورودی دریافت نمیکند.
  • خروجی
فیلد نوع توضیحات
bot Bot بات
  • مثال

    $bot->getMe();
                

ارسال پیام (Text, Keypad, InlineKeypad)

  • متد: send
  • این متد پیام را از بات به یک چت ارسال می‌کند و نوع محتوا را می‌توان مشخص کرد. مانند ارسال Text، Keypad یا InlineKeypad برای دریافت پاسخ مستقیم کاربر.
  • ورودی
فیلد نوع توضیحات
chat_id str شناسه چت
text str متن پیام
chatkeypad Keypad keypad
inlinekeypad Keypad Keypad
  • خروجی
فیلد نوع توضیحات
message_id str شناسه پیام
  • مثال

    <?php
                                  require_once 'vendor/autoload.php';
                                  
                                  use RubikaBot\Bot;
                                  use RubikaBot\Keyboard\Keypad;
                                  use RubikaBot\Keyboard\Button;
                                  
                                  $bot = new Bot('YOUR_TOKEN');
                                  
                                  // ساخت کیبورد اینلاین
                                  $keypad = Keypad::make()
                                      ->row()
                                          ->add(Button::simple('100', 'Add Account'))
                                      ->row()
                                          ->add(Button::simple('101', 'Edit Account'))
                                          ->add(Button::simple('102', 'Remove Account'));
                                  
                                  // ارسال پیام با کیبورد اینلاین
                                  $result = $bot->chat('CHAT_ID')
                                      ->message('Welcome')
                                      ->inlineKeypad($keypad->toArray())
                                      ->send();
                                  
                                  echo "پیام با شناسه {$result['message_id']} ارسال شد";
                                  <

    ارسال keypad

    • متد: send
    • ورودی
    فیلد نوع توضیحات
    chat_id str شناسه چت
    text str متن پیام
    chatkeypad ChatKeypadTypeEnum نوع keypad
    chatkeypad Keypad keypad
    message_id str در جوابِ پیامِ؟
    • خروجی
    فیلد نوع توضیحات
    message_id str شناسه پیام
    • مثال

      <?php
                          require_once 'vendor/autoload.php';
                          
                          use RubikaBot\Bot;
                          use RubikaBot\Keyboard\Keypad;
                          use RubikaBot\Keyboard\Button;
                          
                          $bot = new Bot('YOUR_TOKEN');
                          
                          // ساخت کیبورد چت
                          $keypad = Keypad::make()
                              ->setResize(true)
                              ->setOnetime(false)
                              ->row()
                                  ->add(Button::simple('100', 'Add Account'))
                              ->row()
                                  ->add(Button::simple('101', 'Edit Account'))
                                  ->add(Button::simple('102', 'Remove Account'));
                          
                          // ارسال پیام با کیبورد چت
                          $result = $bot->chat('CHAT_ID')
                              ->message('Welcome')
                              ->chatKeypad($keypad->toArray(), 'New')
                              ->send();
                          
                          echo "پیام با شناسه {$result['message_id']} ارسال شد";
                          

    ارسال پیام متنی

    • متد: send
    • ورودی
    فیلد نوع توضیحات
    chat_id str شناسه چت
    text str متن پیام
    message_id str در جوابِ پیامِ؟
    • خروجی
    فیلد نوع توضیحات
    message_id str شناسه پیام
    • مثال

      <?php
                        require_once 'vendor/autoload.php';
                        
                        use RubikaBot\Bot;
                        
                        $bot = new Bot('YOUR_TOKEN');
                        
                        // ارسال پیام متنی ساده
                        $result = $bot->chat('CHAT_ID')
                            ->message('Hello user, this is my text')
                            ->send();
                        
                        echo "پیام با شناسه {$result['message_id']} ارسال شد";
                        
                        // ارسال پیام با ریپلای
                        $result2 = $bot->chat('CHAT_ID')
                            ->message('این پیام در پاسخ به پیام دیگری است')
                            ->replyTo('MESSAGE_ID_TO_REPLY')
                            ->send();
                        
      curl --location -g --request POST 'https://botapi.rubika.ir/v3/{token}/sendMessage' \
                                --header 'Content-Type: application/json' \
                                --data-raw '{
                                    "text": "Hello user, this is my text",
                                    "chat_id": "{chat_id}"
                                }'
                        
      import requests
                        
                        data = {
                            "chat_id": chat_id,
                            "text": "Hello user, this is my text",
                        }
                        url = f'https://botapi.rubika.ir/v3/{token}/sendMessage'
                        response = requests.post(url, json=data)
                        
                        print(response.text)
                        
      var request = require('request');
                        var options = {
                          'method': 'POST',
                          'url': 'https://botapi.rubika.ir/v3/{token}/sendMessage',
                          'headers': {
                            'Content-Type': 'application/json'
                          },
                          body: JSON.stringify({
                            "chat_id": chat_id,
                            "text": "Hello user, this is my text"
                          })
                        
                        };
                        request(options, function (error, response) {
                          if (error) throw new Error(error);
                          console.log(response.body);
                        });
                        

    ارسال نظرسنجی

    • متد: sendPoll
    • این متد امکان ارسال نظرسنجی از بات به چت را فراهم می‌کند، شامل سوال، گزینه‌ها و تنظیمات تعامل کاربران با نظرسنجی.
    • ورودی
    فیلد نوع توضیحات
    chat_id str شناسه چت
    poll str متن سوال
    options list[str] گزینه‌های سوال
    • خروجی
    فیلد نوع توضیحات
    message_id str شناسه پیام
    • مثال

      <?php
                      require_once 'vendor/autoload.php';
                      
                      use RubikaBot\Bot;
                      
                      $bot = new Bot('YOUR_TOKEN');
                      
                      // ارسال نظرسنجی
                      $result = $bot->chat('CHAT_ID')
                          ->poll(
                              'Do you have any question?',
                              ['yes', 'no']
                          )
                          ->sendPoll();
                      
                      echo "نظرسنجی با شناسه {$result['message_id']} ارسال شد";
                      
                      // مثال دیگر با گزینه‌های بیشتر
                      $result2 = $bot->chat('CHAT_ID')
                          ->poll(
                              'کدام زبان برنامه‌نویسی را ترجیح می‌دهید؟',
                              ['Python', 'PHP', 'JavaScript', 'Java']
                          )
                          ->sendPoll();
                      
      curl --location -g --request POST 'https://botapi.rubika.ir/v3/{token}/sendPoll' \
                              --header 'Content-Type: application/json' \
                              --data-raw '{
                                  "chat_id": "{chat_id}",
                                  "question": "Do you have any question?",
                                  "options": ["yes", "no"]
                              }'
                      
      import requests
                      
                      data = {
                          "chat_id": chat_id,
                          "question": "Do you have any question?",
                          "options": ["yes", "no"],
                      }
                      url = f'https://botapi.rubika.ir/v3/{token}/sendPoll'
                      response = requests.post(url, json=data)
                      
                      print(response.text)
                      
      from rubika_bot.requests import send_poll
                      
                      send_poll(
                          token='SUPER_SECRET_TOKEN',
                          chat_id='CHAT_ID',
                          question='Do you have any question?',
                          options=['yes', 'no']
                      )
                      
      var request = require('request');
                      var options = {
                        'method': 'POST',
                        'url': 'https://botapi.rubika.ir/v3/{token}/sendPoll',
                        'headers': {
                          'Content-Type': 'application/json'
                        },
                        body: JSON.stringify({
                          "chat_id": chat_id,
                          "question": "Do you have any question?",
                          "options": ["yes", "no"],
                        })
                      
                      };
                      request(options, function (error, response) {
                        if (error) throw new Error(error);
                        console.log(response.body);
                      });
                      

    ارسال موقعیت مکانی

    • متد: sendLocation
    • این متد موقعیت مکانی را از بات به چت ارسال می‌کند و شامل مختصات طول و عرض جغرافیایی است.
    • ورودی
    فیلد نوع توضیحات
    chat_id str شناسه چت
    latitude str عرض جغرافیایی
    longitude str طول جغرافیایی
    chatkeypad Keypad keypad
    inlinekeypad Keypad Keypad
    message_id str در جوابِ پیامِ؟
    chatkeypad ChatKeypadTypeEnum نوع keypad
    • خروجی
    فیلد نوع توضیحات
    message_id str شناسه پیام
    • مثال

      <?php
                    require_once 'vendor/autoload.php';
                    
                    use RubikaBot\Bot;
                    
                    $bot = new Bot('YOUR_TOKEN');
                    
                    // ارسال موقعیت مکانی
                    $result = $bot->chat('CHAT_ID')
                        ->location(35.759662741892626, 51.4036344416759)
                        ->sendLocation();
                    
                    echo "موقعیت مکانی با شناسه {$result['message_id']} ارسال شد";
                    
                    // ارسال موقعیت با کیبورد اینلاین
                    $result2 = $bot->chat('CHAT_ID')
                        ->location(35.6892, 51.3890)
                        ->inlineKeypad([
                            'rows' => [
                                [
                                    'buttons' => [
                                        [
                                            'id' => 'location_btn',
                                            'type' => 'Simple',
                                            'button_text' => 'مشاهده در نقشه'
                                        ]
                                    ]
                                ]
                            ]
                        ])
                        ->sendLocation();
                    
      curl --location -g --request POST 'https://botapi.rubika.ir/v3/{token}/sendLocation' \
                            --header 'Content-Type: application/json' \
                            --data-raw '{
                                "chat_id": "{chat_id}",
                                "latitude": "{latitude}",
                                "longitude": "{longitude}"
                            }'
                    
      import requests
                    
                    data = {
                        "chat_id": chat_id,
                        "latitude": latitude,
                        "longitude": longitude,
                    }
                    url = f'https://botapi.rubika.ir/v3/{token}/sendLocation'
                    response = requests.post(url, json=data)
                    
                    print(response.text)
                    
      from rubika_bot.requests import send_location
                    
                    send_location(
                        token='SUPER_SECRET_TOKEN',
                        chat_id='CHAT_ID',
                        latitude='35.759662741892626',
                        longitude='51.4036344416759'
                    )
                    
      var request = require('request');
                    var options = {
                      'method': 'POST',
                      'url': 'https://botapi.rubika.ir/v3/{token}/sendLocation',
                      'headers': {
                        'Content-Type': 'application/json'
                      },
                      body: JSON.stringify({
                        "chat_id": chat_id,
                        "latitude": latitude,
                        "longitude": longitude,
                      })
                    
                    };
                    request(options, function (error, response) {
                      if (error) throw new Error(error);
                      console.log(response.body);
                    });
                    

    ارسال مخاطب

    • متد: sendContact
    • این متد امکان ارسال اطلاعات تماس (شماره تلفن و نام فرد) از بات به چت را فراهم می‌کند تا کاربران بتوانند به‌طور مستقیم با آن تماس برقرار کنند.
    • ورودی
    فیلد نوع توضیحات
    chat_id str شناسه چت
    first_name str نام مخاطب
    last_name str نام‌خانوادگی مخاطب
    phone_number str شماره مخاطب
    chatkeypad Keypad keypad
    inlinekeypad Keypad keypad
    message_id str در جوابِ پیامِ؟
    chatkeypad ChatKeypadTypeEnum نوع keypad
    • خروجی
    فیلد نوع توضیحات
    message_id str شناسه پیام
    • مثال

      <?php
                  require_once 'vendor/autoload.php';
                  
                  use RubikaBot\Bot;
                  
                  $bot = new Bot('YOUR_TOKEN');
                  
                  // ارسال مخاطب
                  $result = $bot->chat('CHAT_ID')
                      ->contact(
                          'علی',
                          'رضایی',
                          '09123456789'
                      )
                      ->sendContact();
                  
                  echo "مخاطب با شناسه {$result['message_id']} ارسال شد";
                  
                  // ارسال مخاطب با کیبورد اینلاین
                  $result2 = $bot->chat('CHAT_ID')
                      ->contact(
                          'محمد',
                          'احمدی',
                          '09351112233'
                      )
                      ->inlineKeypad([
                          'rows' => [
                              [
                                  'buttons' => [
                                      [
                                          'id' => 'call_btn',
                                          'type' => 'Simple',
                                          'button_text' => 'تماس بگیر'
                                      ]
                                  ]
                              ]
                          ]
                      ])
                      ->sendContact();
                  
      curl --location -g --request POST 'https://botapi.rubika.ir/v3/{token}/sendContact' \
                          --header 'Content-Type: application/json' \
                          --data-raw '{
                              "chat_id": "{chat_id}",
                              "first_name": "{first_name}",
                              "last_name": "{last_name}",
                              "phone_number": "{phone_number}"
                          }'
                  
      import requests
                  
                  data = {
                      "chat_id": chat_id,
                      "first_name": first_name,
                      "last_name": last_name,
                      "phone_number": phone_number,
                  }
                  url = f'https://botapi.rubika.ir/v3/{token}/sendContact'
                  response = requests.post(url, json=data)
                  
                  print(response.text)
                  
      from rubika_bot.requests import send_contact
                  
                  send_contact(
                      token='SUPER_SECRET_TOKEN',
                      chat_id='CHAT_ID',
                      first_name='Ali',
                      last_name='Rn',
                      phone_number='09038754321'
                  )
                  
      var request = require('request');
                  var options = {
                    'method': 'POST',
                    'url': 'https://botapi.rubika.ir/v3/{token}/sendContact',
                    'headers': {
                      'Content-Type': 'application/json'
                    },
                    body: JSON.stringify({
                      "chat_id": chat_id,
                      "first_name": first_name,
                      "last_name": last_name,
                      "phone_number": phone_number
                    })
                  
                  };
                  request(options, function (error, response) {
                    if (error) throw new Error(error);
                    console.log(response.body);
                  });
                  

    گرفتن اطلاعات چت

    • متد: getChat
    • این متد اطلاعات کامل یک چت مشخص را بازمیگرداند، شامل شناسه، نام، نوع، تصویر و تنظیمات آن، تا بات بتواند ویژگی‌ها و وضعیت چت را مدیریت یا بررسی کند.
    • ورودی
    فیلد نوع توضیحات
    chat_id str شناسه چت
    • خروجی
    فیلد نوع توضیحات
    chat Chat چت
    • مثال

      <?php
                require_once 'vendor/autoload.php';
                
                use RubikaBot\Bot;
                
                $bot = new Bot('YOUR_TOKEN');
                
                // دریافت اطلاعات چت
                $chatInfo = $bot->getChat([
                    'chat_id' => 'CHAT_ID'
                ]);
                
                // یا به روش ساده‌تر
                $chatInfo = $bot->getChatInfo('CHAT_ID');
                
                // نمایش اطلاعات چت
                echo "عنوان چت: {$chatInfo['title']}" . PHP_EOL;
                echo "نوع چت: {$chatInfo['type']}" . PHP_EOL;
                echo "آیدی چت: {$chatInfo['chat_id']}" . PHP_EOL;
                
                // بررسی نوع چت
                if ($chatInfo['type'] === 'Group') {
                    echo "این یک گروه است" . PHP_EOL;
                    echo "تعداد اعضا: {$chatInfo['members_count']}" . PHP_EOL;
                }
                
                // استفاده در شرط
                if ($chatInfo['type'] === 'User') {
                    // ارسال پیام خصوصی
                    $bot->chat($chatInfo['chat_id'])
                        ->message("سلام {$chatInfo['title']}! 👋")
                        ->send();
                }
                

    گرفتن آخرین آپدیت‌ها

    • متد: getUpdates
    • این متد تمامی پیام‌ها، ویرایش‌ها و رویدادهای جدید مربوط به چت‌ها را از سرور دریافت می‌کند. با استفاده از آن، بات می‌تواند فعالیت‌های کاربران، پاسخ‌ها، و تغییرات پیام‌ها را دنبال کند.
    • ورودی
    فیلد نوع توضیحات
    offset_id str شناسه‌ای برای دریافت ادامه‌ی لیست. در صورت تمایل به دریافت پیام‌های بعدی، مقدار next_offset_id درخواست قبلی را در این فیلد قرار دهید.
    limit int تعداد رکوردهای هر درخواست
    • خروجی
    فیلد نوع توضیحات
    updates list[Update] آرایه‌ای از آپدیت ها
    next_offset_id str شناسه‌ای برای درخواست بعدی جهت دریافت ادامه‌ی داده‌ها.
    • مثال

      <?php
              require_once 'vendor/autoload.php';
              
              use RubikaBot\Bot;
              use RubikaBot\Types\Update;
              
              $bot = new Bot('YOUR_TOKEN');
              
              // دریافت آپدیت‌ها با محدودیت تعداد
              $updates = $bot->getUpdates([
                  'limit' => 10
              ]);
              
              // پردازش آپدیت‌ها
              foreach ($updates['updates'] as $update) {
                  echo "شناسه آپدیت: {$update['update_id']}" . PHP_EOL;
                  echo "نوع آپدیت: {$update['type']}" . PHP_EOL;
                  
                  // بررسی نوع آپدیت
                  if ($update['type'] === 'Message') {
                      echo "پیام جدید از: {$update['message']['text']}" . PHP_EOL;
                      echo "در چت: {$update['message']['chat_id']}" . PHP_EOL;
                  }
                  
                  if ($update['type'] === 'CallbackQuery') {
                      echo "کلیک روی دکمه: {$update['callback_query']['button_id']}" . PHP_EOL;
                  }
              }
              
              // دریافت آپدیت‌های بعدی با استفاده از offset
              if (isset($updates['next_offset_id']) && $updates['next_offset_id']) {
                  $nextUpdates = $bot->getUpdates([
                      'offset_id' => $updates['next_offset_id'],
                      'limit' => 10
                  ]);
                  
                  echo "تعداد آپدیت‌های بعدی: " . count($nextUpdates['updates']) . PHP_EOL;
              }
              
              // حلقه برای دریافت مداوم آپدیت‌ها
              $offset = null;
              while (true) {
                  $updates = $bot->getUpdates([
                      'offset_id' => $offset,
                      'limit' => 10
                  ]);
                  
                  foreach ($updates['updates'] as $update) {
                      // پردازش هر آپدیت
                      var_dump($update);
                  }
                  
                  $offset = $updates['next_offset_id'] ?? $offset;
                  sleep(1); // تاخیر 1 ثانیه
              }
              

    فوروارد کردن پیام

    • متد: forwardMessage
    • این متد پیام موجود در یک چت را به چت دیگری منتقل می‌کند، بدون تغییر محتوا و با حفظ اطلاعات اصلی پیام.
    • ورودی
    فیلد نوع توضیحات
    from_chat_id str از چتِ؟
    message_id str شناسه پیام
    to_chat_id str به چتِ؟
    • خروجی
    فیلد نوع توضیحات
    new_message_id str شناسه پیام جدید
    • مثال

      <?php
            require_once 'vendor/autoload.php';
            
            use RubikaBot\Bot;
            
            $bot = new Bot('YOUR_TOKEN');
            
            // فوروارد پیام از یک چت به چت دیگر
            $result = $bot->forwardFrom('FROM_CHAT_ID')
                ->messageId('MESSAGE_ID')
                ->forwardTo('TO_CHAT_ID')
                ->forward();
            
            echo "پیام با شناسه جدید {$result['new_message_id']} فوروارد شد" . PHP_EOL;
            
            // فوروارد با غیرفعال کردن نوتیفیکیشن
            $result2 = $bot->forwardFrom('GROUP_CHAT_ID')
                ->messageId('IMPORTANT_MESSAGE_ID')
                ->forwardTo('USER_CHAT_ID')
                ->disableNotification(true)
                ->forward();
            
            // فوروارد چندین پیام
            $messageIds = ['MSG_1', 'MSG_2', 'MSG_3'];
            foreach ($messageIds as $msgId) {
                $result = $bot->forwardFrom('SOURCE_CHAT')
                    ->messageId($msgId)
                    ->forwardTo('DESTINATION_CHAT')
                    ->forward();
                
                echo "پیام {$msgId} با شناسه جدید {$result['new_message_id']} فوروارد شد" . PHP_EOL;
            }
            
            // استفاده در هندلر پیام برای فوروارد خودکار
            $bot->onMessage(function(Bot $bot, $message) {
                // اگر پیام حاوی کلمه "فوروارد" بود، به چت مدیریت فوروارد کن
                if (strpos($message->text, 'فوروارد') !== false) {
                    $result = $bot->forwardFrom($message->chat_id)
                        ->messageId($message->message_id)
                        ->forwardTo('MANAGEMENT_CHAT_ID')
                        ->forward();
                    
                    // پاسخ به کاربر
                    $bot->chat($message->chat_id)
                        ->message("پیام شما به مدیریت فوروارد شد ✅")
                        ->send();
                }
            });
            

    ویرایش متن پیام

    • متد: editMessage
    • این متد متن یک پیام ارسال‌شده توسط بات را ویرایش می‌کند، بدون ایجاد پیام جدید در چت.
    • ورودی
    فیلد نوع توضیحات
    chat_id str شناسه چت
    message_id str شناسه پیام
    text str پیام
    • مثال

      <?php
          require_once 'vendor/autoload.php';
          
          use RubikaBot\Bot;
          
          $bot = new Bot('YOUR_TOKEN');
          
          // ویرایش متن پیام
          $result = $bot->chat('CHAT_ID')
              ->messageId('MESSAGE_ID')
              ->message('این متن جدید است')
              ->editMessage();
          
          echo "پیام با موفقیت ویرایش شد" . PHP_EOL;
          
          // ویرایش پیام با فرمت‌بندی
          $result2 = $bot->chat('CHAT_ID')
              ->messageId('MESSAGE_ID')
              ->message("متن **بولد** و __ایتالیک__")
              ->setParseMode('Markdown')
              ->editMessage();
          
          // ویرایش پیام در پاسخ به رویداد
          $bot->onMessage(function(Bot $bot, $message) {
              // ارسال پیام اولیه
              $sentMessage = $bot->chat($message->chat_id)
                  ->message("در حال پردازش...")
                  ->send();
              
              // شبیه‌سازی پردازش
              sleep(2);
              
              // ویرایش پیام بعد از پردازش
              $bot->chat($message->chat_id)
                  ->messageId($sentMessage['message_id'])
                  ->message("پردازش با موفقیت انجام شد! ✅")
                  ->editMessage();
          });
          
          // ویرایش پیام با شمارنده
          $messageId = 'COUNTDOWN_MESSAGE_ID';
          for ($i = 5; $i > 0; $i--) {
              $bot->chat('CHAT_ID')
                  ->messageId($messageId)
                  ->message("شمارنده: {$i}")
                  ->editMessage();
              
              sleep(1);
          }
          
          // ویرایش نهایی
          $bot->chat('CHAT_ID')
              ->messageId($messageId)
              ->message("شمارنده به پایان رسید! 🎉")
              ->editMessage();
          
          // ویرایش پیام با استفاده از متد مستقیم
          $result3 = $bot->editMessageText([
              'chat_id' => 'CHAT_ID',
              'message_id' => 'MESSAGE_ID',
              'text' => 'متن ویرایش شده'
          ]);
          

    ویرایش Inline Keypad

    • متد: editMessageKeypad
    • این متد صفحه‌کلید (InlineKeypad) یک پیام موجود را به‌روزرسانی می‌کند، بدون تغییر متن پیام.
    • ورودی
    فیلد نوع توضیحات
    chat_id str شناسه چت
    message_id str شناسه پیام
    inline_keypad Keypad Keypad
    • مثال

      <?php
        require_once 'vendor/autoload.php';
        
        use RubikaBot\Bot;
        use RubikaBot\Keyboard\Keypad;
        use RubikaBot\Keyboard\Button;
        
        $bot = new Bot('YOUR_TOKEN');
        
        // ساخت کیبورد جدید
        $newKeypad = Keypad::make()
            ->row()
                ->add(Button::simple('add_account', '➕ افزودن حساب'))
            ->row()
                ->add(Button::simple('edit_account', '✏️ ویرایش حساب'))
                ->add(Button::simple('remove_account', '🗑️ حذف حساب'));
        
        // ویرایش کیبورد پیام
        $result = $bot->chat('CHAT_ID')
            ->messageId('MESSAGE_ID')
            ->inlineKeypad($newKeypad->toArray())
            ->editMessageKeypad();
        
        echo "کیبورد پیام با موفقیت ویرایش شد" . PHP_EOL;
        
        // مثال پیشرفته: تغییر کیبورد بر اساس وضعیت
        $bot->onMessage(function(Bot $bot, $message) {
            // اگر کاربر روی دکمه "مشاهده جزئیات" کلیک کرد
            if ($message->button_id === 'view_details') {
                // ساخت کیبورد جدید با گزینه‌های بیشتر
                $detailedKeypad = Keypad::make()
                    ->row()
                        ->add(Button::simple('edit_profile', '👤 ویرایش پروفایل'))
                    ->row()
                        ->add(Button::simple('change_password', '🔐 تغییر رمز'))
                        ->add(Button::simple('privacy_settings', '⚙️ تنظیمات حریم خصوصی'))
                    ->row()
                        ->add(Button::simple('back_to_main', '🔙 بازگشت'));
                
                // ویرایش کیبورد پیام فعلی
                $bot->chat($message->chat_id)
                    ->messageId($message->message_id)
                    ->inlineKeypad($detailedKeypad->toArray())
                    ->editMessageKeypad();
            }
            
            // اگر کاربر روی دکمه "بازگشت" کلیک کرد
            if ($message->button_id === 'back_to_main') {
                // بازگشت به کیبورد اصلی
                $mainKeypad = Keypad::make()
                    ->row()
                        ->add(Button::simple('view_details', '📋 مشاهده جزئیات'))
                    ->row()
                        ->add(Button::simple('settings', '⚙️ تنظیمات'))
                        ->add(Button::simple('help', '❓ راهنما'));
                
                $bot->chat($message->chat_id)
                    ->messageId($message->message_id)
                    ->inlineKeypad($mainKeypad->toArray())
                    ->editMessageKeypad();
            }
        });
        
        // ویرایش کیبورد با استفاده از متد مستقیم
        $keypadData = [
            'rows' => [
                [
                    'buttons' => [
                        [
                            'id' => 'btn1',
                            'type' => 'Simple',
                            'button_text' => 'دکمه ۱'
                        ]
                    ]
                ]
            ]
        ];
        
        $result2 = $bot->editMessageKeypad([
            'chat_id' => 'CHAT_ID',
            'message_id' => 'MESSAGE_ID',
            'inline_keypad' => $keypadData
        ]);
        

    حذف پیام

    • متد: deleteMessage
    • این متد یک پیام مشخص را از چت حذف می‌کند، شامل پیام‌های ارسالی بات یا پیام‌های دیگران (در صورت داشتن مجوز).
    • ورودی
    فیلد نوع توضیحات
    chat_id str شناسه چت
    message_id str شناسه پیام
    • مثال

      <?php
      require_once 'vendor/autoload.php';
      
      use RubikaBot\Bot;
      
      $bot = new Bot('YOUR_TOKEN');
      
      // حذف پیام
      $result = $bot->chat('CHAT_ID')
          ->messageId('MESSAGE_ID')
          ->delete();
      
      echo "پیام با موفقیت حذف شد" . PHP_EOL;
      
      // حذف پیام با استفاده از متد مستقیم
      $result2 = $bot->deleteMessage([
          'chat_id' => 'CHAT_ID',
          'message_id' => 'MESSAGE_ID'
      ]);
      
      // حذف پیام در پاسخ به رویداد
      $bot->onMessage(function(Bot $bot, $message) {
          // اگر پیام حاوی کلمه ممنوعه بود، حذف شود
          $forbiddenWords = ['اسپم', 'تبلیغ', 'فیلتر'];
          
          foreach ($forbiddenWords as $word) {
              if (strpos($message->text, $word) !== false) {
                  // حذف پیام
                  $bot->chat($message->chat_id)
                      ->messageId($message->message_id)
                      ->delete();
                  
                  // ارسال اخطار
                  $bot->chat($message->chat_id)
                      ->message("⚠️ پیام شما به دلیل محتوای نامناسب حذف شد.")
                      ->send();
                  
                  break;
              }
          }
      });
      
      // حذف پیام‌های قدیمی به صورت دسته‌ای
      $oldMessages = ['MSG_001', 'MSG_002', 'MSG_003', 'MSG_004'];
      foreach ($oldMessages as $messageId) {
          try {
              $bot->chat('CHAT_ID')
                  ->messageId($messageId)
                  ->delete();
              
              echo "پیام {$messageId} حذف شد" . PHP_EOL;
              sleep(1); // تاخیر برای جلوگیری از محدودیت نرخ
          } catch (Exception $e) {
              echo "خطا در حذف پیام {$messageId}: {$e->getMessage()}" . PHP_EOL;
          }
      }
      
      // حذف پیام خود بات بعد از مدت زمان مشخص
      $bot->onMessage(function(Bot $bot, $message) {
          // اگر پیام دستور /temp بود
          if ($message->text === '/temp') {
              // ارسال پیام موقت
              $tempMessage = $bot->chat($msmessageg->chat_id)
                  ->message("این پیام بعد از 10 ثانیه حذف می‌شود...")
                  ->send();
              
              // حذف پیام بعد از 10 ثانیه
              sleep(10);
              $bot->chat($message->chat_id)
                  ->messageId($tempMessage['message_id'])
                  ->delete();
          }
      });
      

    تنظیم دستور‌ها (commands)

    • متد: setCommands
    • این متد فهرست دستورات قابل استفاده بات را تعریف یا به‌روزرسانی می‌کند تا کاربر بتواند آنها را در رابط بات مشاهده کند.
    • ورودی
    فیلد نوع توضیحات
    bot_commands list[BotCommand] آرایه‌ای از دستورات
    • مثال

      <?php
      require_once 'vendor/autoload.php';
      
      use RubikaBot\Bot;
      
      $bot = new Bot('YOUR_TOKEN');
      
      // تنظیم دستورات بات
      $commands = [
        [
            'command' => 'start',
            'description' => 'شروع کار با ربات'
        ],
        [
            'command' => 'help',
            'description' => 'راهنمای استفاده از ربات'
        ],
        [
            'command' => 'profile',
            'description' => 'مشاهده پروفایل کاربر'
        ],
        [
            'command' => 'settings',
            'description' => 'تنظیمات ربات'
        ]
      ];
      
      $result = $bot->setCommands([
        'bot_commands' => $commands
      ]);
      
      echo "دستورات بات با موفقیت تنظیم شد" . PHP_EOL;
      
      // تنظیم دستورات پیشرفته با دسته‌بندی
      $advancedCommands = [
        // دستورات عمومی
        [
            'command' => 'start',
            'description' => '🚀 شروع کار با ربات'
        ],
        [
            'command' => 'help',
            'description' => '📖 راهنمای کامل'
        ],
        
        // دستورات کاربری
        [
            'command' => 'profile',
            'description' => '👤 پروفایل من'
        ],
        [
            'command' => 'balance',
            'description' => '💰 موجودی حساب'
        ],
        
        // دستورات مدیریتی
        [
            'command' => 'admin',
            'description' => '⚙️ پنل مدیریت'
        ],
        [
            'command' => 'stats',
            'description' => '📊 آمار ربات'
        ]
      ];
      
      $result2 = $bot->setCommands([
        'bot_commands' => $advancedCommands
      ]);
      
      // تنظیم دستورات به صورت پویا بر اساس زبان کاربر
      $persianCommands = [
        ['command' => 'start', 'description' => 'شروع'],
        ['command' => 'help', 'description' => 'راهنما'],
        ['command' => 'profile', 'description' => 'پروفایل']
      ];
      
      $englishCommands = [
        ['command' => 'start', 'description' => 'Start bot'],
        ['command' => 'help', 'description' => 'Help guide'],
        ['command' => 'profile', 'description' => 'User profile']
      ];
      
      // تشخیص زبان کاربر و تنظیم دستورات مناسب
      $userLanguage = 'fa'; // در واقعیت از دیتابیس یا تنظیمات کاربر خوانده می‌شود
      
      if ($userLanguage === 'fa') {
        $bot->setCommands(['bot_commands' => $persianCommands]);
      } else {
        $bot->setCommands(['bot_commands' => $englishCommands]);
      }
      
      // تنظیم دستورات در زمان راه‌اندازی ربات
      function setupBotCommands(Bot $bot) {
        $defaultCommands = [
            ['command' => 'start', 'description' => 'شروع کار با ربات'],
            ['command' => 'help', 'description' => 'نمایش راهنما'],
            ['command' => 'menu', 'description' => 'نمایش منوی اصلی'],
            ['command' => 'about', 'description' => 'درباره ربات']
        ];
        
        try {
            $bot->setCommands(['bot_commands' => $defaultCommands]);
            echo "✅ دستورات بات با موفقیت تنظیم شد" . PHP_EOL;
        } catch (Exception $e) {
            echo "❌ خطا در تنظیم دستورات: {$e->getMessage()}" . PHP_EOL;
        }
      }
      
      // فراخوانی تابع در زمان راه‌اندازی
      setupBotCommands($bot);
      

    آپدیت آدرس بات (URL Endpoint)

    • متد: updateBotEndpoints
    • این متد آدرس‌های endpoint بات را به‌روزرسانی می‌کند تا سرور بتواند رویدادها و درخواست‌ها را به آدرس‌های جدید ارسال کند.
    • ورودی
    فیلد نوع توضیحات
    url str آدرس جدید
    type UpdateEndpointTypeEnum نوع آدرس
    • مثال

      <?php
      require_once 'vendor/autoload.php';
      
      use RubikaBot\Bot;
      use RubikaBot\Types\UpdateEndpointTypeEnum;
      
      $bot = new Bot('YOUR_TOKEN');
      
      // تنظیم آدرس وب‌هوک برای دریافت آپدیت‌ها
      $result = $bot->updateBotEndpoints([
        'url' => 'https://your-domain.com/webhook',
        'type' => UpdateEndpointTypeEnum::GET_UPDATES
      ]);
      
      echo "آدرس وب‌هوک با موفقیت تنظیم شد" . PHP_EOL;
      
      // تنظیم آدرس برای دریافت آیتم‌های انتخابی
      $result2 = $bot->updateBotEndpoints([
        'url' => 'https://your-domain.com/api/selection',
        'type' => UpdateEndpointTypeEnum::GET_SELECTION_ITEM
      ]);
      
      // تنظیم آدرس برای جستجوی اینلاین
      $result3 = $bot->updateBotEndpoints([
        'url' => 'https://your-domain.com/api/inline',
        'type' => UpdateEndpointTypeEnum::INLINE_SEARCH
      ]);
      
      // استفاده از متد ساده‌تر برای تنظیم وب‌هوک
      $bot->setEndpoint('https://your-domain.com/webhook');
      
      // تنظیم چندین آدرس به صورت همزمان
      $endpoints = [
        [
            'url' => 'https://api.example.com/webhook',
            'type' => UpdateEndpointTypeEnum::GET_UPDATES
        ],
        [
            'url' => 'https://api.example.com/selection',
            'type' => UpdateEndpointTypeEnum::GET_SELECTION_ITEM
        ],
        [
            'url' => 'https://api.example.com/inline',
            'type' => UpdateEndpointTypeEnum::INLINE_SEARCH
        ]
      ];
      
      foreach ($endpoints as $endpoint) {
        try {
            $bot->updateBotEndpoints($endpoint);
            echo "✅ آدرس {$endpoint['type']} تنظیم شد: {$endpoint['url']}" . PHP_EOL;
        } catch (Exception $e) {
            echo "❌ خطا در تنظیم آدرس {$endpoint['type']}: {$e->getMessage()}" . PHP_EOL;
        }
      }
      
      // تابع کمکی برای تنظیم آدرس‌ها در زمان استقرار
      function setupBotEndpoints(Bot $bot, $baseUrl) {
        $endpoints = [
            'webhook' => UpdateEndpointTypeEnum::GET_UPDATES,
            'selection' => UpdateEndpointTypeEnum::GET_SELECTION_ITEM,
            'inline' => UpdateEndpointTypeEnum::INLINE_SEARCH
        ];
        
        foreach ($endpoints as $path => $type) {
            $url = $baseUrl . '/api/' . $path;
            
            try {
                $bot->updateBotEndpoints([
                    'url' => $url,
                    'type' => $type
                ]);
                echo "✅ آدرس {$type} تنظیم شد: {$url}" . PHP_EOL;
            } catch (Exception $e) {
                echo "❌ خطا در تنظیم آدرس {$type}: {$e->getMessage()}" . PHP_EOL;
            }
        }
      }
      
      // استفاده از تابع
      setupBotEndpoints($bot, 'https://your-domain.com');
      
      // غیرفعال کردن وب‌هوک (تنظیم آدرس خالی)
      $bot->updateBotEndpoints([
        'url' => '',
        'type' => UpdateEndpointTypeEnum::GET_UPDATES
      ]);
      
      echo "وب‌هوک غیرفعال شد" . PHP_EOL;
      

    حذف keypad

    • متد: editChatKeypad
    • این متد با مشخص کردن پارامتر chat_keypad_type با مقدار Remove، صفحه‌کلید مرتبط با چت را حذف می‌کند و گزینه‌های تعاملی موجود در پیام‌ها را از بین می‌برد.
    • ورودی
    فیلد نوع توضیحات
    chat_id str شناسه چت
    chat_keypad_type ChatKeypadTypeEnum مقدارِ Remove
    • مثال

      <?php
      require_once 'vendor/autoload.php';
      
      use RubikaBot\Bot;
      use RubikaBot\Types\ChatKeypadTypeEnum;
      
      $bot = new Bot('YOUR_TOKEN');
      
      // حذف کیبورد چت
      $result = $bot->editChatKeypad([
        'chat_id' => 'CHAT_ID',
        'chat_keypad_type' => ChatKeypadTypeEnum::REMOVE
      ]);
      
      echo "کیبورد چت با موفقیت حذف شد" . PHP_EOL;
      
      // استفاده از متد ساده‌تر برای حذف کیبورد
      $bot->removeChatKeypad('CHAT_ID');
      
      // حذف کیبورد در پاسخ به رویداد
      $bot->onMessage(function(Bot $bot, $message) {
        // اگر کاربر روی دکمه "بستن منو" کلیک کرد
        if ($message->button_id === 'close_menu') {
            // حذف کیبورد
            $bot->removeChatKeypad($message->chat_id);
            
            // ارسال پیام تأیید
            $bot->chat($message->chat_id)
                ->message("منو بسته شد. برای نمایش مجدد منو از دستور /menu استفاده کنید.")
                ->send();
        }
        
        // حذف خودکار کیبورد بعد از عدم فعالیت
        if ($message->text === 'زمان‌سنج') {
            // ارسال پیام با کیبورد موقت
            $bot->chat($message->chat_id)
                ->message("این کیبورد بعد از 30 ثانیه به طور خودکار حذف می‌شود...")
                ->chatKeypad([
                    'rows' => [
                        [
                            'buttons' => [
                                [
                                    'id' => 'btn1',
                                    'type' => 'Simple',
                                    'button_text' => 'دکمه موقت'
                                ]
                            ]
                        ]
                    ]
                ], 'New')
                ->send();
            
            // حذف کیبورد بعد از 30 ثانیه
            sleep(30);
            $bot->removeChatKeypad($message->chat_id);
        }
      });
      
      // حذف کیبورد از چندین چت به صورت دسته‌ای
      $chatIds = ['CHAT_1', 'CHAT_2', 'CHAT_3', 'CHAT_4'];
      
      foreach ($chatIds as $chatId) {
        try {
            $bot->removeChatKeypad($chatId);
            echo "کیبورد چت {$chatId} حذف شد" . PHP_EOL;
            sleep(1); // تاخیر برای جلوگیری از محدودیت نرخ
        } catch (Exception $e) {
            echo "خطا در حذف کیبورد چت {$chatId}: {$e->getMessage()}" . PHP_EOL;
        }
      }
      
      // تابع کمکی برای حذف کیبورد در صورت وجود
      function safeRemoveKeypad(Bot $bot, $chatId) {
        try {
            $bot->removeChatKeypad($chatId);
            return true;
        } catch (Exception $e) {
            // اگر کیبوردی وجود نداشته باشد، خطا نادیده گرفته می‌شود
            if (strpos($e->getMessage(), 'keypad not found') !== false) {
                return true;
            }
            throw $e;
        }
      }
      
      // استفاده از تابع ایمن
      safeRemoveKeypad($bot, 'CHAT_ID');
      

    ویرایش keypad

    • متد: editChatKeypad
    • برای ویرایش صفحه‌کلید مرتبط با چت، باید پارامتر chat_keypad_type را برابر New قرار دهید؛ این متد صفحه‌کلید مرتبط با چت را به‌روزرسانی می‌کند.
    • ورودی
    فیلد نوع توضیحات
    chat_id str شناسه چت
    chat_keypad Keypad keypad
    chat_keypad_type ChatKeypadTypeEnum مقدارِ New
    • مثال

      <?php
      require_once 'vendor/autoload.php';
      
      use RubikaBot\Bot;
      use RubikaBot\Keyboard\Keypad;
      use RubikaBot\Keyboard\Button;
      use RubikaBot\Types\ChatKeypadTypeEnum;
      
      $bot = new Bot('YOUR_TOKEN');
      
      // ساخت کیبورد جدید
      $newKeypad = Keypad::make()
        ->row()
            ->add(Button::simple('add_account', '➕ افزودن حساب'))
        ->row()
            ->add(Button::simple('edit_account', '✏️ ویرایش حساب'))
            ->add(Button::simple('remove_account', '🗑️ حذف حساب'))
        ->setResize(true)
        ->setOnetime(false);
      
      // ویرایش کیبورد چت
      $result = $bot->editChatKeypad([
        'chat_id' => 'CHAT_ID',
        'chat_keypad_type' => ChatKeypadTypeEnum::NEW,
        'chat_keypad' => $newKeypad->toArray()
      ]);
      
      echo "کیبورد چت با موفقیت ویرایش شد" . PHP_EOL;
      
      // استفاده از متد ساده‌تر برای ویرایش کیبورد
      $bot->chat('CHAT_ID')
        ->chatKeypad($newKeypad->toArray(), 'New')
        ->editChatKeypad();
      
      // ویرایش کیبورد در پاسخ به رویداد
      $bot->onMessage(function(Bot $bot, $message) {
        // اگر کاربر روی دکمه "تغییر منو" کلیک کرد
        if ($message->button_id === 'change_menu') {
            // ساخت کیبورد جدید با گزینه‌های پیشرفته
            $advancedKeypad = Keypad::make()
                ->row()
                    ->add(Button::simple('profile', '👤 پروفایل'))
                    ->add(Button::simple('settings', '⚙️ تنظیمات'))
                ->row()
                    ->add(Button::simple('notifications', '🔔 اعلان‌ها'))
                    ->add(Button::simple('help', '❓ راهنما'))
                ->row()
                    ->add(Button::simple('back', '🔙 بازگشت'))
                ->setResize(true);
            
            // ویرایش کیبورد چت
            $bot->chat($message->chat_id)
                ->chatKeypad($advancedKeypad->toArray(), 'New')
                ->editChatKeypad();
        }
      });
      
      // ویرایش کیبورد با استفاده از آرایه مستقیم
      $keypadData = [
        'rows' => [
            [
                'buttons' => [
                    [
                        'id' => 'btn1',
                        'type' => 'Simple',
                        'button_text' => 'دکمه ۱'
                    ],
                    [
                        'id' => 'btn2',
                        'type' => 'Simple',
                        'button_text' => 'دکمه ۲'
                    ]
                ]
            ]
        ],
        'resize_keyboard' => true,
        'on_time_keyboard' => false
      ];
      
      $result2 = $bot->editChatKeypad([
        'chat_id' => 'CHAT_ID',
        'chat_keypad_type' => ChatKeypadTypeEnum::NEW,
        'chat_keypad' => $keypadData
      ]);
      
      // ویرایش کیبورد برای چندین چت به صورت دسته‌ای
      $chatIds = ['CHAT_1', 'CHAT_2', 'CHAT_3'];
      $commonKeypad = Keypad::make()
        ->row()
            ->add(Button::simple('support', '🎫 پشتیبانی'))
        ->row()
            ->add(Button::simple('website', '🌐 وبسایت'))
            ->add(Button::simple('channel', '📢 کانال'));
      
      foreach ($chatIds as $chatId) {
        try {
            $bot->chat($chatId)
                ->chatKeypad($commonKeypad->toArray(), 'New')
                ->editChatKeypad();
            
            echo "کیبورد چت {$chatId} ویرایش شد" . PHP_EOL;
            sleep(1); // تاخیر برای جلوگیری از محدودیت نرخ
        } catch (Exception $e) {
            echo "خطا در ویرایش کیبورد چت {$chatId}: {$e->getMessage()}" . PHP_EOL;
        }
      }
      

    دریافت فایل

    • متد: getFile
    • این متد مسیر دانلود یک فایل آپلود شده را بازمیگرداند، تا بات بتواند فایل را دریافت کند.
    • ورودی
    فیلد نوع توضیحات
    file_id str شناسه فایل
    • خروجی
    فیلد نوع توضیحات
    download_url str آدرس فایل در سرور
    • مثال

      <?php
      require_once 'vendor/autoload.php';
      
      use RubikaBot\Bot;
      
      $bot = new Bot('YOUR_TOKEN');
      
      // دریافت لینک دانلود فایل
      $fileInfo = $bot->getFile([
        'file_id' => 'FILE_ID'
      ]);
      
      $downloadUrl = $fileInfo['download_url'];
      echo "لینک دانلود: {$downloadUrl}" . PHP_EOL;
      
      // دانلود فایل و ذخیره آن
      $fileContent = file_get_contents($downloadUrl);
      file_put_contents('downloaded_file.jpg', $fileContent);
      echo "فایل با موفقیت دانلود و ذخیره شد" . PHP_EOL;
      
      // استفاده از متد ساده‌تر برای دانلود فایل
      $savedPath = $bot->downloadFile('FILE_ID', '/path/to/save/file.jpg');
      echo "فایل در مسیر {$savedPath} ذخیره شد" . PHP_EOL;
      
      // دریافت و پردازش فایل در پاسخ به رویداد
      $bot->onMessage(function(Bot $bot, $message) {
        // اگر پیام حاوی فایل بود
        if ($message->file_id) {
            try {
                // دریافت اطلاعات فایل
                $fileInfo = $bot->getFile(['file_id' => $message->file_id]);
                
                // دانلود فایل
                $tempPath = sys_get_temp_dir() . '/downloaded_file_' . uniqid();
                $bot->downloadFile($message->file_id, $tempPath);
                
                // پردازش فایل (مثلاً بررسی سایز)
                $fileSize = filesize($tempPath);
                $fileSizeMB = round($fileSize / (1024 * 1024), 2);
                
                // پاسخ به کاربر
                $bot->chat($message->chat_id)
                    ->message("فایل شما دریافت شد! 📁\nحجم فایل: {$fileSizeMB} مگابایت")
                    ->send();
                
                // پاک کردن فایل موقت
                unlink($tempPath);
                
            } catch (Exception $e) {
                // در صورت خطا در دریافت فایل
                $bot->chat($message->chat_id)
                    ->message("خطا در دریافت فایل ❌\nلطفاً دوباره تلاش کنید.")
                    ->send();
            }
        }
      });
      
      // تابع کمکی برای دریافت و بررسی فایل
      function processUploadedFile(Bot $bot, $fileId) {
        try {
            // دریافت لینک دانلود
            $fileInfo = $bot->getFile(['file_id' => $fileId]);
            
            // دانلود به پوشه uploads
            if (!is_dir('uploads')) {
                mkdir('uploads', 0755, true);
            }
            
            $filename = 'uploads/file_' . uniqid() . '.dat';
            $bot->downloadFile($fileId, $filename);
            
            return [
                'success' => true,
                'filename' => $filename,
                'download_url' => $fileInfo['download_url'],
                'size' => filesize($filename)
            ];
            
        } catch (Exception $e) {
            return [
                'success' => false,
                'error' => $e->getMessage()
            ];
        }
      }
      
      // استفاده از تابع کمکی
      $result = processUploadedFile($bot, 'FILE_ID');
      if ($result['success']) {
        echo "فایل با موفقیت پردازش شد: {$result['filename']} ({$result['size']} بایت)" . PHP_EOL;
      } else {
        echo "خطا در پردازش فایل: {$result['error']}" . PHP_EOL;
      }
      

    ارسال فایل

    • متد: sendFile
    • این متد فایل مشخص شده را از بات به چت ارسال می‌کند، فایل می‌تواند شامل محتوا و گزینه‌های اضافی مانند متن همراه یا صفحه‌کلید باشد.
    • ورودی
    فیلد نوع توضیحات
    chat_id str شناسه چت
    file_id str شناسه فایل
    text str متن
    message_id str در جوابِ پیامِ؟
    chatkeypad Keypad keypad
    inlinekeypad Keypad keypad
    chat_keypad_type ChatKeypadTypeEnum نوع keypad
    • خروجی
    فیلد نوع توضیحات
    message_id str شناسه پیام
    • مثال

      <?php
      require_once 'vendor/autoload.php';
      
      use RubikaBot\Bot;
      use RubikaBot\Keyboard\Keypad;
      use RubikaBot\Keyboard\Button;
      
      $bot = new Bot('YOUR_TOKEN');
      
      // ارسال فایل با file_id
      $result = $bot->chat('CHAT_ID')
        ->file_id('FILE_ID')
        ->sendFile();
      
      echo "فایل با شناسه پیام {$result['message_id']} ارسال شد" . PHP_EOL;
      
      // ارسال فایل با توضیحات
      $result2 = $bot->chat('CHAT_ID')
        ->file_id('FILE_ID')
        ->caption("این یک فایل نمونه است 📁")
        ->sendFile();
      
      // ارسال فایل با کیبورد اینلاین
      $keypad = Keypad::make()
        ->row()
            ->add(Button::simple('download', '📥 دانلود'))
            ->add(Button::simple('info', 'ℹ️ اطلاعات'));
      
      $result3 = $bot->chat('CHAT_ID')
        ->file_id('FILE_ID')
        ->caption("فایل با کیبورد اینلاین")
        ->inlineKeypad($keypad->toArray())
        ->sendFile();
      
      // ارسال فایل در پاسخ به پیام
      $result4 = $bot->chat('CHAT_ID')
        ->file_id('FILE_ID')
        ->replyTo('MESSAGE_ID')
        ->caption("این پاسخ به پیام شماست")
        ->sendFile();
      
      // ارسال فایل با غیرفعال کردن نوتیفیکیشن
      $result5 = $bot->chat('CHAT_ID')
        ->file_id('FILE_ID')
        ->disableNotification(true)
        ->sendFile();
      
      // ارسال فایل با استفاده از متد مستقیم
      $result6 = $bot->sendFile([
        'chat_id' => 'CHAT_ID',
        'file_id' => 'FILE_ID',
        'text' => 'توضیحات فایل',
        'inline_keypad' => [
            'rows' => [
                [
                    'buttons' => [
                        [
                            'id' => 'view',
                            'type' => 'Simple',
                            'button_text' => 'مشاهده'
                        ]
                    ]
                ]
            ]
        ]
      ]);
      
      // ارسال فایل در پاسخ به رویداد
      $bot->onMessage(function(Bot $bot, $message) {
        // اگر کاربر درخواست فایل نمونه کرد
        if ($message->text === 'دریافت فایل نمونه') {
            // ارسال فایل از پیش آپلود شده
            $bot->chat($message->chat_id)
                ->file_id('SAMPLE_FILE_ID')
                ->caption("فایل نمونه شما 📄\nامیدواریم مفید باشد!")
                ->inlineKeypad([
                    'rows' => [
                        [
                            'buttons' => [
                                [
                                    'id' => 'thanks',
                                    'type' => 'Simple',
                                    'button_text' => '🙏 تشکر'
                                ]
                            ]
                        ]
                    ]
                ])
                ->sendFile();
        }
      });
      
      // ارسال چندین فایل به صورت متوالی
      $fileIds = ['FILE_1', 'FILE_2', 'FILE_3'];
      
      foreach ($fileIds as $index => $fileId) {
        try {
            $result = $bot->chat('CHAT_ID')
                ->file_id($fileId)
                ->caption("فایل شماره {$index + 1}")
                ->sendFile();
            
            echo "فایل {$fileId} ارسال شد (شناسه پیام: {$result['message_id']})" . PHP_EOL;
            sleep(2); // تاخیر برای جلوگیری از محدودیت نرخ
        } catch (Exception $e) {
            echo "خطا در ارسال فایل {$fileId}: {$e->getMessage()}" . PHP_EOL;
        }
      }
      

    آپلود فایل

    • متد: requestSendFile
    • این متد به بات امکان می‌دهد نوع فایل مورد نظر برای آپلود را مشخص کند و در پاسخ، یک آدرس برای بارگذاری فایل دریافت می‌کند تا فایل مورد نظر از طریق آن آدرس به سرور ارسال شود.
    • ورودی
    فیلد نوع توضیحات
    type FileTypeEnum نوع فایل
    • خروجی
    فیلد نوع توضیحات
    upload_url str آدرس مخصوص آپلود فایل در سرور
    • مثال

      <?php
      require_once 'vendor/autoload.php';
      
      use RubikaBot\Bot;
      use RubikaBot\Types\FileTypeEnum;
      
      $bot = new Bot('YOUR_TOKEN');
      
      // درخواست آپلود فایل عکس
      $uploadInfo = $bot->requestSendFile([
        'type' => FileTypeEnum::IMAGE
      ]);
      
      $uploadUrl = $uploadInfo['upload_url'];
      echo "آدرس آپلود: {$uploadUrl}" . PHP_EOL;
      
      // آپلود فایل به آدرس دریافتی
      $filePath = '/path/to/your/image.jpg';
      $fileContent = file_get_contents($filePath);
      
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $uploadUrl);
      curl_setopt($ch, CURLOPT_POST, true);
      curl_setopt($ch, CURLOPT_POSTFIELDS, $fileContent);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Content-Type: application/octet-stream'
      ]);
      
      $response = curl_exec($ch);
      $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
      curl_close($ch);
      
      if ($httpCode === 200) {
        $uploadResult = json_decode($response, true);
        $fileId = $uploadResult['file_id'];
        echo "فایل با موفقیت آپلود شد. شناسه فایل: {$fileId}" . PHP_EOL;
      } else {
        echo "خطا در آپلود فایل. کد خطا: {$httpCode}" . PHP_EOL;
      }
      
      // استفاده از متد ساده‌تر برای آپلود فایل
      $fileId = $bot->uploadFile('/path/to/file.jpg', FileTypeEnum::IMAGE);
      echo "فایل آپلود شد. شناسه: {$fileId}" . PHP_EOL;
      
      // آپلود انواع مختلف فایل
      $fileTypes = [
        'عکس' => FileTypeEnum::IMAGE,
        'ویدیو' => FileTypeEnum::VIDEO,
        'صدا' => FileTypeEnum::VOICE,
        'فایل' => FileTypeEnum::FILE,
        'گیف' => FileTypeEnum::GIF
      ];
      
      foreach ($fileTypes as $typeName => $fileType) {
        try {
            $fileId = $bot->uploadFile("/path/to/sample.{$typeName}", $fileType);
            echo "{$typeName} آپلود شد: {$fileId}" . PHP_EOL;
        } catch (Exception $e) {
            echo "خطا در آپلود {$typeName}: {$e->getMessage()}" . PHP_EOL;
        }
      }
      
      // آپلود فایل در پاسخ به رویداد
      $bot->onMessage(function(Bot $bot, $message) {
        // اگر کاربر فایل ارسال کرد
        if ($msg->file_id) {
            // دریافت فایل کاربر
            $userFileInfo = $bot->getFile(['file_id' => $message->file_id]);
            
            // دانلود فایل کاربر
            $tempFile = tempnam(sys_get_temp_dir(), 'user_file');
            file_put_contents($tempFile, file_get_contents($userFileInfo['download_url']));
            
            // پردازش فایل (مثلاً تغییر سایز عکس)
            // ... کد پردازش فایل
            
            // آپلود فایل پردازش شده
            $processedFileId = $bot->uploadFile($tempFile, FileTypeEnum::IMAGE);
            
            // ارسال فایل پردازش شده به کاربر
            $bot->chat($msg->chat_id)
                ->file_id($processedFileId)
                ->caption("فایل شما پردازش شد! ✅")
                ->sendFile();
            
            // پاک کردن فایل موقت
            unlink($tempFile);
        }
      });
      
      // تابع کمکی برای آپلود ایمن فایل
      function safeUploadFile(Bot $bot, $filePath, $fileType) {
        if (!file_exists($filePath)) {
            throw new Exception("فایل وجود ندارد: {$filePath}");
        }
        
        $fileSize = filesize($filePath);
        if ($fileSize > 50 * 1024 * 1024) { // 50MB limit
            throw new Exception("حجم فایل بیش از حد مجاز است: {$fileSize} بایت");
        }
        
        return $bot->uploadFile($filePath, $fileType);
      }
      
      // استفاده از تابع ایمن
      try {
        $fileId = safeUploadFile($bot, '/path/to/file.jpg', FileTypeEnum::IMAGE);
        echo "فایل با موفقیت آپلود شد: {$fileId}" . PHP_EOL;
      } catch (Exception $e) {
        echo "خطا: {$e->getMessage()}" . PHP_EOL;
      }
      

    آدرس دریافت شده در یک فیلد با نام upload_url برمی‌گردد که برای آپلود فایل از طریق درخواست POST استفاده می‌شود. فایل باید در بدنه (Body) درخواست ارسال گردد.

    • ورودی
    فیلد نوع توضیحات
    file (multipart/form-data) فایل
    • خروجی
    فیلد نوع توضیحات
    file_id str شناسه فایل