2013-06-27 7 views
0

내가 가지고 내가, 내가 IF 문으로 추측하고있어 코드를 작성 말할 수있는 방법을 알고 싶어명령 홍수 방지 mIRC를

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

내 봇에 다음과 같은 자동 응답하는 사용자 유형의 경우 sparky 두 번 이상 사용자가 120 초간 무시됩니다. 이렇게하면 내 봇은 자동 응답 기능으로 인해 채팅에 홍수가 발생하지 않습니다.

도움이 될 것입니다.

답변

-1

명령을 사용한 모든 사용자와 마지막으로 사용한 사용자를 추적하는 것이 좋습니다. 이것은 모든 데이터를 INI 파일에 저장하여 쉽게 수행 할 수 있습니다.

writeini 명령을 사용하여이 정보를 저장할 수 있습니다.

writeini sparky.ini usage $nick $ctime 

$ctime이 1970년 1월 1일 이후 경과 된 시간 (초)로 평가됩니다 :이 파일에 데이터를 기록하려면, 다음의 라인을 따라 뭔가를 사용합니다. 이것은 일반적으로 사건의 시간을 비교하는 방법입니다.

사용자가 스크립트를 다시 트리거하면이 INI 파일에서 값을 읽고 현재 시간과 비교할 수 있습니다. 시간 차이가 10 초 미만인 경우 (예를 들어) 명령을 전송 한 다음 120 초 동안 무시할 수 있습니다. 다음을 사용하여 마지막 사용의 값을 읽을 것입니다 :

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

귀하의 최종 스크립트는 다음 스크립트의 라인을 따라 뭔가처럼 보일 수 있습니다. on TEXT 및 ACTION 이벤트 리스너에서 동일한 코드가 사용되지 않도록 별도의 별칭 (/triggerSparky <nick> <channel>)으로 기능을 이동했습니다.

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 분에 한 번만 트리거 할 수있게하는 것이 좋습니다.

+0

-1에 몇 가지 문제가 있지만 가장 중요한 것은 $ readini()에 'n'옵션이 누락되었습니다. 그건 용납 할 수 없어요. 또한 스크립팅 엔진을 예기치 않게 중단하여 디버깅을 매우 어렵게 만들기 때문에 다른 장소에서 호출 된 별칭에 $$ (즉, 필수 값)를 사용하는 것은 좋지 않습니다. 셋째, $ chan 및 $ nick과 같은 식별자는 해당 식별자가있는 이벤트에서 직접 호출되는 별칭에 의해 자동으로 상속됩니다. 인수로 인수를 전달하고 변수에 저장하면 코드가 복잡해집니다. 특히이 경우에. – Wiz

+0

$ read()에서도 누락 된 'n'옵션을 언급하는 것을 잊어 버렸습니다. – Wiz

+0

다른 대안을 찾아 보겠습니다. –