Call this v1.5.0
This commit is contained in:
parent
5775da3165
commit
68770cff9e
@ -60,6 +60,12 @@ Read-Write access for working directory
|
||||
|
||||
|
||||
#### Changelog
|
||||
* v1.5.0:
|
||||
* Polishing up, adding some last minute fixes.
|
||||
* Tweaks on irc.php
|
||||
* Reconstruct socket chunk parsing, allows for more thorough IRC parsing capability
|
||||
* Fix /help missing /msg command.
|
||||
|
||||
* v1.4.1:
|
||||
* Fix usleep bug where irc.php sleeps for less than a millisecond (lol)
|
||||
|
||||
|
20
dark.css
20
dark.css
@ -141,17 +141,17 @@ input, button, select, textarea{
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
#msgs tr:nth-child(even) { background-color: #454545; }
|
||||
#msgs tr:nth-child(odd) { background-color: #323232; }
|
||||
#msgs td:nth-child(even) { width: 80%; }
|
||||
#msgs td:nth-child(odd) { width: 20%; min-width: 120px; max-width: 210px; }
|
||||
#msgs td { padding: 4px; border-radius: 4px; }
|
||||
#msgs tr:nth-child(even) { background-color: #333333; }
|
||||
#msgs tr:nth-child(odd) { background-color: #262626; }
|
||||
#msgs td:nth-child(even) { width: 100%; }
|
||||
#msgs td:nth-child(odd) { min-width: 120px; }
|
||||
#msgs td { padding: 0px 4px 0px 4px; border-radius: 3px; }
|
||||
|
||||
#logmsgs tr:nth-child(even) { background-color: #454545; }
|
||||
#logmsgs tr:nth-child(odd) { background-color: #323232; }
|
||||
#logmsgs td:nth-child(even) { width: 80%; }
|
||||
#logmsgs td:nth-child(odd) { width: 20%; min-width: 120px; max-width: 180px; }
|
||||
#logmsgs td { padding: 4px; border-radius: 4px; }
|
||||
#logmsgs tr:nth-child(even) { background-color: #333333; }
|
||||
#logmsgs tr:nth-child(odd) { background-color: #262626; }
|
||||
#logmsgs td:nth-child(even) { width: 100%; }
|
||||
#logmsgs td:nth-child(odd) { min-width: 120px; }
|
||||
#logmsgs td { padding: 0px 4px 0px 4px; border-radius: 3px; }
|
||||
|
||||
#footer {
|
||||
text-align: center;
|
||||
|
156
irc.php
156
irc.php
@ -54,25 +54,35 @@ if(!isset($username) || $username == "") {
|
||||
// Create a socket to use
|
||||
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
|
||||
|
||||
// Send first packets to client to inform connection
|
||||
$socketFileContents = file_get_contents("users/$username.log"); // get current log contents
|
||||
$msgline = "<tr><td class='userinfo'><span style='color:$ipcolor;'>" . $server_address . "</span> ~ </td><td>Connecting to $server_address:$server_port... please wait a few</td></tr>\n";
|
||||
file_put_contents("users/$username.log", $socketFileContents . $msgline);
|
||||
|
||||
// Connect to IRC server via socket above
|
||||
socket_connect($socket, $server_address, $server_port);
|
||||
|
||||
sleep(2);
|
||||
|
||||
// NICK and USER calls to IRC
|
||||
$nickline = "NICK " . $usernickname . "\n";
|
||||
$userline = "USER " . $usernickname . " 0 * :" . $username . "'s $title $version client\n";
|
||||
|
||||
// Pass NICK and USER back to IRC server over socket
|
||||
socket_write($socket, $nickline, strlen($nickline));
|
||||
// Sleep for a second before sending USER lineage
|
||||
sleep(1);
|
||||
// SEND IT
|
||||
socket_write($socket, $userline, strlen($userline));
|
||||
|
||||
sleep(1);
|
||||
//sleep(1);
|
||||
|
||||
// Continue the rest of the script here
|
||||
// While script will continue as long as socket continues to be active
|
||||
while($bytes = socket_recv($socket, $r_data, 3068, MSG_DONTWAIT) !== '') {
|
||||
while($bytes = socket_recv($socket, $r_data, 3096, MSG_DONTWAIT) !== '') {
|
||||
if($bytes !== FALSE) {
|
||||
//$data = socket_read($socket, 2048, PHP_NORMAL_READ);
|
||||
$data = $r_data;
|
||||
$packetdata = $r_data;
|
||||
}
|
||||
|
||||
// If client sent something, push it to the IRC server!
|
||||
@ -89,7 +99,7 @@ while($bytes = socket_recv($socket, $r_data, 3068, MSG_DONTWAIT) !== '') {
|
||||
if(!file_exists("users/.$username.pingfile")) { // If file is missing, quit
|
||||
// Debug logging, check if IRC is exiting properly
|
||||
doLog("Exiting, $username logged out...");
|
||||
$quitline = "QUIT :$username toggled disconnect; webirc\n"; // IRC QUIT line
|
||||
$quitline = "QUIT :$username toggled disconnect; $title $version\n"; // IRC QUIT line
|
||||
socket_write($socket, $quitline, strlen($quitline)); // Push to socket
|
||||
socket_close($socket); // Close the socket
|
||||
exit(0); // Exit the script, nothing to do.
|
||||
@ -97,76 +107,86 @@ while($bytes = socket_recv($socket, $r_data, 3068, MSG_DONTWAIT) !== '') {
|
||||
|
||||
// If data variable is set and buffer has data to recieve
|
||||
// RECIEVE IT!
|
||||
if(isset($data)) { // If data variable is set, there's data from socket
|
||||
$stringMsg = explode('PRIVMSG', $data); // Strip IRC commands
|
||||
// Get original contents from socket
|
||||
$socketFileContents = file_get_contents("users/$username.log");
|
||||
$ex = explode(' ', $data);
|
||||
$data = htmlentities($data);
|
||||
if(isset($packetdata)) { // If data variable is set, there's data from socket
|
||||
doLog("Server received chunk: $packetdata");
|
||||
|
||||
// Send PONG back to the server
|
||||
if ($ex[0] == "PING") {
|
||||
// Log pong
|
||||
doLog("PONG, $username response...");
|
||||
$pongline = "PONG " . $ex[1] . "\n"; // PONG IRC CMD
|
||||
// Push to IRC server via socket.
|
||||
socket_write($socket, $pongline, strlen($pongline));
|
||||
} else if ($ex[1] == "PART") {
|
||||
$senderNick = get_string_between($data, ":", "!");
|
||||
$senderIp = get_string_between($data, "@", " ");
|
||||
$exitMsg = explode('PART', $data);
|
||||
$msgline = "<tr><td class='userinfo'><b>$senderNick</b><br /><span style='color:$ipcolor;'>$senderIp</span></td><td> left " . stripslashes(trim($exitMsg[1])) . "</td></tr>";
|
||||
file_put_contents("users/$username.log", $socketFileContents . $msgline);
|
||||
} else if ($ex[1] == "JOIN") {
|
||||
$senderNick = get_string_between($data, ":", "!");
|
||||
$senderIp = get_string_between($data, "@", " ");
|
||||
if($senderNick != $usernickname) {
|
||||
$msgline = "<tr><td class='userinfo'><b>$senderNick</b><br /><span style='color:$ipcolor;'>$senderIp</span></td><td> joined the channel</td></tr>\n";
|
||||
file_put_contents("users/$username.log", $socketFileContents . $msgline);
|
||||
} else {
|
||||
$msgline = "<tr><td class='userinfo'><span style='color:$ipcolor;'>" . $server_address . "</span> ~ </td><td> " . $data . "</td></tr>\n";
|
||||
file_put_contents("users/$username.log", $socketFileContents . $msgline);
|
||||
}
|
||||
} else if ($ex[1] == "NICK") {
|
||||
$senderNick = get_string_between($data, ":", "!");
|
||||
$senderIp = get_string_between($data, "@", " ");
|
||||
$nickMsg = explode('NICK', $data);
|
||||
$msgline = "<tr><td class='userinfo'><b>$senderNick</b><br /><span style='color:$ipcolor;'>$senderIp</span></td><td> $senderNick is now known as" . trim($nickMsg[1]) . "</td></tr>\n";
|
||||
file_put_contents("users/$username.log", $socketFileContents . $msgline);
|
||||
} else if ($ex[1] == "QUIT") {
|
||||
$senderNick = get_string_between($data, ":", "!");
|
||||
$senderIp = get_string_between($data, "@", " ");
|
||||
$quitMsg = explode('QUIT :', $data);
|
||||
$msgline = "<tr><td class='userinfo'><span style='color:$ipcolor;'>$server_address</span> ~</td><td> $senderNick left: " . trim($quitMsg[1]) . "</td></tr>\n";
|
||||
file_put_contents("users/$username.log", $socketFileContents . $msgline);
|
||||
} else if ($ex[2] == $usernickname && $ex[1] == "PRIVMSG") {
|
||||
$senderNick = get_string_between($data, ":", "!");
|
||||
$senderIp = get_string_between($data, "@", " ");
|
||||
$privMsg = explode($usernickname . " :", $stringMsg[1]);
|
||||
file_put_contents("users/.$username.pmed", "$senderNick");
|
||||
$msgline = "<tr><td class='userinfo'>PM from: <b>$senderNick</b><br /><span style='color:$ipcolor;'>$senderIp</span></td><td> " . htmlentities(stripslashes(trim($privMsg[1]))) . "</td></tr>\n";
|
||||
file_put_contents("users/$username.log", $socketFileContents . $msgline);
|
||||
$msg = "";
|
||||
} else if ($stringMsg[1] != "") {
|
||||
$senderNick = get_string_between($data, ":", "!");
|
||||
$senderIp = get_string_between($data, "@", " ");
|
||||
$channel = explode(" :", $stringMsg[1]);
|
||||
$msg = explode($channel[0] . " :", $stringMsg[1]);
|
||||
$lines = explode("\r\n", $packetdata);
|
||||
|
||||
$msgline = "<tr><td class='userinfo'><b>$senderNick</b>:" . $channel[0] . "<br /><span style='color:$ipcolor;'>$senderIp</span></td><td> " . htmlentities(stripslashes(trim($msg[1]))) . "</td></tr>";
|
||||
if(usernameInMsg($usernickname, $msg[1])==true) {
|
||||
file_put_contents("users/.$username.mentioned", "$senderNick");
|
||||
}
|
||||
foreach($lines as $data) {
|
||||
if($data == "") { continue; }
|
||||
|
||||
file_put_contents("users/$username.log", $socketFileContents . $msgline);
|
||||
} else if ($ex[0] != "PING") {
|
||||
$msgline = "<tr><td class='userinfo'><span style='color:$ipcolor;'>" . $server_address . "</span> ~ </td><td> " . $data . "</td></tr>\n";
|
||||
file_put_contents("users/$username.log", $socketFileContents . $msgline);
|
||||
}
|
||||
doLog("Line: $data");
|
||||
|
||||
$socketFileContents = file_get_contents("users/$username.log");
|
||||
$stringMsg = explode('PRIVMSG', $data); // Strip IRC commands
|
||||
$ex = explode(' ', $data);
|
||||
$data = htmlentities($data);
|
||||
|
||||
// Send PONG back to the server
|
||||
if ($ex[0] == "PING") {
|
||||
// Log pong
|
||||
doLog("PONG, $username response...");
|
||||
$pongline = "PONG " . $ex[1] . "\n"; // PONG IRC CMD
|
||||
// Push to IRC server via socket.
|
||||
socket_write($socket, $pongline, strlen($pongline));
|
||||
} else if ($ex[1] == "PART") {
|
||||
$senderNick = get_string_between($data, ":", "!");
|
||||
$senderIp = get_string_between($data, "@", " ");
|
||||
$exitMsg = explode('PART', $data);
|
||||
$msgline = "<tr><td class='userinfo'><b>$senderNick</b><br /><span style='color:$ipcolor;'>$senderIp</span></td><td> left " . stripslashes(trim($exitMsg[1])) . "</td></tr>";
|
||||
file_put_contents("users/$username.log", $socketFileContents . $msgline);
|
||||
} else if ($ex[1] == "JOIN") {
|
||||
$senderNick = get_string_between($data, ":", "!");
|
||||
$senderIp = get_string_between($data, "@", " ");
|
||||
$joinChannel = explode("JOIN :", $data);
|
||||
if($senderNick != $usernickname) {
|
||||
$msgline = "<tr><td class='userinfo'><b>$senderNick</b><br /><span style='color:$ipcolor;'>$senderIp</span></td><td> joined " . $joinChannel[1] . "</td></tr>\n";
|
||||
file_put_contents("users/$username.log", $socketFileContents . $msgline);
|
||||
} else {
|
||||
$msgline = "<tr><td class='userinfo'><span style='color:$ipcolor;'>" . $server_address . "</span> ~ </td><td>Joining " . $joinChannel[1] . "</td></tr>\n";
|
||||
file_put_contents("users/$username.log", $socketFileContents . $msgline);
|
||||
}
|
||||
} else if ($ex[1] == "NICK") {
|
||||
$senderNick = get_string_between($data, ":", "!");
|
||||
$senderIp = get_string_between($data, "@", " ");
|
||||
$nickMsg = explode('NICK', $data);
|
||||
$msgline = "<tr><td class='userinfo'><b>$senderNick</b><br /><span style='color:$ipcolor;'>$senderIp</span></td><td> $senderNick is now known as" . trim($nickMsg[1]) . "</td></tr>\n";
|
||||
file_put_contents("users/$username.log", $socketFileContents . $msgline);
|
||||
} else if ($ex[1] == "QUIT") {
|
||||
$senderNick = get_string_between($data, ":", "!");
|
||||
$senderIp = get_string_between($data, "@", " ");
|
||||
$quitMsg = explode('QUIT :', $data);
|
||||
$msgline = "<tr><td class='userinfo'><span style='color:$ipcolor;'>$server_address</span> ~</td><td> $senderNick left: " . trim($quitMsg[1]) . "</td></tr>\n";
|
||||
file_put_contents("users/$username.log", $socketFileContents . $msgline);
|
||||
} else if ($ex[2] == $usernickname && $ex[1] == "PRIVMSG") {
|
||||
$senderNick = get_string_between($data, ":", "!");
|
||||
$senderIp = get_string_between($data, "@", " ");
|
||||
$privMsg = explode($usernickname . " :", $stringMsg[1]);
|
||||
file_put_contents("users/.$username.pmed", "$senderNick");
|
||||
$msgline = "<tr><td class='userinfo'>PM from: <b>$senderNick</b><br /><span style='color:$ipcolor;'>$senderIp</span></td><td> " . htmlentities(stripslashes(trim($privMsg[1]))) . "</td></tr>\n";
|
||||
file_put_contents("users/$username.log", $socketFileContents . $msgline);
|
||||
$msg = "";
|
||||
} else if ($stringMsg[1] != "") {
|
||||
$senderNick = get_string_between($data, ":", "!");
|
||||
$senderIp = get_string_between($data, "@", " ");
|
||||
$channel = explode(" :", $stringMsg[1]);
|
||||
$msg = explode($channel[0] . " :", $stringMsg[1]);
|
||||
|
||||
$msgline = "<tr><td class='userinfo'><b>$senderNick</b>:" . $channel[0] . "<span style='color:$ipcolor;font-size:9px;'>$senderIp</span></td><td> " . htmlentities(stripslashes(trim($msg[1]))) . "</td></tr>";
|
||||
if(usernameInMsg($usernickname, $msg[1])==true) {
|
||||
file_put_contents("users/.$username.mentioned", "$senderNick");
|
||||
}
|
||||
|
||||
file_put_contents("users/$username.log", $socketFileContents . $msgline);
|
||||
} else if ($ex[0] == ":$server_address") {
|
||||
$msgline = "<tr><td class='userinfo'><span style='color:$ipcolor;'>" . $server_address . "</span> ~ </td><td> " . $data . "</td></tr>\n";
|
||||
file_put_contents("users/$username.log", $socketFileContents . $msgline);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// second sleep to prevent insane CPU load
|
||||
usleep(500000);
|
||||
usleep(250000);
|
||||
}
|
||||
|
||||
?>
|
||||
|
10
light.css
10
light.css
@ -142,15 +142,15 @@ input, button, select, textarea{
|
||||
|
||||
#msgs tr:nth-child(even) { background-color: #bbbbbb; }
|
||||
#msgs tr:nth-child(odd) { background-color: #b1b1b1; }
|
||||
#msgs td:nth-child(even) { width: 80%; }
|
||||
#msgs td:nth-child(odd) { width: 20%; min-width: 120px; max-width: 210px; }
|
||||
#msgs td { padding: 4px; border-radius: 4px; }
|
||||
#msgs td:nth-child(even) { width: 100%; }
|
||||
#msgs td:nth-child(odd) { min-width: 120px; }
|
||||
#msgs td { padding: 0px 4px 0px 4px; border-radius: 3px; }
|
||||
|
||||
#logmsgs tr:nth-child(even) { background-color: #bbbbbb; }
|
||||
#logmsgs tr:nth-child(odd) { background-color: #b1b1b1; }
|
||||
#logmsgs td:nth-child(even) { width: 80%; }
|
||||
#logmsgs td:nth-child(odd) { width: 20%; min-width: 120px; max-width: 180px; }
|
||||
#logmsgs td { padding: 4px; border-radius: 4px; }
|
||||
#logmsgs td:nth-child(odd) { min-width: 120px;}
|
||||
#logmsgs td { padding: 0px 4px 0px 4px; border-radius: 3px; }
|
||||
|
||||
#footer {
|
||||
text-align: center;
|
||||
|
@ -143,6 +143,7 @@ if (isset($_GET['msg']) && $_GET['msg']!="" && isset($_GET['nick']) && $_GET['ni
|
||||
$logline .= "/rejoin (channel): Part, and join a channel; focused channel if none is specified<br />";
|
||||
$logline .= "/nick [nickname]: Change your nickname<br />";
|
||||
$logline .= "/list [channel]: List users in a channel<br />";
|
||||
$logline .= "/msg [channel|user] [msg]: Message channel, or PM 'user'<br />";
|
||||
$logline .= "/usermode [flag(s): Sets MODE flag(s) to user<br />";
|
||||
$logfile .= "/mode [channel] [flag(s)]: Sets MODE flag(s) for [channel]<br />";
|
||||
$logline .= "/channel: Prints focused channel / user (Alias: /focused)</td></tr>\n";
|
||||
|
2
version.php
Normal file → Executable file
2
version.php
Normal file → Executable file
@ -5,6 +5,6 @@
|
||||
// https://github.com/Pentium44/idleirc
|
||||
///////
|
||||
|
||||
$version = "1.4.1"; // IdleIRC version
|
||||
$version = "1.5.0"; // IdleIRC version
|
||||
|
||||
?>
|
||||
|
Loading…
x
Reference in New Issue
Block a user