Ruby NoMethodError//电报机器人

Ruby NoMethodError//电报机器人,ruby,Ruby,我使用这个Ruby代码来运行Telegram messenger机器人。使用/start命令运行代码后,它会崩溃,并出现以下错误: ./bot.rb:26:in `block (3 levels) in <main>': undefined method `[]' for nil:NilClass (NoMethodError) from ./bot.rb:20:in `loop' from ./bot.rb:20:in `block (2 level

我使用这个Ruby代码来运行Telegram messenger机器人。使用
/start
命令运行代码后,它会崩溃,并出现以下错误:

./bot.rb:26:in `block (3 levels) in <main>': undefined method `[]' for nil:NilClass (NoMethodError)
        from ./bot.rb:20:in `loop'
        from ./bot.rb:20:in `block (2 levels) in <main>'
        from /var/lib/gems/2.1.0/gems/telegram-bot-ruby-0.3.11/lib/telegram/bot/client.rb:41:in `block in fetch_updates'
        from /var/lib/gems/2.1.0/gems/telegram-bot-ruby-0.3.11/lib/telegram/bot/client.rb:37:in `each'
        from /var/lib/gems/2.1.0/gems/telegram-bot-ruby-0.3.11/lib/telegram/bot/client.rb:37:in `fetch_updates'
        from /var/lib/gems/2.1.0/gems/telegram-bot-ruby-0.3.11/lib/telegram/bot/client.rb:29:in `listen'
        from ./bot.rb:17:in `block in <main>'
        from /var/lib/gems/2.1.0/gems/telegram-bot-ruby-0.3.11/lib/telegram/bot/client.rb:22:in `run'
        from /var/lib/gems/2.1.0/gems/telegram-bot-ruby-0.3.11/lib/telegram/bot/client.rb:10:in `run'
        from ./bot.rb:16:in `<main>'

如果有人面临同样的问题,我找到了一个黑客修复。从macOS终端运行此代码时,我会收到未定义的方法“run”消息。另一方面,当我在vscode终端中运行它时,它工作正常。我在Linux机器上也遇到了同样的问题。这可能与我的环境是如何设置的有关


希望这能帮到别人。

你的问题是什么?@mudasobwa不,它在第26行
str1[“data”][ids[n]。to_s][“昵称”]
\fn我不知道如何解决这个问题
str1[“data”][ids[n]。to_s][“昵称”
返回
nil
,可能
str code>或
ids,调试这是一种简单的方法,在
str1=JSON.parse(res.body)
之后添加
put str
,并检查输出。您能分享
JSON.parse(res.body)
的结果吗?似乎缺少“数据”键
require 'telegram/bot' 
token = '...' 
require 'net/http' 
url = URI.parse('http://api.wotblitz.ru/wotb/clans/info/?application_id=...&clan_id=8') 
req = Net::HTTP::Get.new(url.to_s) 
res = Net::HTTP.start(url.host, url.port) {|http| 
   http.request(req) 
   } 

require 'json'
str = JSON.parse(res.body)
ids = str["data"]["8"]["members_ids"]
n = 0
m = ids.size - 1
players = ''
Telegram::Bot::Client.run(token) do |bot| 
    bot.listen do |message|
        case message.text
        when '/start' 
        loop do 
           url = URI.parse('http://api.wotblitz.ru/wotb/account/info/?application_id=...&account_id=' + ids[n].to_s)
             req = Net::HTTP::Get.new(url.to_s) 
             res = Net::HTTP.start(url.host, url.port) {|http| http.request(req) 
             }
             str1 = JSON.parse(res.body)
             nick = str1["data"][ids[n].to_s]["nickname"]
             players = players + nick + "\n"
            n += 1
            break if n == m
        end
        bot.api.sendMessage(chat_id: message.chat.id, text:"#{players}")
        end
    end
end