所以我决定用Python制作一个twitch bot我在网上查了一下,找到了一个关于如何复制代码的指南,这样我就可以在重写代码之前看到它是如何工作的。但我遇到的问题是当机器人检测到其中一个词时,我得到以下错误。我无法弄清楚类似字节的对象意味着什么,以及如何将消息格式化为这样。
这很可能是我错过的一件小事或者我不知道的事情,因为我目前在任何网络编程方面都没有太多经验。如果有人有任何指导,将不胜感激。
错误: 文件“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+!\w+@\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"
]
答案 0 :(得分:0)
我不知道具体的错误,但在最新版本的Python 2.7中运行它似乎解决了这个问题。我不知道为什么,但
s.send("PRIVMSG #buffet_time :THIS IS SENT\n".encode("utf-8"))
在2.7中完美运行,但在3.5中完全没有。
如果有人想出为什么会这样,我很想知道!