0

ボットに次の自動レスポンダーがあります

on *:TEXT:*sparky*:*: { msg # $read(scripts/name-responses.txt) }
on *:ACTION:*sparky*:*: { msg # $read(scripts/name-responses.txt) }

コードを書く方法を知りたかったのですが、IF ステートメントで推測しているように、ユーザーがsparkyを 2 回以上入力すると、ユーザーは 120 秒間無視されます。このように、自動応答機能により、ボットがチャットをフラッディングすることはありません。

どんな助けでも大歓迎です!

4

1 に答える 1

-1

コマンドを使用したすべてのユーザーと、最後にいつ使用したかを追跡することをお勧めします。これは、すべてのデータを INI ファイルに保存することで簡単に実行できます。

コマンドを使用して、この情報を保存できますwriteini。このファイルにデータを書き込むには、次の行に沿って何かを使用します。

writeini sparky.ini usage $nick $ctime

$ctime1970/01/01 から経過した秒数に評価されます。これは一般に、イベントの時間を比較する方法です。

ユーザーがスクリプトを再度トリガーすると、この INI ファイルから値を読み取り、現在の時刻と比較できます。時間の差が (たとえば) 10 秒未満の場合、コマンドを送信してから 120 秒間無視することができます。次を使用して、最後の使用量の値を読み取ります。

$readini(sparky.ini, n, usage, $nick)

最終的なスクリプトは、次のスクリプトの行に沿ったものになります。/triggerSparky <nick> <channel>on TEXT と on ACTION イベント リスナーで同一のコードを避けるために、機能を別のエイリアス ( ) に移動しました。

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 ファイルに保存せずに、定義済みの時間だけ無視することです。これにより、最近 2 回トリガーされたかどうかを確認できなくなりますが、たとえば、2 分間に 1 回のみトリガーできるようにすることをお勧めします。

于 2013-06-27T21:18:25.513 に答える