Techioz Blog

マルチユーザー電報ボット Ruby

概要

ユーザーごとに深い条件ツリーを備えたマルチプレイヤー ボットを作成する必要があります。 ボットを同時に使用できるようにするには、複数のユーザーが必要です。そして、彼らのセッションはお互いに中断しません。 非同期(または非同期が必要ない?)電報ボット Ruby を作成するにはどうすればよいですか?または、私のタスクを実現するための他の方法。 私は gem telegram-bot-ruby を使用しています。 以下のコードは、ボットを構築する方法の非常に簡単な例を示しています。しかし、複数のユーザーが同時にボットを使用し始めると、すべてが破綻します。 それとも、私の問題は間違ったアプローチと実装にあるのでしょうか? アドバイスをよろしくお願いいたします。

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

  bot.listen do |message|
    case message.text
    when '/start'
      bot.api.send_message(chat_id: message.chat.id, text: "Hello, enter name:")

      bot.listen do |message2|
        @name = message2.text
        break
      end

      bot.api.send_message(chat_id: message.chat.id, text: "Nice to meet you #{@name},now input age")

      bot.listen do |message3| 
        @age = message3.text
        break
      end

    when '/stop'
      bot.api.send_message(chat_id: message.chat.id, text: "Bye")

    else
      bot.api.send_message(chat_id: message.chat.id, text: "Enter /start ")
    end
  end
end

github でテレグラム Ruby ボットの実装例を調べてみたり、グーグルで検索したりしましたが、まだわかりません。ボットをスタンドアロン スクリプトとして作成します。レールは使いません。

解決策

マルチユーザーボットを使用するには、リスナーコードをスレッドでラップします。

Telegram::Bot::Client.run(token) do |bot|
  bot.listen do |message|
    Thread.start(message) do |message|
      # make stuff
    end
  end
end

すべてのセッションは別のスレッドで動作します

その他、あなたのアイデアとして: