来自我的irc机器人的一段代码。它的作用是检查特定帐户的新推文,然后在频道中回复。 现在,有没有更好的方法来检查新推文?对于我在1..999999999中的感觉有点不合理,而ddos' y。
tweetzsr = {}
xzsr = {}
zsr = {}
on :message, ".start zsr" do |m|
if zsr[m.channel] == true
m.reply "already doing it.."
else
m.reply "ok."
zsr[m.channel] = true
for i in 1..99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
sleep 60
puts "#{xzsr[m.channel]} = x, tweetzsr = #{tweetzsr[m.channel]}"
tweetzsr[m.channel] = Twitter.user_timeline("twiitterracount").first.text
if xzsr[m.channel] == tweetzsr[m.channel]
nil
else
m.reply "#{tweetzsr[m.channel]} - via twitter feed"
xzsr[m.channel] = tweetzsr[m.channel]
end
end
end
end
答案 0 :(得分:3)
首先,对于无限循环,使用loop
方法。
最好的办法就是使用Twitter's streaming api。这个api会向Twitter发送一个请求,然后Twitter会将任何新数据推送到您的客户端。为此,有一个名为TweetStream的宝石。
使用示例:
TweetStream::Client.new.userstream do |status|
m.reply "#{status.text} - via twitter"
end
答案 1 :(得分:0)
这是你的无限循环吗?
将其改为此以提高理智
loop do
sleep 60
newtweet[m.channel] = Twitter.user_timeline("twitteracount").first.text
next if oldtweet[m.channel] == newtweet[m.channel]
m.reply "#{newtweet[m.channel]} - via twitter"
oldtweet[m.channel] = newtweet[m.channel]
end
您错过了两个end
个关键字。