You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python开发Twitch私信机器人无法发送Whisper问题求助

Twitch私信机器人无法发送消息的问题解决

问题背景

我是Python新手,帮朋友开发Twitch私信机器人,代码能成功连接Twitch服务器(终端显示连接成功的欢迎信息),但目标用户收不到私信。尝试过移除缓冲区、更换账号昵称、修改主机和频道都没用,求解决。

原代码

HOST = 'irc.twitch.tv'
PORT = 6667
USER = 'bot name'
PASS = 'oauth:xxxxxxxxxx'
CHAN = 'channel here'

def abrirSocket():
    s = socket.socket()
    s.connect((HOST, PORT))
    message = "PASS " + PASS + "\r\n"
    s.send(message.encode('utf-8'))
    message = "NICK " + USER + "\r\n"
    s.send(message.encode('utf-8'))
    message = "JOIN #" + CHAN + "\r\n"
    s.send(message.encode('utf-8'))
    return s

def fecharSocket(s):
    s.close()

def entrar(s):
    readbuffer = ""
    Loading = True
    while Loading:
        readbuffer = readbuffer + s.recv(1024).decode()
        temp = readbuffer.split('\n')
        readbuffer = temp.pop()
        for line in temp:
            print(line)
            Loading = terminou(line)

def terminou(line):
    if("End of /NAMES list" in line):
        return False
    else: return True

def enviar_key(s, usuario, mensagem):
    entrar(s)
    montarMSG = f'PRIVMSG jtv :/w {usuario} {mensagem}'
    s.send(montarMSG.encode('utf-8'))
    fecharSocket(s)
    sys.exit()

enviar_key(abrirSocket(), "margoni_", "aaaaa")

终端输出

:tmi.twitch.tv 001 previabot :Welcome, GLHF!
:tmi.twitch.tv 002 previabot :Your host is tmi.twitch.tv
:tmi.twitch.tv 003 previabot :This server is rather new
:tmi.twitch.tv 004 previabot :-
:tmi.twitch.tv 375 previabot :-
:tmi.twitch.tv 372 previabot :You are in a maze of twisty passages, all alike.
:tmi.twitch.tv 376 previabot :>

解决办法

1. 修复IRC消息格式

Twitch IRC要求每条命令必须以\r\n结尾,原代码中发送私信的消息缺少这个结尾,导致服务器无法解析。修改enviar_key函数:

def enviar_key(s, usuario, mensagem):
    entrar(s)
    # 添加\r\n结尾,符合IRC协议要求
    montarMSG = f'PRIVMSG jtv :/w {usuario} {mensagem}\r\n'
    s.send(montarMSG.encode('utf-8'))
    fecharSocket(s)
    sys.exit()

2. 添加PING/PONG心跳处理

Twitch会定期发送PING指令检测连接状态,如果机器人不回复PONG,连接会被强制断开。在entrar函数中添加处理逻辑:

def entrar(s):
    readbuffer = ""
    Loading = True
    while Loading:
        readbuffer = readbuffer + s.recv(1024).decode()
        temp = readbuffer.split('\n')
        readbuffer = temp.pop()
        for line in temp:
            print(line)
            # 响应PING命令,维持连接
            if line.strip().startswith('PING'):
                pong_msg = line.replace('PING', 'PONG') + '\r\n'
                s.send(pong_msg.encode('utf-8'))
            Loading = terminou(line)

3. 检查私信权限

Twitch默认限制陌生人发送私信,需满足以下任一条件:

  • 目标用户已关注你的机器人账号
  • 机器人曾在目标用户的频道中发送过公开消息
  • 确保机器人账号未被目标用户拉黑或屏蔽

4. 验证账号信息准确性

  • 确认USER是机器人的准确昵称(建议小写,Twitch IRC对大小写不敏感但需保持一致)
  • 确认PASS是有效的OAuth令牌,必须包含发送消息的权限

修改后的完整代码

import socket
import sys

HOST = 'irc.twitch.tv'
PORT = 6667
USER = 'bot name'  # 替换为机器人实际昵称
PASS = 'oauth:xxxxxxxxxx'  # 替换为有效OAuth令牌
CHAN = 'channel here'  # 替换为要加入的频道名称

def abrirSocket():
    s = socket.socket()
    s.connect((HOST, PORT))
    message = "PASS " + PASS + "\r\n"
    s.send(message.encode('utf-8'))
    message = "NICK " + USER + "\r\n"
    s.send(message.encode('utf-8'))
    message = "JOIN #" + CHAN + "\r\n"
    s.send(message.encode('utf-8'))
    return s

def fecharSocket(s):
    s.close()

def entrar(s):
    readbuffer = ""
    Loading = True
    while Loading:
        readbuffer = readbuffer + s.recv(1024).decode()
        temp = readbuffer.split('\n')
        readbuffer = temp.pop()
        for line in temp:
            print(line)
            if line.strip().startswith('PING'):
                pong_msg = line.replace('PING', 'PONG') + '\r\n'
                s.send(pong_msg.encode('utf-8'))
            Loading = terminou(line)

def terminou(line):
    return not "End of /NAMES list" in line

def enviar_key(s, usuario, mensagem):
    entrar(s)
    montarMSG = f'PRIVMSG jtv :/w {usuario} {mensagem}\r\n'
    s.send(montarMSG.encode('utf-8'))
    fecharSocket(s)
    sys.exit()

enviar_key(abrirSocket(), "margoni_", "aaaaa")

内容的提问来源于stack exchange,提问作者Margoni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:31:43