连接到 Twitch IRC 聊天
Posted
技术标签:
【中文标题】连接到 Twitch IRC 聊天【英文标题】:Connect to Twitch IRC chat 【发布时间】:2015-07-18 13:41:26 【问题描述】:您好,我已尝试,因此我可以尝试为 twitch 制作一个简单的聊天机器人,但我正在努力使其工作。
我得到错误:http://puu.sh/j3HwK/173a0388fb.png
这里是代码:
<?php
set_time_limit(0);
ini_set('display_errors', 'on');
function IRCBot()
function IRC()
$config = array(
'server' => 'irc.twitch.tv',
'port' => 6667,
'channel' => '#spiritboar',
'name' => 'bin4rybot',
'nick' => 'Bin4ryBOT',
'pass' => 'oauth:##########################' //http://twitchapps.com/tmi/
);
echo 'test';
$server = array();
$server['connect'] = fsockopen($config['server'], $config['port']);
if($server['connect'])
echo 'test2';
SendData("PASS " . $config['pass'] . "\n\r");
SendData("NICK " . $config['nick'] . "\n\r");
SendData("USER " . $config['nick'] . "\n\r");
SendData("JOIN " . $config['channel'] . "\n\r");
while(!feof($server['connect']))
echo 'test3';
function SendData($cmd)
global $server;
fwrite($server['connect'], $cmd, strlen($cmd));
echo "[SEND] $cmd <br>";
IRC();
IRCBot();
?>
所以基本上我无法让它连接到 Twitch IRC,如果有人可以帮助我,我将不胜感激! :)
【问题讨论】:
【参考方案1】:我知道很多年前有人问过这个问题,但今天也许可以帮助其他人:
<?php
set_time_limit(0);
ini_set('display_errors', 'on');
$server = array();
function IRCBot()
function IRC()
$server global;
$config = array(
'server' => 'ssl://irc.chat.twitch.tv',
'port' => 6697,
'channel' => '#twitch_channel',
'nick' => strtolower('twitch_username'),
'pass' => 'oauth:twitch_oauth_token' //http://twitchapps.com/tmi/
);
$server['connect'] = @fsockopen($config['server'], $config['port']);
if($server['connect'])
echo "[<] Starting connection with user: " . $config['nick'];
SendData('CAP REQ :twitch.tv/tags');
SendData('CAP REQ :twitch.tv/commands');
SendData('CAP REQ :twitch.tv/membership');
SendData("PASS " . $config['pass']);
SendData("NICK " . $config['nick']);
SendData("USER " . $config['nick'] . " 1 1 :" . $config['nick']);
SendData("JOIN " . $config['channel']);
while(!feof($server['connect']))
$server['READ_BUFFER'] = fgets($server['connect'], 1024);
echo "[>] " . $server['READ_BUFFER'];
flush();
function SendData($cmd)
global $server;
@fwrite($server['connect'], $cmd . "\r\n");
echo "[<] $cmd \r\n";
IRC();
IRCBot();
除了发送到 twitch 的命令格式之外,最需要注意的是 SendData 函数 不发送 strlen 在 fwrite 函数和 "\r\n" 附加到命令字符串。
【讨论】:
感谢脚本。我已经输入了我的凭据.. 除了聊天消息列表之外,一切正常。$data = fgets($server['connect'],256); echoo "[>] " . $data
这对我不起作用。你能告诉我为什么吗?
你在echoo [>]
中有一个错误...它的echo...并且消息的长度不同(256而不是1024) idk 如果这会影响 twitch 的答案,但也许你的错误可能在那里
我必须将第 10 行更改为 global $server;
才能使其正常工作。【参考方案2】:
在您的IRC()
函数中,您已声明$server
,但未将其标记为全局变量,因此它在SendData(...)
中不可用。
SendData(...)
然后查看$server
的全局版本,发现它没有一个名为connect
的数组元素,所以返回null,这就是你的错误来自哪里。
在$server = array();
之前添加global $server;
,然后重试。
作为第二点,我认为线路返回需要是\r\n
而不是\n\r
,但我不确定 - 这将取决于 IRC 服务器的严格程度。
【讨论】:
感谢脚本的更新。我已经输入了我的凭据.. 除了聊天消息列表之外,一切正常。$data = fgets($server['connect'],256); echoo "[>] " . $data
这对我不起作用。你能告诉我为什么吗?以上是关于连接到 Twitch IRC 聊天的主要内容,如果未能解决你的问题,请参考以下文章