如何使用Python代码向Twitch仅粉丝可见聊天室发送消息?
解决方案
核心原因
Twitch的仅粉丝可见/仅订阅可见等受限聊天室,依赖IRC扩展能力做权限校验,你当前的代码没有申请Twitch专属IRC能力、且未等待聊天室加入确认就直接发消息,是消息发送失败的核心原因。
需要修改的内容
- 首先确认前置条件:你的账号已经关注对应频道(仅粉丝聊天室要求发送者是频道粉丝,频道主本人无需关注),且生成OAuth令牌时已授予
chat:edit、chat:read权限。 - 连接完成发送PASS、NICK命令后,需要额外发送Twitch IRC能力请求命令,告知服务器你需要使用受限聊天室相关的扩展能力。
- 发送JOIN命令后不要立刻发消息,先监听服务器返回的响应,直到收到明确的JOIN成功报文后再发送私聊消息。
- 增加PING报文响应逻辑,避免连接被Twitch服务器主动断开。
修改后代码示例
import socket import socks channel = 'some_channel' name = 'some_nickname' oauthtoken = 'oauth:sometoken123456' message = 'hello chat' s = socks.socksocket(socket.AF_INET, socket.SOCK_STREAM) s.connect(("irc.chat.twitch.tv" , 6667)) s.send(f"PASS {oauthtoken}\r\n".encode()) s.send(f"NICK {name}\r\n".encode()) # 新增:申请Twitch IRC扩展能力 s.send(b"CAP REQ :twitch.tv/commands\r\n") s.send(b"CAP REQ :twitch.tv/tags\r\n") # 发送加入请求 join = f"JOIN #{channel}\r\n" s.send(join.encode()) # 等待加入成功确认 joined = False while not joined: resp = s.recv(4096).decode('utf-8') print(resp) # 处理PING保活 if resp.startswith("PING"): s.send(f"PONG {resp.split()[1]}\r\n".encode()) continue # 检查是否加入成功 if f"JOIN #{channel}" in resp: joined = True # 加入成功后再发消息 message = f"PRIVMSG #{channel} :{message}\r\n" s.send(message.encode()) # 可选:接收发送后的响应 final_resp = s.recv(4096).decode('utf-8') print(final_resp)
内容的提问来源于stack exchange,提问作者OPhone
相关产品推荐
相关产品推荐

