mispy-archive / twitter_ebooks

Better twitterbots for all your friends~
MIT License
972 stars 140 forks source link

pictweet() causes TypeError #127

Open GeekBrony opened 8 years ago

GeekBrony commented 8 years ago

I'm trying to make my bot send a picture every time it detects a predefined word, but every time I try to get it to do so, it gives me a TypeError with the context of no implicit conversion of Symbol into Integer. Now, I know programming, but I'm not so smart with Ruby since this is my introduction to it.

Here's my code: http://pastebin.com/REQeQwrd

Here's the output:

@geekbrony_txt: User information updated
@geekbrony_txt: Loading model model/djgeekbrony.model
@geekbrony_txt: starting tweet stream
@geekbrony_txt: Online!
@geekbrony_txt: Mention from @DJGeekBrony: @geekbrony_txt reply with memes
Building: sentence 0 of 109
@geekbrony_txt: Tweeting #<Twitter::Tweet id=764334361974042625> - memes/0.jpg ["hey uhh, do you mind helping me with my app at some point."]
@geekbrony_txt: #<TypeError: no implicit conversion of Symbol into Integer>
        /home/geekbrony/.rvm/gems/ruby-2.3.0/gems/twitter-5.16.0/lib/twitter/rest/tweets.rb:231:in `[]'
        /home/geekbrony/.rvm/gems/ruby-2.3.0/gems/twitter-5.16.0/lib/twitter/rest/tweets.rb:231:in `update_with_media'
        /home/geekbrony/.rvm/gems/ruby-2.3.0/gems/twitter_ebooks-3.1.6/lib/twitter_ebooks/bot.rb:480:in `pictweet'
        bots.rb:64:in `block in on_mention'
        /home/geekbrony/.rvm/gems/ruby-2.3.0/gems/twitter_ebooks-3.1.6/lib/twitter_ebooks/bot.rb:382:in `delay'
        bots.rb:62:in `on_mention'
        /home/geekbrony/.rvm/gems/ruby-2.3.0/gems/twitter_ebooks-3.1.6/lib/twitter_ebooks/bot.rb:373:in `fire'
        /home/geekbrony/.rvm/gems/ruby-2.3.0/gems/twitter_ebooks-3.1.6/lib/twitter_ebooks/bot.rb:297:in `receive_event'
        /home/geekbrony/.rvm/gems/ruby-2.3.0/gems/twitter_ebooks-3.1.6/lib/twitter_ebooks/bot.rb:363:in `block in start'
        /home/geekbrony/.rvm/gems/ruby-2.3.0/gems/twitter-5.16.0/lib/twitter/streaming/client.rb:116:in `block in request'
        /home/geekbrony/.rvm/gems/ruby-2.3.0/gems/twitter-5.16.0/lib/twitter/streaming/response.rb:27:in `block in on_body'
        /home/geekbrony/.rvm/gems/ruby-2.3.0/gems/twitter-5.16.0/lib/twitter/streaming/response.rb:25:in `each'
        /home/geekbrony/.rvm/gems/ruby-2.3.0/gems/twitter-5.16.0/lib/twitter/streaming/response.rb:25:in `on_body'
        /home/geekbrony/.rvm/gems/ruby-2.3.0/gems/twitter-5.16.0/lib/twitter/streaming/response.rb:16:in `<<'
        /home/geekbrony/.rvm/gems/ruby-2.3.0/gems/twitter-5.16.0/lib/twitter/streaming/response.rb:16:in `<<'
        /home/geekbrony/.rvm/gems/ruby-2.3.0/gems/twitter-5.16.0/lib/twitter/streaming/connection.rb:22:in `stream'
        /home/geekbrony/.rvm/gems/ruby-2.3.0/gems/twitter-5.16.0/lib/twitter/streaming/client.rb:119:in `request'
        /home/geekbrony/.rvm/gems/ruby-2.3.0/gems/twitter-5.16.0/lib/twitter/streaming/client.rb:92:in `user'
        /home/geekbrony/.rvm/gems/ruby-2.3.0/gems/twitter_ebooks-3.1.6/lib/twitter_ebooks/bot.rb:362:in `start'
        /home/geekbrony/.rvm/gems/ruby-2.3.0/gems/twitter_ebooks-3.1.6/bin/ebooks:346:in `block (3 levels) in start'
        /home/geekbrony/.rvm/gems/ruby-2.3.0/gems/twitter_ebooks-3.1.6/bin/ebooks:344:in `loop'
        /home/geekbrony/.rvm/gems/ruby-2.3.0/gems/twitter_ebooks-3.1.6/bin/ebooks:344:in `block (2 levels) in start'
@geekbrony_txt: Sleeping before reconnect

Thanks for the help!

ghost commented 8 years ago

It looks like you're passing the wrong arguments to pictweet-- it should be of the form pictweet("text to accompany image", "path to image")

GeekBrony commented 8 years ago

Is there a way to reply to the tweet with a picture?

Jokler commented 7 years ago

The bot does't include have a function for that but you can do this instead:

id = twitter.upload(file).to_s
reply(tweet, 'Response text here', {media_ids: id})

"file" is an actual File object here.