0

这是来自我的 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
4

2 回答 2

3

首先,对于无限循环,请使用该loop方法。

最适合这种事情的是使用Twitter 的流媒体 API。这个 api 将向 Twitter 发送一个请求,然后 Twitter 会将任何新数据推送到您的客户端。为此,有一个名为TweetStream的宝石。

示例用法:

TweetStream::Client.new.userstream do |status|
  m.reply "#{status.text} - via twitter"
end
于 2012-05-21T14:07:50.970 回答
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关键字。

于 2012-05-21T14:07:49.050 回答