Ruby NoMethodError//电报机器人
我使用这个Ruby代码来运行Telegram messenger机器人。使用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
/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