Gibt es eine Möglichkeit, dem Server mitzuteilen, dass er den MOTD nicht senden soll, oder tatsächlich eine bessere Möglichkeit, auf das Ende des MOTD zu warten, um dem Server mitzuteilen, zu welchem Kanal ich mich verbinden möchte
Nein, es gibt keine Möglichkeit, den MOTD auszuschalten. Es sollte jedoch nicht einmal notwendig sein, da Ihre Annahme, dass "das Netzwerk keine Befehle akzeptiert, bis die MOTD abgeschlossen ist", überhaupt nicht wahr ist.
Alle Netzwerke akzeptieren sofort nach der Registrierung Befehle (dh Senden NICK
und Senden USER
) - einige von ihnen verzögern die Bearbeitung dieser Befehle lediglich um ein oder zwei Sekunden. Es ist absolut gültig, Befehle so bald wie möglich zu senden.
In jedem Fall müssen Sie die Hauptschleife nicht verzögern, um dies zu erreichen. In der Tat sollten alle empfangenen Eingaben von derselben Schleife behandelt werden. Stattdessen würden Sie einfach nachverfolgen, ob Sie bereits eine "Ende von MOTD" -Zeile gesehen haben, und die JOIN
s beim ersten Mal senden .
Aus Ihrer Beschreibung klingt es auch so, als würden Sie eine etwas unzuverlässige Methode verwenden, um das Ende von MOTD zu erkennen. Wenn Sie nach der Zeichenfolge "End of / MOTD" suchen - nicht. Analysieren Sie stattdessen die gesamte Zeile gemäß RFC 1459 § 2.3.1 (hier ist kein Pythonic-Parsonic- Parser ) und überprüfen Sie den Befehl in jeder Zeile, da der beschreibende Text zwischen verschiedenen IRC-Daemons variieren kann. Sie sollten auch nach der Meldung "no / MOTD" suchen.
Zum Beispiel hätten Sie:
# raw input is ":leguin.freenode.net 376 grawity :End of /MOTD.\r\n" # split input is [":leguin.freenode.net", "376", "grawity", "End of /MOTD."] # parsed input is {"prefix": "leguin.freenode.net", # "command": "376", # "args": ["grawity", "End of /MOTD."]} RPL_WELCOME = "001" RPL_ENDOFMOTD = "376" ERR_NOMOTD = "422" if not sent_initial_join: if command in : conn.send("JOIN %s\r\n" % ",".join(channels)) sent_initial_join = True
Aber wie gesagt, das sollte niemals nötig sein. Senden Sie einfach die JOIN
s unmittelbar nach NICK
, USER
und solche Dinge CAP END
.
Und bei den Göttern sollte man nicht so dumm wie einen Timeout von 10 Sekunden verwenden.