多用户 Telegram 机器人 Ruby

问题描述 投票:0回答:1

我需要为每个用户制作一个具有深层条件树的多人机器人。 需要多个用户才能同时使用机器人。而且他们的会话不会互相打扰。 如何创建异步(或者我不需要异步?)电报机器人红宝石?或者其他方式来实现我的任务。 我正在使用 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 上查看 telegram ruby bot 实现的示例,用 google 搜索,但仍然没有弄清楚。我将机器人编写为独立脚本。我不使用导轨。

ruby asynchronous rubygems telegram telegram-bot
1个回答
0
投票

要使用多用户机器人,您可以使用线程包装侦听器代码

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

每个会话都将在单独的线程中工作


以及其他为您提供的想法:

  • 创建一些实体(消息处理程序),在线程内实例化它,将消息检查封装在此处理程序中
  • 使用数据库来存储每个用户“树”的状态
© www.soinside.com 2019 - 2024. All rights reserved.