Подключиться к Twitch IRC-чату

Здравствуйте, я пытался подключиться к Twitch IRC Chat, поэтому я могу попытаться сделать простого чат-бота для дергаться, но я изо всех сил пытаюсь заставить его работать.

Ошибка я получаю: 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. Пожалуйста, если кто-то может мне помочь, это было бы очень признательно! 🙂

3

Решение

Я знаю, что об этом спросили Мэнни много лет назад, но, возможно, может помочь кому-то еще сегодня:

<?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 и тому «\ Г \ п» добавить к командной строке.

1

Другие решения

В вашем IRC() функция, которую вы объявили $server, но не помечен как глобальная переменная, поэтому он недоступен в SendData(...),

SendData(...) затем смотрит на глобальную версию $server, обнаруживает, что у него нет элемента массива с именем connect, так что возвращает ноль, откуда исходит ваша ошибка.

Добавить global $server; до $server = array();, и попробуй еще раз.

Во-вторых, я думаю, что возврат строки должен быть \r\n вместо \n\r, но я не уверен — это будет зависеть от того, насколько строгим является IRC-сервер.

0

По вопросам рекламы [email protected]