function handle_data($data, $is_sock = False, $auth = False, $exec = False) { global $buckets; global $alias_locks; global $dest_overrides; global $admin_accounts; global $admin_data; global $admin_is_sock; global $admin_aliases; global $exec_errors; global $exec_list; global $throttle_time; global $ignore_list; if ($auth == False) { echo "[33m" . date("Y-m-d H:i:s", microtime(True)) . " > [0m{$data}"; handle_errors($data); } else { term_echo("*** auth = true"); } $items = parse_data($data); if ($items !== False) { write_out_buffer_data($items); if ($items["destination"] == DEBUG_CHAN) { return; } if ($auth == False and $is_sock == True) { log_items($items); } if (in_array($items["nick"], $ignore_list) == True) { return; } if (isset($buckets[BUCKET_IGNORE_NEXT]) == True and $items["nick"] == get_bot_nick()) { unset($buckets[BUCKET_IGNORE_NEXT]); return; } if ($items["prefix"] == IRC_HOST and strpos(strtolower($items["trailing"]), "throttled") !== False) { term_echo("*** THROTTLED BY SERVER - REFUSING ALL OUTGOING MESSAGES TO SERVER FOR " . THROTTLE_LOCKOUT_TIME . " SECONDS ***"); $throttle_time = microtime(True); return; } if ($items["cmd"] == 330) { authenticate($items); } if ($items["cmd"] == 376) { dojoin(INIT_CHAN_LIST); } if ($items["cmd"] == "NOTICE" and $items["nick"] == "NickServ" and $items["trailing"] == NICKSERV_IDENTIFY_PROMPT) { if (file_exists(PASSWORD_FILE) == True and NICKSERV_IDENTIFY === "1") { rawmsg("NickServ IDENTIFY " . trim(file_get_contents(PASSWORD_FILE)), True); } startup(); } $args = explode(" ", $items["trailing"]); if (in_array($args[0], $admin_aliases) == True or has_account_list($args[0]) == True) { if ($auth == False and $is_sock == True) { term_echo("authenticating \"" . $args[0] . "\"..."); $admin_data = $items["data"]; $admin_is_sock = $is_sock; rawmsg("WHOIS " . $items["nick"]); return; } } $alias = $args[0]; handle_events($items); switch ($alias) { case ALIAS_ADMIN_NICK: if (count($args) == 2) { rawmsg(":" . get_bot_nick() . " NICK :" . trim($args[1])); set_bot_nick(trim($args[1])); } break; case ALIAS_ADMIN_QUIT: if (count($args) == 1) { write_out_buffer_command($items, "quit"); process_scripts($items, ALIAS_QUIT); } break; case ALIAS_ADMIN_PS: if (count($args) == 1) { write_out_buffer_command($items, "ps"); ps($items); } break; case ALIAS_ADMIN_KILL: if (count($args) == 2) { write_out_buffer_command($items, "kill"); kill($items, $args[1]); } break; case ALIAS_ADMIN_KILLALL: if (count($args) == 1) { write_out_buffer_command($items, "killall"); killall($items); } break; case ALIAS_LIST: if (check_nick($items, $alias) == True) { if (count($args) == 1) { write_out_buffer_command($items, "list"); get_list($items); } } break; case ALIAS_LIST_AUTH: if (check_nick($items, $alias) == True) { if (count($args) == 1) { write_out_buffer_command($items, "listauth"); get_list_auth($items); } } break; case ALIAS_LOCK: if (check_nick($items, $alias) == True) { if (count($args) == 2) { write_out_buffer_command($items, "lock"); $alias_locks[$items["nick"]][$items["destination"]] = $args[1]; privmsg($items["destination"], $items["nick"], "alias \"" . $args[1] . "\" locked for nick \"" . $items["nick"] . "\" in \"" . $items["destination"] . "\""); } else { privmsg($items["destination"], $items["nick"], "syntax: " . ALIAS_LOCK . " <alias>"); } } break; case ALIAS_UNLOCK: if (check_nick($items, $alias) == True and isset($alias_locks[$items["nick"]][$items["destination"]]) == True) { write_out_buffer_command($items, "unlock"); privmsg($items["destination"], $items["nick"], "alias \"" . $alias_locks[$items["nick"]][$items["destination"]] . "\" unlocked for nick \"" . $items["nick"] . "\" in \"" . $items["destination"] . "\""); unset($alias_locks[$items["nick"]][$items["destination"]]); } break; case ALIAS_ADMIN_DEST_OVERRIDE: if (count($args) == 2) { write_out_buffer_command($items, "dest_override"); privmsg($items["destination"], $items["nick"], "destination override \"" . $args[1] . "\" set for nick \"" . $items["nick"] . "\" in \"" . $items["destination"] . "\""); $dest_overrides[$items["nick"]][$items["destination"]] = $args[1]; } else { privmsg($items["destination"], $items["nick"], "syntax: " . ALIAS_ADMIN_DEST_OVERRIDE . " <dest>"); } break; case ALIAS_ADMIN_DEST_CLEAR: if (isset($dest_overrides[$items["nick"]][$items["destination"]]) == True) { write_out_buffer_command($items, "dest_clear"); $override = $dest_overrides[$items["nick"]][$items["destination"]]; unset($dest_overrides[$items["nick"]][$items["destination"]]); privmsg($items["destination"], $items["nick"], "destination override \"{$override}\" cleared for nick \"" . $items["nick"] . "\" in \"" . $items["destination"] . "\""); } break; case ALIAS_ADMIN_IGNORE: if (count($args) == 2) { if (in_array($args[1], $ignore_list) == False) { write_out_buffer_command($items, "ignore"); privmsg($items["destination"], $items["nick"], get_bot_nick() . " set to ignore " . $args[1]); $ignore_list[] = $args[1]; if (file_put_contents(IGNORE_FILE, implode("\n", $ignore_list)) === False) { privmsg($items["destination"], $items["nick"], "error saving ignore file"); } } } else { privmsg($items["destination"], $items["nick"], "syntax: " . ALIAS_ADMIN_IGNORE . " <nick>"); } break; case ALIAS_ADMIN_UNIGNORE: if (count($args) == 2) { if (in_array($args[1], $ignore_list) == True) { $i = array_search($args[1], $ignore_list); if ($i !== False) { write_out_buffer_command($items, "unignore"); privmsg($items["destination"], $items["nick"], get_bot_nick() . " set to listen to " . $args[1]); unset($ignore_list[$i]); $ignore_list = array_values($ignore_list); if (file_put_contents(IGNORE_FILE, implode("\n", $ignore_list)) === False) { privmsg($items["destination"], $items["nick"], "error saving ignore file"); } } else { privmsg($items["destination"], $items["nick"], $args[1] . " not found in " . get_bot_nick() . " ignore list"); } } } else { privmsg($items["destination"], $items["nick"], "syntax: " . ALIAS_ADMIN_UNIGNORE . " <nick>"); } break; case ALIAS_ADMIN_LIST_IGNORE: if (count($ignore_list) > 0) { write_out_buffer_command($items, "ignorelist"); privmsg($items["destination"], $items["nick"], get_bot_nick() . " ignore list: " . implode(", ", $ignore_list)); } else { privmsg($items["destination"], $items["nick"], get_bot_nick() . " isn't ignoring anyone"); } break; case ALIAS_ADMIN_REHASH: if (count($args) == 1) { if (exec_load() === False) { privmsg($items["destination"], $items["nick"], "error reloading exec file"); doquit(); } else { write_out_buffer_command($items, "rehash"); process_exec_helps(); process_exec_inits(); process_exec_startups(); $users = get_users(); foreach ($users[get_bot_nick()]["channels"] as $channel => $timestamp) { rawmsg("NAMES {$channel}"); } privmsg($items["destination"], $items["nick"], "successfully reloaded exec file (" . count($exec_list) . " aliases)"); } } break; case ALIAS_ADMIN_BUCKETS_DUMP: if (count($args) == 1) { write_out_buffer_command($items, "buckets_dump"); buckets_dump($items); } break; case ALIAS_ADMIN_BUCKETS_SAVE: if (count($args) == 1) { write_out_buffer_command($items, "buckets_save"); buckets_save($items); } break; case ALIAS_ADMIN_BUCKETS_LOAD: if (count($args) == 1) { write_out_buffer_command($items, "buckets_load"); buckets_load($items); } break; case ALIAS_ADMIN_BUCKETS_FLUSH: if (count($args) == 1) { write_out_buffer_command($items, "buckets_flush"); buckets_flush($items); } break; case ALIAS_ADMIN_BUCKETS_LIST: if (count($args) == 1) { write_out_buffer_command($items, "buckets_list"); buckets_list($items); } break; case ALIAS_INTERNAL_RESTART: if (count($args) == 1 and $items["cmd"] == CMD_INTERNAL) { define("RESTART", True); process_scripts($items, ALIAS_QUIT); } break; case ALIAS_ADMIN_RESTART: if (count($args) == 1) { write_out_buffer_command($items, "restart"); define("RESTART", True); process_scripts($items, ALIAS_QUIT); } break; case ALIAS_ADMIN_EXEC_CONFLICTS: if (count($args) == 1) { # TODO # $admin_aliases $reserved_aliases } break; case ALIAS_ADMIN_EXEC_LIST: if (count($args) == 1) { # TODO } break; case ALIAS_ADMIN_EXEC_TIMERS: if (count($args) == 1) { # TODO } break; case ALIAS_ADMIN_EXEC_ERRORS: if (count($args) == 1) { $n = count($exec_errors); if ($n > 0) { write_out_buffer_command($items, "exec_load_errors"); privmsg($items["destination"], $items["nick"], "exec load errors:"); $i = 0; foreach ($exec_errors as $filename => $messages) { if ($i == $n - 1) { privmsg($items["destination"], $items["nick"], " └─" . $filename); for ($j = 0; $j < count($messages); $j++) { if ($j == count($messages) - 1) { privmsg($items["destination"], $items["nick"], " └─" . $messages[$j]); } else { privmsg($items["destination"], $items["nick"], " ├─" . $messages[$j]); } } } else { privmsg($items["destination"], $items["nick"], " ├─" . $filename); for ($j = 0; $j < count($messages); $j++) { if ($j == count($messages) - 1) { privmsg($items["destination"], $items["nick"], " │ └─" . $messages[$j]); } else { privmsg($items["destination"], $items["nick"], " │ ├─" . $messages[$j]); } } } $i++; } } else { privmsg($items["destination"], $items["nick"], "no errors"); } } break; default: process_scripts($items, ""); # execute scripts occurring for a specific alias process_scripts($items, ALIAS_ALL); # process scripts occuring for every line (* alias) } } }
continue; } term_echo($bot_nick . " >> " . $data); $items = parse_data($data); if ($items === False) { continue; } if ($items["cmd"] == 376) { if (isset($parts[2]) == True) { term_echo("joining \"" . $parts[2] . "\"..."); dojoin($parts[2]); } else { term_echo("joining \"{$dest}\"..."); dojoin($dest); term_echo("joining \"#\"..."); dojoin("#"); } } if ($items["cmd"] == "QUIT" and $items["nick"] == $bot_nick) { term_echo("*** QUITTING {$bot_nick} CLIENT SCRIPT"); return; } if ($forward !== False) { switch ($items["cmd"]) { case "PRIVMSG": $msg = chr(3) . "03" . $items["nick"] . chr(3) . " [" . chr(3) . "02" . $items["destination"] . chr(3) . "] " . chr(3) . "05" . $items["trailing"]; echo "/IRC PRIVMSG {$forward} :{$msg}\n"; break; default: $msg = $items["data"]; echo "/IRC PRIVMSG {$forward} :{$msg}\n";