AnGelBot-Portal²

Normale Version: whois und Reaktion auf Reply auf whois
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Grüße!

Ich hätte eine Frage, und zwar bzgl. folgendem: Ich würde meinen AnGeL gerne prüfen lassen, ob ein User beim Join in einen Channel SSL Verschlüsselung verwendet (Server ist Undernet mit AES256). Diese Information ließe sich aus einem whois Reply auf den User gewinnen, hierbei kommt unter anderem der String "<nickname> is using a Secure Connection" zurück.

Nun meine Frage: Es gibt ja den Hook Join(), auf den hin man ggf. ein whois an den joinenden User absetzen könnte. Aber wie frage ich dann die Antwort darauf ab? Muß ich hier den Code auf mehrere Hooks aufteilen (Einer für den Join und einer für das whois reply)?

Möglicherweise bräuchte ich davon auch die Raw() Versionen, da ich es bisher am SSL Server nur per Raw() geschafft habe, irgendwas zu parsen (ich wickle mittels WinSSLWrap das SSL um den AnGeL herum), warum das so ist weiß ich noch ned.

Wäre toll, wenn mir dabei jemand helfen könnte. Also es geht wie gesagt darum:
  • Whois bei Join eines Users in einen Channel absetzen
  • Reply auf Whois auf bestimmten String prüfen, und ggf. reagieren
  • Das ganze nach Möglichkeit auch in Raw
Vielen Dank!
Am besten du machst einen Whois auf den User beim Joinen (Join()) und dann reagierst du per Numerics drauf.
Sieht so aus:

Code:
Sub Init()
    '...
    Hook "Join"
    Hook "Numerics"
End Sub

Sub Join(...)
    SendLine "WHOIS " & Nick, 1
End Sub

Sub Numerics(Line)
    If Param(Line, 1) = "XXX" Then
        'User hat eine gesicherte Verbindung
    End If
End Sub

Bei XXX tragste noch das Numeric ein, dass die Secure Message beinhaltet. 671 sollte die sein, die du suchst.
Ah, vielen Dank, das funktioniert schon Mal. Leider habe ich gerade einen Denkfehler bei mir bemerkt, lol.

Ich möchte nicht reagieren, wenn 671 detektiert wird, sondern dann wenn es NICHT detektiert wird (habe ich falsch formuliert, sorry). Soll heißen, wenn ein User mit SSL verbindet, passiert nichts.

Wenn ein User ohne SSL verbindet, dann soll reagiert werden.

Nur sowas funktioniert logischerweise nicht wie gewünscht:
Code:
If Not Param(Line, 1) = "671" Then
  'User hat eine ungesicherte Verbindung
End If
Da detected er ja alle Numerics außer 671 und agiert wo er gar nicht sollte. Zerbrech mir grade den Kopf drüber..

Edit: Ich könnte mir eine Lösung vorstellen, aber nur wenn ich Line-übergreifenden Code schreiben könnte. Aber ich weiß ned wie das geht, jeder Hook wird ja nur 1 Mal pro Line ausgeführt und dann "vergessen", bis zur nächsten Line. Strikt Line-by-Line. Ich kann mir irgendwie ned Mal mittels globaler Variable den User aus der Join() merken und für die Numerics() weiterverwenden?

Brauche also leider immer noch etwas Unterstützung, danke!
Dann würde ich eine globale Variable festlegen (z.b. SSLused) und diese auf true setzen, wenn die If-Bedingung true wird (er also SSL benutzt).

Dann fügst du noch eine zweite If-Bedingung ein, in der du überprüfst, ob das Whois zuende is (sollte Numeric 318 sein).
Hier überprüfst du, ob die SSLused-Varaible true ist. Wenn ja, benutzt der User SSL, wenn nicht: dann war keine Zeile dabei sprich er benutzt kein SSL.

EDIT: also so:

Code:
Dim SSLused

Sub Init()
    '...
    Hook "Join"
    Hook "Numerics"
    SSLused = false
End Sub

Sub Join(...)
    SendLine "WHOIS " & Nick, 1
End Sub

Sub Numerics(Line)
    If Param(Line, 1) = "671" Then
        'User hat eine gesicherte Verbindung
        SSLused = true
    ElseIf Param(Line, 1) = "318" Then
        'Whois zuende
        If SSLused Then
            'User benutzte SSL
        Else
            'User benutzte kein SSL
        End If
    End If
End Sub
Mann, ich habe versucht, "globale" Variablen in der Init() zu setzen, das war wohl ziemlich stümperhaft, kein Wunder daß es mir nicht gelungen ist, Werte von Sub zu Sub weiterzureichen, rofl.

Danke für deine Hilfe, das hat es mir ermöglicht, alles wie gewünscht zu lösen, der Vorab-Code:
Code:
Dim SSL, UserName, Channel

Sub Init()
  Hook "Join"
  Hook "Numerics"
  SSL = false
End Sub

Sub Join(Chan, Nick, RegUser, Flags)
  SendLine "WHOIS " & Nick, 1
  UserName = Nick
  Channel = Chan
End Sub

Sub Numerics(Line)
  If Param(Line, 1) = "671" Then
    SSL = true
  ElseIf Param(Line, 1) = "318" Then
    If Not SSL Then
      SendLine "PRIVMSG " & Channel & " :04!WARNING!, user " & UserName & " is NOT using SSL! Channel security compromised!", 2
      SendLine "PRIVMSG " & Channel & " :04Users beware what you are saying as long as unencrypted clients are on the channel!", 2
    Else
      SendLine "PRIVMSG " & Channel & " :03User " & UserName & " is using SSL, all ok.", 2
      SSL = false
    End If
  End If
End Sub

Wichtig wars noch, das SSL Flag nach gematchtem 318er Numeric wieder auf false zu setzen, sonst ist das peristent bestehen geblieben! So funktionierts wunderbar! Biggrin
Referenz-URLs