atipugin / telegram-bot-ruby

Ruby wrapper for Telegram's Bot API
https://core.telegram.org/bots/api
Do What The F*ck You Want To Public License
1.35k stars 218 forks source link

Exception in send_message() #225

Closed ekzobrain closed 3 years ago

ekzobrain commented 3 years ago

When calling Telegram::Bot::Api.send_message(chat_id: xxx, text: xxx) it throws an exception:

2021-01-20T18:33:56.338Z 1 TID-grvhfbwjx WARN: SystemStackError: stack level too deep
2021-01-20T18:33:56.338Z 1 TID-grvhfbwjx WARN: /usr/local/bundle/ruby/2.5.0/gems/faraday-1.3.0/lib/faraday/request/multipart.rb:48:in `each_line'
/usr/local/bundle/ruby/2.5.0/gems/faraday-1.3.0/lib/faraday/request/multipart.rb:48:in `has_multipart?'
/usr/local/bundle/ruby/2.5.0/gems/faraday-1.3.0/lib/faraday/request/multipart.rb:49:in `block in has_multipart?'
/usr/local/bundle/ruby/2.5.0/gems/faraday-1.3.0/lib/faraday/request/multipart.rb:48:in `each_line'
/usr/local/bundle/ruby/2.5.0/gems/faraday-1.3.0/lib/faraday/request/multipart.rb:48:in `has_multipart?'
/usr/local/bundle/ruby/2.5.0/gems/faraday-1.3.0/lib/faraday/request/multipart.rb:49:in `block in has_multipart?'
/usr/local/bundle/ruby/2.5.0/gems/faraday-1.3.0/lib/faraday/request/multipart.rb:48:in `each_line'
/usr/local/bundle/ruby/2.5.0/gems/faraday-1.3.0/lib/faraday/request/multipart.rb:48:in `has_multipart?'
/usr/local/bundle/ruby/2.5.0/gems/faraday-1.3.0/lib/faraday/request/multipart.rb:49:in `block in has_multipart?'

Problem is in the way how Faraday detects multipart requests with it's middleware. To fix this you should just change this in telegram/bot/api.rb:115

def conn
        @conn ||= Faraday.new(url: url) do |faraday|
          faraday.request :multipart
          faraday.request :url_encoded
          faraday.adapter Telegram::Bot.configuration.adapter
        end
      end

to this

def conn
        @conn ||= Faraday.new(url: url) do |faraday|
          faraday.request :url_encoded
          faraday.request :multipart
          faraday.adapter Telegram::Bot.configuration.adapter
        end
      end