簡體   English   中英

Ruby NoMethodError // 電報機器人

[英]Ruby NoMethodError // Telegram Bot

我正在使用這個 Ruby 代碼來運行 Telegram messenger bot。 使用/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>'

機器人代碼在這里:

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

如果有人面臨同樣的問題,我找到了一個解決方法。 從我的 macOS 終端運行此代碼時,我收到未定義的方法“運行”消息。 另一方面,當我在我的 vscode 終端中運行它時,它可以正常工作。 我在 Linux 機器上也遇到了同樣的問題。 這可能與我的環境設置方式有關。

希望這可以幫助某人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM