加入数百个irc通道(twitch)

2024-10-04 11:25:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图通过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()

下面是一些要测试的通道: https://pastebin.com/avn0PVVg


Tags: importdataifdefasconnectchannelsocket