Twitch bot消息格式化问题

时间:2017-02-21 17:08:13

标签: python python-3.x

所以我决定用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"
]

1 个答案:

答案 0 :(得分:0)

我不知道具体的错误,但在最新版本的Python 2.7中运行它似乎解决了这个问题。我不知道为什么,但

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

在2.7中完美运行,但在3.5中完全没有。

如果有人想出为什么会这样,我很想知道!