Python 加入数百个irc通道(twitch)

Python 加入数百个irc通道(twitch),python,sockets,chatbot,twitch,Python,Sockets,Chatbot,Twitch,我正试图通过twitch上的聊天机器人加入数百个频道。然而,socket gets连接被远程主机错误强制关闭,我的问题是我不知道如何添加多个套接字,因此如果一个套接字死亡,我可以重新加入该套接字上的通道并继续,相反,它关闭客户端并尝试再次加入所有通道 这是我的密码: import socket import time import errno with open('channels.txt') as f: channel_list = f.readlines() def connec

我正试图通过twitch上的聊天机器人加入数百个频道。然而,socket gets连接被远程主机错误强制关闭,我的问题是我不知道如何添加多个套接字,因此如果一个套接字死亡,我可以重新加入该套接字上的通道并继续,相反,它关闭客户端并尝试再次加入所有通道

这是我的密码:

import socket
import time
import errno

with open('channels.txt') as f:
    channel_list = f.readlines()

def connect():
    global sock
    sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    sock.connect(('irc.chat.twitch.tv', 6667))



def sendRaw(data, log:bool=True):
    try:
        if log:
            print(f"sending raw: {data}")
        sock.send(bytes(data + '\r\n', 'utf-8'))
    except IOError as e:
        if e.errno == errno.EPIPE:
            pass


def joinchannel(channel):
    channel = "#" + channel.lower() if not channel.startswith("#") else channel.lower()
    sendRaw('JOIN ' + channel)


def login_and_join():
    sendRaw('PASS oauth:')  # less likely to leak
    sendRaw('NICK justinfan0987')
    # requests more information
    sendRaw('CAP REQ :twitch.tv/commands')
    sendRaw('CAP REQ :twitch.tv/tags')
    sendRaw('JOIN #turtoise')
    sendRaw('JOIN #nimbot0')
    sendRaw('JOIN #peeandpoob')

    for channel in channel_list:
        joinchannel(channel)

def loop():
    while True:
        time.sleep(0.1)
        try:
            data = sock.recv(4096)
            decoded_data = data.decode("utf-8").split("\r\n")
            if decoded_data is None:
                print("no data")
            print(decoded_data)

        except Exception as e:
            print(e)

def run_channel_joiner():
    connect()
    login_and_join()
    loop()

run_channel_joiner()
下面是一些要测试的通道:

您是否检查过您是否已成功进行身份验证?您是否正在响应
砰的一声
s?您接收数据的速度是否比处理数据的速度快(因为
sleep()
)?我在另一个版本上响应了pong,并且我尝试更改睡眠,睡眠是因为我认为它接收的数据太多,但我尝试了该示例的大量不同变体。身份验证是正确的,它使用匿名连接,因此如果您想测试它,您不需要设置twitch accountSleeping,也不会阻止您接收数据。相反,在程序获取数据之前,数据只是放在操作系统缓冲区中。最终,操作系统缓冲区将填满,操作系统将拒绝来自服务器的新数据。此时服务器可能会放弃并关闭连接。也就是说,睡眠导致断开连接。您必须及时处理发送的数据。如果你不能做到这一点,那么就减少你连接到的频道的数量。睡眠并不是导致断开连接的原因。我已经删除了所有睡眠,但仍然得到相同的错误,这篇文章的整个要点是连接大量频道