Ruby - 限制命令启动的频率

时间:2017-08-23 01:27:10

标签: ruby limit sleep repeat spam

任何人都知道如何对ruby中启动命令的频率应用时间限制?我知道sleep命令存在并且一直试图像这样应用它。 由于垃圾邮件原因,我想阻止重复调用该命令。 该应用程序是一个松散通道中的传出webhook,用户可以调用该命令:tip。为了向频道中的另一个用户提示,我希望在该命令可以再次使用之前对某个等待时段设置限制。

def tip
  if sleep(5)
    tip @user amount
  else
    @result[:text:] = "Spam tipping is not allowed."
  end
end

2 个答案:

答案 0 :(得分:1)

您想要的是"限速"。

如果您想自己动手,只需存储上次使用该命令的时间戳。

然后,每次调用该命令时,请检查用户上次调用该命令的时间戳。如果已设置(这不是用户第一次调用该命令)并且它小于(例如)5秒前,则拒绝该请求。否则,让它通过并存储一个新的时间戳。

还有一些库可以为您执行此操作,例如请参阅rack-throttle

答案 1 :(得分:0)

如果这是一个Web应用程序或具有用户登录名和数据库的东西:只需存储一个"最后一个名为"用户的时间戳&命令,并检查它。

如果这是一个命令行,一个简单的方法就是在一个带有该信息的地方存储一个小文本文件(带有一行的文件和最后一次调用的时间戳)。