Skip to content

Instantly share code, notes, and snippets.

@paralleltree
Created August 10, 2015 15:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save paralleltree/0339a62f4928dac383ea to your computer and use it in GitHub Desktop.
Save paralleltree/0339a62f4928dac383ea to your computer and use it in GitHub Desktop.
#!/usr/local/bin/ruby
start = Time.now
# --- arguments check
if (ARGV.count != 1)
puts 'Invalid number of arguments.'
exit 1
end
target = ARGV[0]
if (target[0] != "@")
puts 'Beginning of target char must be \'@\''
exit 1
end
# ---
# --- init
require 'twitter'
token = {
consumer_key: '',
consumer_secret: '',
access_token: '',
access_token_secret: ''
}
@rest = Twitter::REST::Client.new(token)
@stream = Twitter::Streaming::Client.new(token)
# ---
@req = nil
# listen
streaming = Thread.start do
@stream.user do |obj|
case obj
when Twitter::Tweet
next unless obj.in_reply_to_status_id?
next unless obj.user.screen_name == target.delete('@')
next unless obj.in_reply_to_status_id == (@req == nil ? -1 : @req.id)
if ((obj.text =~ /[Yy][Oo]/) != nil)
Thread.current[:response] = obj
break
end
end
end
end
sleep 3
if (streaming.status == false)
puts "Listen error!"
exit 1
end
puts "Sending Yo to #{target}"
@req = @rest.update("#{target} Yo")
recv = false
begin
streaming.join
res = streaming[:response]
puts "Yo from #{target}: time= #{(res.created_at - @req.created_at).round(3)}s"
recv = true
rescue Interrupt
end
puts
puts "--- #{target} Yo statistics ---"
puts "Yo transmitted #{recv ? 'and received' : 'but not received'}, time #{(Time.now - start).round(3)}s"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment