首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防汛指挥mIRC

防汛指挥mIRC
EN

Stack Overflow用户
提问于 2013-06-27 20:20:23
回答 1查看 1.4K关注 0票数 0

我的机器人上有下面的自动响应器

代码语言:javascript
复制
on *:TEXT:*sparky*:*: { msg # $read(scripts/name-responses.txt) }
on *:ACTION:*sparky*:*: { msg # $read(scripts/name-responses.txt) }

我想知道如何告诉编写代码,我用IF语句猜测,如果用户键入的火花超过两倍,用户就会被忽略120秒。这样,我的机器人不会因为自动响应功能而淹没聊天。

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2013-06-27 21:18:25

我建议跟踪所有使用该命令的用户,以及他们最后一次使用该命令的时间。通过将所有数据保存在INI文件中,可以轻松地做到这一点。

可以使用writeini命令保存此信息。若要将数据写入此文件,请使用以下内容:

代码语言:javascript
复制
writeini sparky.ini usage $nick $ctime

$ctime将计算自1970/01/01年以来运行的秒数。这通常是比较事件发生时间的方法。

一旦用户再次触发您的脚本,您就可以从这个INI文件中读取值,并将其与当前时间进行比较。如果时间之间的差异小于10秒(例如),它可以发送命令,然后忽略它们120秒。您将使用以下方法读取它们最后一次使用的值:

代码语言:javascript
复制
$readini(sparky.ini, n, usage, $nick)

您的最终脚本看起来可能类似于下面的脚本。我已经将功能移到单独的别名(/triggerSparky <nick> <channel>)中,以避免在on文本和操作事件侦听器中使用相同的代码。

代码语言:javascript
复制
on *:TEXT:*sparky*:#: {
  triggerSparky
}

on *:ACTION:*sparky*:#: {
  triggerSparky
}

alias triggerSparky {      
  ; Send the message
  msg $chan $read(scripts/name-responses.txt, n)

  if ($calc($ctime - $readini(sparky.ini, n, usage, $nick)) < 10) {
    ; This user has recently triggered this script (10 seconds ago), ignore him for 120 seconds

    ignore -u120 $nick
    remini sparky.ini usage $nick
  }

  else {
    writeini sparky.ini usage %nick $ctime
  }
}

当然,实现类似结果的一种稍微简单的方法是,只需在预定义的时间内忽略它们,而不将其数据保存在INI文件中。这将阻止您检查它们最近是否触发了两次,但这将是一个很好的方法,只允许他们每两分钟触发一次。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17352458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档