Ich habe einen Chat-Bot für Twitch IRC erstellt, kann ich verbinden und Befehle usw. usw. erstellen, aber ich kann nicht Tastatur-Interrupt in der Eingabeaufforderung verwenden. Ich vermute, dass es daran liegt, dass es in dieser Endlosschleife stecken geblieben ist, und ich weiß nicht, wie ich das beheben soll? Ich bin neu in Programmierung BTW!Endlosschleife für einen Bot
Hier ist der Code, den ich in meiner Run.py
, openSocket()
in einer anderen Datei definiert ist, im Grunde Verbindung zum Server. s = socket.socket.
Der erste Teil in der While-Schleife liest im Grunde nur die Server-Nachrichten, ich denke, es ist ziemlich einfach für euch!
s = openSocket()
joinRoom(s)
readbuffer = ""
while True:
readbuffer = readbuffer + s.recv(1024).decode("utf-8")
temp = str.split(readbuffer, "\n")
readbuffer = temp.pop()
for line in temp:
if "PING" in line:
s.send("PONG :tmi.twitch.tv\r\n".encode("utf-8"))
print("---SENT PONG---")
printMessage(getUser, getMessage, line)
message = getMessage(line)
for key in commands:
command = key
if command in message:
sendMessage(s, commands[command])
((Edit: Ich habe auch dieses Problem, wo die Verbindung mit dem Server aus irgendeinem Grund zu einer Zeitüberschreitung scheint, dass ich es für etwa 40-45min, mit Ping/Pong halten Verbindung bekommen verwaltet, aber es dann. getrennt wieder
EDIT:.
Leider wurde der ursprüngliche Beitrag Super unordentlich ich diese Pastebin mit der geringsten Menge an Code erstellt habe ich das Problem neu erstellen verwenden könnte Wenn der Chat-inaktiv ist es trennen wird.. , und ich kann es nicht dazu bringen, 2 Pings hintereinander ohne irgendwelche Nachrichten dazwischen zu senden, nicht sicher, ob das daran liegt trennt sich vor dem 2. Ping oder wegen des 2. Ping.
Bei mindestens einer Gelegenheit hat es getrennt, bevor ich den ersten Ping vom Server bekam.
Pastebin: pastebin.com/sXUW50sS
Verwenden Sie Multithreading, möglicherweise implizit in 'JoinRoom'? Nur der Haupt-Thread kann durch Signale getötet werden. – MisterMiyagi
http://pastebin.com/b3h2Y9BE hier können Sie alle Funktionen sehen, die ich verwendet habe, um eine Verbindung zum Server herzustellen! – imroroyo
Das ist nicht besonders hilfreich. Versuchen Sie, ein [minimales Beispiel] zu erstellen (http://stackoverflow.com/help/mcve). Sind Sie sicher, dass Ihre Schleife tatsächlich vorrückt? Wenn Ihr Socket nicht genügend Daten hat, wird * nach * einer festen Größe ('s.recv (1024)') * gefragt. Das ist ein blockierender Systemaufruf, den Sie innerhalb von Python * nicht abbrechen können. Es würde auch Ihre Zeitüberschreitung erklären. – MisterMiyagi