タイトルによれば、これは初めてのことですが、私はPythonを使って実際に大きなことをしています。私はまだその言語に慣れていないので、これはおそらく私の欠けているものです。コードは、ユーザー名と削除プライベートパスで、かなり短く、以下のようにある:言及する私は、Pythonでツィッチに焦点を当てたIRCボットを作成していますが、応答が遅いです。私は間違って何をしていますか?
import re
import socket
import sys
import time
import string
HOST = "irc.twitch.tv"
PORT = 6667
NICK = ""
PASS = ""
CHAN = ""
RATE = (20/30) # messages per second
CHAT_MSG=re.compile(r"^:\w+!\[email protected]\w+\.tmi\.twitch\.tv PRIVMSG #\w+ :")
def chat(sock, msg):
sock.send("PRIVMSG #{} :{}".format(cfg.CHAN, msg))
public = socket.socket()
public.connect((HOST, PORT))
public.send("PASS {}\r\n".format(PASS).encode("utf-8"))
public.send("NICK {}\r\n".format(NICK).encode("utf-8"))
public.send("JOIN {}\r\n".format(CHAN).encode("utf-8"))
private = socket.socket()
private.connect((HOST, PORT))
private.send("PASS {}\r\n".format(PASS).encode("utf-8"))
private.send("NICK {}\r\n".format(NICK).encode("utf-8"))
private.send("CAP REQ :twitch.tv/tags twitch.tv/commands {}\r\n".format(CHAN).encode("utf-8"))
while True:
channelResponse = public.recv(1024).decode("utf-8")
privateResponse = private.recv(1024).decode("utf-8")
if privateResponse == "PING :tmi.twitch.tv\r\n":
private.send("PONG :tmi.twitch.tv\r\n".encode("utf-8"))
else:
privateResponseUsername = re.search(r"\w+", privateResponse).group(0) # return the entire match
privateResponseMessage = CHAT_MSG.sub("", privateResponse)
print(privateResponseUsername + ": " + privateResponseMessage)
if channelResponse == "PING :tmi.twitch.tv\r\n":
public.send("PONG :tmi.twitch.tv\r\n".encode("utf-8"))
else:
username = re.search(r"\w+", channelResponse).group(0) # return the entire match
message = CHAT_MSG.sub("", channelResponse)
print(username + ": " + message)
time.sleep(1/RATE)
ことの一つは、私は基本的なテンプレートのスタイルを以下ました、しかし、それはボットにささやきを実装カバーしていないということです - ので、私はそれを行う方法を研究することで推測する必要があります。最も推奨される方法は、公開用と非公開用の2つの接続です。
私はこの部分をセットアップしましたが、私はPythonのパブリック/プライベートチャネル応答の配列をチェックする方法がよくわかりません。そうする最善の方法は何ですか? – Merlin
アレイ?文字列である 'privateResponse'と' channelResponse'バッファを意味しますか?あなたにはたくさんのオプションがあります。ほとんどは、IRCのメッセージが改行によって簡単に終わるという事実を中心にしています。バッファに改行がない場合、完全なメッセージはありません。最も簡単なことは、おそらく改行があるかどうかを確認することです。もしあれば、それまでのすべてをメッセージとして処理し、改行の後にすべてをバッファで置き換えます。 –
それはそうしました。最初の一時停止がありますが、両方の接続が適切に動作し、応答が即座に得られます。 – Merlin