Skip to main content

این روزها، در کمتر گروهی است که شاهد حضور یک یا دو بات نباشیم. همچنین، اکثر افراد علاقمند، بسته به سلیقه ها و علاقه هایشان، بات های تلگرام مختلفی را نوشته اند. برای مثال، شخصی باتی نوشته که با دادن پیغام خاصی، شخصی را به گروه اضافه، و یا از گروه حذف میکند، یا بات های دیگری که صرفا برای اسپم کردن در گروه ها، جست و جو در ویکیپدیا  و … نوشته شده اند. برای ساخت یک بات تلگرام، شما نیاز دارید تا توسط اکانت BotFather روبات خود را تعریف کنید. سپس با خواندن مستندات API بات ها، روبات (های) خود را کامل کنید. اما این متد ها و API کد ها، به خودی خود هیچ کاری انجام نمیدهند. بلکه شما هستید که با کدی که برای روبات خود مینویسید، میگویید که چه کند. در این آموزش، ساخت یک روبات کوچک که به دو دستور start و img واکنش نشان میدهد را خواهید آموخت.

نصب جم های مورد نیاز

خوشبختانه برای هر منظوری در روبی، حداقل یک جم وجود دارد. شما میتوانید به صورت مستقیم با تایپ دستور :

gem install telegram-bot-ruby

این جم را نصب کنید و یا یک Gemfile بسازید و بعد محتوای آن را چنین وارد کنید :

source 'https://rubygems.org'
gem 'telegram-bot-ruby'

جهت اطلاعات بیشتر در مورد کار با Bundler ، میتوانید مقاله قبلی همین وبسایت را مطالعه کنید.

شروع به نوشتن روبات

اکنون، جم مورد نیاز ما نصب شده است، روبات خود را با استفاده از BotFather ایجاد کرده ایم، و نوبتی هم باشد نوبت نوشتن کد برای روبات است. یک فایل به نام bot.rb ایجاد میکنیم (توجه کنید که اسم فایل اختیاری است)، و سپس جم مورد نظر را فراخوانی میکنیم. همچنین API خود را درون متغیری به اسم token قرار میدهیم :

require 'telegram/bot'
 
token = 'YOUR API CODE HERE'

سپس، باید دستوری بدهیم که آغاز بات ما باشد :

Telegram::Bot::Client.run(token) do |bot|
end

همانگونه که می بینید، دستور نسبتا طولانی را در متغیری به نام bot خلاصه کردیم. اکنون نوبت آن است که روبات ما، شروع کند به شنیدن آن چه توسط privacy تنظیم کرده ایم (به صورت پیشفرض، روبات ها صرفا به پیام هایی دسترسی دارند که با / شروع می شوند). کل برنامه ما به این شکل خواهد بود:

require 'telegram/bot'
 
token = 'YOUR_TELEGRAM_BOT_API_TOKEN'
 
Telegram::Bot::Client.run(token) do |bot|
  bot.listen do |message|
  end
end

اکنون میخواهیم بررسی کنیم که از کدام متد ها برای روبات خود استفاده کنیم. همانگونه که در ابتدای مطلب گفته شد، قرار است دو دستور start و img دریافت گردد، و سپس واکنشی نشان داده شود. دستور start میخواهد به کاربر سلام دهد، و دستور img یک عکس برای کاربر بفرستد. پس کد برنامه به این شکل خواهد بود :

require 'telegram/bot'
 
token = 'YOUR_TELEGRAM_BOT_API_TOKEN'
 
