2017-02-21 6 views
-1

Итак, я решил, что хочу сделать бонус под контролем на Python, который я проверил онлайн, и нашел небольшое руководство о том, как это сделать, реплицируя код, чтобы я мог видеть, как он работает, прежде чем переписывать его. Но проблема, с которой я сталкиваюсь, - это когда бот обнаруживает одно из слов, которое я получаю при ошибке ниже. Я не могу понять, что это значит, как объект, похожий на байты, и как я могу форматировать сообщение как таковое.Проблема с форматированием сообщений Twitch bot

Это, скорее всего, очень маленькая вещь, которую я пропустил или что-то не знаю, потому что я не слишком опытен в каком-либо сетевом программировании в настоящее время. Если у кого-то есть какие-либо рекомендации, которые будут высоко оценены.

Ошибка: файла "C: /Users/Daniel/PycharmProjects/twitchBOT/bot.py", строка 45, в обнаружена s.send ("PRIVMSG #buffet_time: это тест") TypeError: байт-подобный объект необходим, а не «» ул

процесс завершится с кодом выхода 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, кажется, исправить проблема. Я не знаю почему, но

прекрасно работает в 2.7, но совсем не в 3.5.

Если кто-нибудь когда-нибудь выяснит, почему это так, я бы хотел узнать!