1

私は MSL 言語でのプログラミングに関してはかなりの専門家ですが、生のコマンドなどには詳しくありません。

新しいスクリプトを開発中です。このスクリプトでは、ユーザーが言う $4 が登録済みのニックネームであるかどうかを確認したいのですが、これを行う方法がわかりません。

高度なヘルプやアドバイスをありがとうございます。

敬具、ティム

アップデート:

raw 307:*:{ set $+(%,%chan,-,%CheckNick) Registered }
on *:TEXT:*:#:{
    if ($1 == !regtest) {
        set %chan $remove($chan,$chr(35))

        set %CheckNick $4
        whois $4
    }
    if ($($+(%,%chan,-,%CheckNick),$4),5) != $null) {
        do this...
    }
    else {
        else message...
    }
}

これを確認するためにこれを機能させましたが、変数が設定されているかどうかを確認するifステートメントは無視されています...

編集:

私はこれを使ってみました:

checkNickReg $chan $2 $nick

...そしてこれをエコー:

  echo -a Target: $1
  echo -a Nick: $2
  echo -a Status: $3
  echo -a Chan: $3 - $chan

次のようなチャネルへの応答を取得しようとしています。$nick $+ 、$1 は登録されていません/登録されています/登録されていますが、ログインしていません。

上に投稿したことは機能しないため明らかに間違っていますが、いくつかの方法を試しましたが、トークン化や変数の設定などを行わずにデータがどのように渡されるのか実際にはわかりません...

返事

[01:59:06] <~MrTIMarshall> !isReged mr-dynomite
[01:59:08] <&TornHQ> : mr-dynomite のステータス: NOTLOGGED
編集: mr-dynomite は現在オンになっていません。存在するか、オンになっていない場合でもこのチェックを行います。もしそうなら、これは血まみれです!!! [02:00:04] <~MrTIMarshall> !isReged MrTIMarshall
[02:00:04] <&TornHQ>: MrTIMarshall ステータス: LOGGEDIN

$4 が機能していないようですが、「存在する、ログインしていない」と「認識されている、ログインしていない」の違いは何ですか?

また、変数を設定したりトークン化したりせずにデータを渡すにはどうすればよいでしょうか?

(PS)これまでご愛顧いただき、誠にありがとうございました。

別の編集:

私は今日、詳細に調べてきました.0または1の場合、ユーザーがオンラインではないか登録されていないかを考えるのは正しいですか(コメントでは、0 =存在しない/オンラインではない、1 =ログに記録されていません一方、2 には、ログインしていないが認識されていると書かれていますが、認識されたという意味がよくわかりません. それ以外の場合は、このスクリプトのヘルプに非常に感謝しています。

4

2 に答える 2

0

ほとんどの IRCD では、ユーザーの WHOIS 応答でのみ公開されます。ユーザーが何かを言うたびに WHOIS を実行することはお勧めできません。サーバー管理者はそのたびに通知を受け取る可能性があるためです。

于 2012-11-07T20:53:11.143 に答える
0

特定のネットワークを指定していないので、いくつかの一般的なネットワーク (実際にはユーザー認証システムを備えている) の概要を書きました。パターンに従って、他の多くのネットワークを追加できるはずです。

基本的には実行/checkNickReg <target> <nick> [optional extra data]し、サーバーが登録情報で再生するときに (該当する場合)、on isReged signalイベントを使用して応答を処理します。それ以外はほぼ透明です。

EDIT:あなたが使用している指定されたネットワーク(Torn)は標準のanopeサービスを使用しているようです。そこで、そのネットワークをサポートするようにコードを更新しました。

; triggers when you get nick registration info back
; $1 = Target
; $2 = Nick
; $3 = Status, can be: LOGGEDIN, RECOGNIZED, NOTLOGGED
; $4- = Everything else passed
on *:signal:isReged:{
  echo -a Target: $1
  echo -a Nick: $2
  echo -a Status: $3
  echo -a Else: $4-
}

; reg lookup routines
alias checkNickReg {
  set %reg. $+ $network 1
  set %reg.target. $+ $network $1
  set %reg.nick. $+ $network $2
  set %reg.other. $+ $network $3-

  ; Freenode uses: NickServ ACC <nick>
  if ($network == Freenode) msg NickServ ACC $2
  ; Rizon/SwiftIRC/OFTC/Torn use: NickServ STATUS <nick>
  elseif ($istok(Rizon SwiftIRC OFTC Torn, $network, 32)) msg NickServ STATUS $2
}

; listen for replays
on *:notice:*:*:{
  if ($($+(%, reg., $network),2)) {
    ;
    var %target = $($+(%, reg.target., $network),2)
    var %nick = $($+(%, reg.nick., $network),2)
    var %other = $($+(%, reg.other., $network),2)
    ;
    unset %reg*. $+ $network

    if (($network == FreeNode) && ($2 == ACC)) $&
      || (($istok(Rizon SwiftIRC OFTC Torn, $network, 32)) && ($1 == STATUS)) {

      ; FreeNode:

      ; 0 = does not exist
      ; 1 = exists, not logged in
      ; 2 = recognized, not logged in
      ; 3 = logged in

      ; Rizon/SwiftIRC/OFTC/Torn:

      ; 0 = does not exists / not online
      ; 1 = not logged in
      ; 2 = recognized, not logged in
      ; 3 = logged in

      if ($3 < 2) var %status = NOTLOGGED
      elseif ($3 == 2) var %status = RECOGNIZED
      else var %status = LOGGEDIN
    }

    ;send status signal
    .signal isReged %target %nick %status %other 
  }
}

(追加の注意: セキュリティ上の理由から、$nick が AuthServ/NickServ であることを確認するために追加のチェックを追加すると便利な場合があります。)

簡単な使用例は次のとおりです。

; Just a basic example of how to call it.
on *:text:!isReged &:#:{
  checkNickReg $chan $2 $nick
}

on *:signal:isReged:{
  msg $1 $4: $2 status is: $3
}

タイプ!isReged <nick>

編集:データは、グローバル変数を介して on isReged イベントに渡されます。checkNickRegそれらをエイリアスに設定し、on noticeイベントでクリーンアップします。そのため、クリーンアップされるため、それらを見ることはありません。これらは $1- の isReged シグナル イベントに渡されます。

于 2012-11-08T19:28:23.940 に答える