【问题标题】:Connect to Twitch IRC chat连接到 Twitch IRC 聊天
【发布时间】:2015-07-18 13:41:26
【问题描述】:

您好,我已尝试连接到 Twitch IRC 聊天,因此我可以尝试为 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,如果有人可以帮助我,我将不胜感激! :)

【问题讨论】:

    标签: php sockets irc twitch


    【解决方案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 "[&gt;] " . $data 这对我不起作用。你能告诉我为什么吗?
    • 你在echoo [&gt;]中有一个错误...它的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 "[&gt;] " . $data 这对我不起作用。你能告诉我为什么吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多