2017-02-21 6 views
-1

私はPythonでツイッチボットを作ってみたかったので、オンラインでチェックし、コードを複製する方法についての少しのガイドを見つけましたので、書き直す前にどのように動作するか見ることができます。しかし、私が実行している問題は、ボットが以下のエラーが出る単語の1つを検出したときです。私はそれがバイトのようなオブジェクトによって何を意味しているのか、どうやってメッセージをフォーマットすることができるのかを理解することはできません。Twitchボットのメッセージフォーマットの問題

これは、私が忘れてしまった、または私が知らない何かが、私が現在ネットワークプログラミングのどのような種類のプログラミングでも経験していないので、ほとんど考えられません。誰かが大いに感謝する指針を持っているならば。

エラー: ファイル "C:/Users/Daniel/PycharmProjects/twitchBOT/bot.py"、ライン45、 にs.send検出( "PRIVMSGの#buffet_time:これはテストです") TypeError例外を:バイトのようなオブジェクトは、ない「str」は終了コードで終了し

プロセスを必要とする1

# boy.py 
import cfg 
import socket 
import re 
import time 


def chat(sock, msg): 
    sock.send("PRIVMSG {} :{}".format(cfg.CHAN, msg)) 


def ban(sock, user): 
    chat(sock, ".ban {}".format(user)) 


def timeout(sock, user, secs=1): 
    chat(sock, ".timeout {}".format(user, secs)) 

s = socket.socket() 
s.connect((cfg.HOST, cfg.PORT)) 
s.send("PASS {}\r\n".format(cfg.PASS).encode("utf-8")) 
s.send("NICK {}\r\n".format(cfg.NICK).encode("utf-8")) 
s.send("JOIN {}\r\n".format(cfg.CHAN).encode("utf-8")) 
CHAT_MSG = re.compile(r"^:\w+!\[email protected]\w+\.tmi\.twitch\.tv PRIVMSG #\w+ :") 

while True: 

    response = s.recv(1024).decode("utf-8") 

    if response == "PING :tmi.twitch.tv\r\n": 
     s.send("PONG :tmi.twitch.tv\r\n".encode("utf-8")) 
     print("Pong!") 

    else: 
     username = re.search(r"\w+", response).group(0) 
     message = CHAT_MSG.sub("", response) 
     print(username + ": " + message) 

     for pattern in cfg.PATT: 
      if re.match(pattern, message): 
       print("detected") 
       s.send(b"PRIVMSG #buffet_time :this is a test") 
       print("sent") 
       break 

     time.sleep(1/cfg.RATE) 



#cfg.py 

HOST = "irc.twitch.tv"       # irc server 
PORT = 6667          # irc port# 
NICK = "buffet_bot"        # twitch name (lower case) 
PASS = "oauth:[not showing here of course. ]" # OAuth Token 
CHAN = "#buffet_time"       # channel to connect to 

RATE = (20/30)         # delay 

PATT = [ 
     r"badword1", 
     r"badword2" 
] 
+1

'send(b" text ")'または 'send(" text ".encode(" utf8 "))'それを修正します。 – ForceBru

+0

あなたが書いたものとは別のすべての 's.send()'コマンドに '.encode(" utf-8 ")という文字列が続いているのは不思議そうですね。 –

+0

問題は私がutf8をエンコードしていても実際にチャットに何かを送信してもエラーにはならないが、チャットには何も表示されない。それは私の問題です。 –

答えて

0

私は、特定のエラーが、Pythonの2.7の最新ビルドでこれを実行すると解決するようで知りません問題。私は理由を知らないのですが、

s.send("PRIVMSG #buffet_time :THIS IS SENT\n".encode("utf-8")) 

は完全に2.7で動作しますが、3.5では全く動作しません。

誰もがこれがなぜ私が知りたいと思うか理由を理解するならば!

関連する問題