Ruby—限制启动命令的频率

Ruby—限制启动命令的频率,ruby,limit,sleep,repeat,spam,Ruby,Limit,Sleep,Repeat,Spam,有人知道如何对ruby中启动命令的频率设置时间限制吗?我知道sleep命令存在,并且一直在尝试这样应用它。 我想防止由于垃圾邮件原因重复调用该命令。 该应用程序是一个空闲通道中的传出webhook,用户可以在其中调用命令:tip。为了给频道中的另一个用户小费,我想在再次使用该命令之前对某个等待时间设置一个限制 def tip if sleep(5) tip @user amount else @result[:text:] = "Spam tipping is not a

有人知道如何对ruby中启动命令的频率设置时间限制吗?我知道sleep命令存在,并且一直在尝试这样应用它。 我想防止由于垃圾邮件原因重复调用该命令。 该应用程序是一个空闲通道中的传出webhook,用户可以在其中调用命令:tip。为了给频道中的另一个用户小费,我想在再次使用该命令之前对某个等待时间设置一个限制

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

如果这是一个web应用程序或具有用户登录和数据库的东西:只需使用user&命令存储一个“last called”时间戳,然后检查它

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

您需要的是所谓的“速率限制”

如果您想自己做,只需存储每个用户上次使用命令的时间戳

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


还有一些库可以为您执行此操作,请参见示例。

sleep(n)
返回
n
,因此
如果sleep(5)
将始终成功并运行
tip@user amount
。您希望
tip
的行为是什么?你真的想让它在做任何事情之前等待5秒钟吗?或者您希望它只是返回不执行任何操作(可能设置
@result[:text]
),除非自上次执行某项操作以来已出现5秒的间隔?这是在rails或其他web应用程序中吗?如果没有,这个命令是如何调用的?@shelvavu如果有帮助,我已经更新了我的答案。用户有能力调用此命令,因此我希望每1-2秒停止重复发送此命令。此命令是否“知道”谁调用它?@Martin yes存储在User\u id变量中。这与用作小费目标的用户变量不同。我更新了我的问题,这可能会让您更好地了解问题,用户实际上有能力调用此命令,因此我希望每1秒停止重复使用它。如果他们真的每一秒钟都使用一次,他们就会面临垃圾邮件提示错误。非常感谢你,我的朋友,工作得很愉快:)