Telegram::Bot::Client.run(token) do |bot|
  bot.listen do |message|
   case message.text
    when '/start'
     bot.api.sendMessage(chat_id: message.chat.id, text: "Hello, @#{message.from.username}")
    when '/img'
     bot.api.sendPhoto(chat_id: message.chat.id, photo: File.new('./image.jpg')
     end
  end
end

ما از دو متد sendMessage برای ارسال متن و sendPhoto برای ارسال تصویر استفاده نمودیم. همچنین، سایر ویژگی های زبان روبی نیز در این کد استفاده شده است. اگر کدهای موجود در این بات ساده، برای شما نا آشناست، بهتر است ابتدا مستندات روبی، سپس مطالب قدیمی همین وبسایت و در نهایت مستندات جم تلگرام بات را مطالعه فرمایید. همچنین، درصورت داشتن سوال، میتوانید در بخش کامنت ها ، سوال خود را مطرح کنید.

13 دیدگاه برای “نوشتن روبات تلگرام در روبی”

  1. avatar

    خیلی هم عالی 🙂 ممنون

  2. avatar

    ino koja bayad run konim to ide ya terminal? yekam bishtar tozih bedid

    1. avatar

      از ترمینال باید ران بشه.

      1. avatar

        in erroro mideh moghe run to terminal

        /usr/local/lib/ruby/gems/2.2.0/gems/telegram-bot-ruby-0.2.5/lib/telegram/bot/api.rb:36:in `call’: Telegram API has returned the error. (error_code: “403”, uri: “https://api.telegram.org/botYOUR_TELEGRAM_BOT_API_TOKEN/getUpdates”) (Telegram::Bot::Exceptions::ResponseError)
        from /usr/local/lib/ruby/gems/2.2.0/gems/telegram-bot-ruby-0.2.5/lib/telegram/bot/api.rb:27:in `method_missing’
        from /usr/local/lib/ruby/gems/2.2.0/gems/telegram-bot-ruby-0.2.5/lib/telegram/bot/client.rb:22:in `block in listen’
        from /usr/local/lib/ruby/gems/2.2.0/gems/telegram-bot-ruby-0.2.5/lib/telegram/bot/client.rb:21:in `loop’
        from /usr/local/lib/ruby/gems/2.2.0/gems/telegram-bot-ruby-0.2.5/lib/telegram/bot/client.rb:21:in `listen’
        from /Users/mohammad/Desktop/telegram/bot.rb:6:in `block in ‘
        from /usr/local/lib/ruby/gems/2.2.0/gems/telegram-bot-ruby-0.2.5/lib/telegram/bot/client.rb:17:in `run’
        from /usr/local/lib/ruby/gems/2.2.0/gems/telegram-bot-ruby-0.2.5/lib/telegram/bot/client.rb:7:in `run’
        from /Users/mohammad/Desktop/telegram/bot.rb:5:in `’

        1. avatar

          ok shod mamnon babat post khbeton 🙂

  3. avatar

    salam ye soal dashtam
    agar bekham akharin message ro reply konam baad text befrestam bayad chi kar konam
    !ba hamin gem
    mamnon misham agar javab bedid

  4. avatar

    به تعدادی نیروی ریلز کار و یک نفر ui کار آشنا به ریلز نیاز داریم برای یک پروژه جذاب هر یک از دوستان که علاقه دارد رزومه خود را به houshmand@salamat-yar.com ارسال نماید
    زمینه کار سلامت الکترونیک است و چارچوب توسعه اسکرام
    http://www.salamat-yar.com

    1. avatar

      درود بر شما، اگر ممکنه به گروه تلگرام روبی بیاید و درخواستتون رو مطرح کنید :
      https://telegram.me/joinchat/03ce76f700ba27345f7d6c902dc55525

  5. avatar

    سلام

    ببخشین کسی توکن برای استخاره و فال حافظ نداره؟

    1. avatar

      برای سرویس هایی مثل فال و … باید یک وب سرویس پیدا کنید و ازش Request بگیرید.

  6. avatar

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

    1. avatar

      شما نیاز دارید یک سرور تهیه کنید و روی اون سرور آپلود کنید و بعد روشنش کنید.

  7. avatar

    یک پرانتز در آخر کار یادتون رفته بزارید
    (chat_id: message.chat.id, photo: File.new(‘./image.jpg’)