Skip to content

Instantly share code, notes, and snippets.

@appnus
Last active April 17, 2022 10:25
Show Gist options
  • Save appnus/7ca48023a67c5611e20f to your computer and use it in GitHub Desktop.
Save appnus/7ca48023a67c5611e20f to your computer and use it in GitHub Desktop.
PHP Twitch Chat Client
#!/usr/bin/env php
<?php error_reporting(E_ALL); set_time_limit(0);
if (php_sapi_name() !== "cli" || $argc < 4) {
echo "Usage: php ", $argv[0], " [nickname] [password] [#channel]";
exit(1);
}
$host = "irc.twitch.tv";
$ip = gethostbyname($host);
$port = 6667;
$regex = "/:(.*)\!(.*)\@(.*)\.tmi\.twitch\.tv PRIVMSG #(.*) :(.*)/s";
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or exit(socket_strerror(socket_last_error()));
socket_connect($socket, $ip, $port) or exit(socket_strerror(socket_last_error()));
send($socket, "PASS {$argv[2]}\n");
send($socket, "NICK {$argv[1]}\n");
send($socket, "JOIN {$argv[3]}\n");
echo PHP_EOL;
while ($buffer = socket_read($socket, 1024)) {
if (empty($buffer)) {
break;
}
if (preg_match($regex, $buffer)) {
preg_match_all($regex, $buffer, $matches);
if (strtoupper(substr(PHP_OS, 0, 3)) !== "WIN") {
echo "\033[0;36m", $matches[1][0], "\033[37m: ", $matches[5][0];//, PHP_EOL;
} else {
echo $matches[1][0], ": ", $matches[5][0];//, PHP_EOL;
}
echo "--------------------------------------------------------------------------------", PHP_EOL;
}
if ($buffer === "PING") {
send($socket, "PONG\n");
}
}
socket_close($socket);
function send ($socket, $buffer) {
socket_write($socket, $buffer, strlen($buffer)) or exit(socket_strerror(socket_last_error()));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment