diff --git a/irc_lib.php b/irc_lib.php index 67a38b8..10af6d3 100644 --- a/irc_lib.php +++ b/irc_lib.php @@ -1452,6 +1452,41 @@ function handle_311(&$items) ##################################################################################################### +function handle_302(&$items) +{ + # :irc.sylnt.us 302 crutchy :TheMightyBuzzard=+~TheMighty@Soylent/Staff/Developer/TMB crutchy=+~crutchy@119.18.0.66 chromas=-~chromas@0::1 + $trailing=strtolower(trim($items["trailing"])); + $parts=explode(" ",$trailing); + if (count($parts)<1) + { + term_echo("*** USERS: handle_302: invalid number of parts"); + return; + } + $users=get_users(); + for ($i=0;$i2) + { + term_echo("*** USERS: handle_302: invalid number of user_parts"); + continue; + } + $nick=$user_parts[0]; + $prefix_parts=explode("@",$user_parts[1]); + if (count($prefix_parts)<>2) + { + term_echo("*** USERS: handle_302: invalid number of prefix_parts"); + continue; + } + $hostname=$prefix_parts[1]; + term_echo("*** USERS: handle_302: nick=$nick, hostname=$hostname"); + $users[$nick]["hostname"]=$hostname; + } + set_users($users); +} + +##################################################################################################### + function handle_319(&$items) { $params=strtolower(trim($items["params"])); @@ -1633,6 +1668,9 @@ function handle_events(&$items) case "319": handle_319($items); break; + case "302": + handle_302($items); + break; case "330": handle_330($items); break; diff --git a/scripts/lib_buckets.php b/scripts/lib_buckets.php index 7b0f4d3..43dd215 100644 --- a/scripts/lib_buckets.php +++ b/scripts/lib_buckets.php @@ -251,7 +251,7 @@ function bucket_read($cmd,$index="") ##################################################################################################### -function set_bucket($index,$data,$timeout=5e6) +function set_bucket($index,$data,$timeout=5) { echo "/BUCKET_SET $index ".base64_encode($data).PHP_EOL; $t=microtime(True); diff --git a/scripts/sneak/data_client.php b/scripts/sneak/data_client.php index eae8d09..8a2e338 100644 --- a/scripts/sneak/data_client.php +++ b/scripts/sneak/data_client.php @@ -55,7 +55,7 @@ while (True) { usleep(0.1e6); - if ((microtime(True)-$t)>5e6) + if ((microtime(True)-$t)>10) { break; } diff --git a/scripts/sneak/data_server.php b/scripts/sneak/data_server.php index b1b22cf..7a4557c 100644 --- a/scripts/sneak/data_server.php +++ b/scripts/sneak/data_server.php @@ -498,7 +498,7 @@ function on_msg(&$server_data,&$server,&$clients,&$connections,$client_index,$da server_reply($server_data,$server,$clients,$connections,$client_index,"error: trailing empty"); return; } - # DO NOT ALLOW BRACKETS + # DO NOT ALLOW BRACKETS (NO FUNCTION ARGS ALLOWED) $valid_chars=VALID_UPPERCASE.VALID_LOWERCASE.VALID_NUMERIC." -_"; if (is_valid_chars($trailing,$valid_chars)==False) { @@ -507,6 +507,8 @@ function on_msg(&$server_data,&$server,&$clients,&$connections,$client_index,$da } $parts=explode(" ",$trailing); $action=array_shift($parts); + $trailing=implode(" ",$parts); + $unpacked["trailing"]=$trailing; $response=array(); $response["msg"]=array(); if (function_exists("server_msg_handler")==True) @@ -575,7 +577,8 @@ function load_mod(&$server_data,&$server,&$clients,&$connections,$client_index,$ unlink($fn); return; } - $result=@eval($code); + #$result=@eval($code); + $result=eval($code); if ($result===False) { server_reply($server_data,$server,$clients,$connections,$client_index,"mod: file \"".$mod_filename."\" eval returned false"); diff --git a/scripts/sneak/mods/lib_sneak b/scripts/sneak/mods/lib_sneak index c7b54bc..b963238 100644 --- a/scripts/sneak/mods/lib_sneak +++ b/scripts/sneak/mods/lib_sneak @@ -2,7 +2,7 @@ ##################################################################################################### -function is_gm(&$server_data,$hostname) +$is_gm=function(&$server_data,$hostname) { $operator_hostname=get_bucket("<>"); if ($operator_hostname===$hostname) @@ -21,11 +21,11 @@ function is_gm(&$server_data,$hostname) } } return False; -} +}; ##################################################################################################### -function is_admin(&$server_data,$hostname) +$is_admin=function(&$server_data,$hostname) { $operator_hostname=get_bucket("<>"); if ($operator_hostname===$hostname) @@ -41,11 +41,11 @@ function is_admin(&$server_data,$hostname) return True; } return False; -} +}; ##################################################################################################### -function map_init(&$server_data) +$map_init=function(&$server_data) { if (isset($server_data["app_data"]["map"])==True) { @@ -58,11 +58,11 @@ function map_init(&$server_data) $server_data["app_data"]["map"]=$record; $server_data["app_data_updated"]=True; return True; -} +}; ##################################################################################################### -function player_init(&$server_data,$hostname) +$player_init=function(&$server_data,$hostname) { if (isset($server_data["app_data"]["players"][$hostname])==True) { @@ -107,7 +107,7 @@ function player_init(&$server_data,$hostname) $server_data["app_data"]["players"][$hostname]=$record; $server_data["app_data_updated"]=True; return True; -} +}; ##################################################################################################### diff --git a/scripts/sneak/mods/mod_sneak_admin-add-gm b/scripts/sneak/mods/mod_sneak_admin-add-gm index fac4bc6..a845a41 100644 --- a/scripts/sneak/mods/mod_sneak_admin-add-gm +++ b/scripts/sneak/mods/mod_sneak_admin-add-gm @@ -6,15 +6,14 @@ mod:include lib_sneak */ -if (is_admin($server_data,$unpacked["hostname"])==True) +if ($is_admin($server_data,$unpacked["hostname"])==True) { - $user_data=users_get_data($unpacked["trailing"]); - if (isset($user_data["hostname"])==False) + $hostname=users_get_hostname($unpacked["trailing"]); + if ($hostname=="") { $response["msg"][]="sneak: user not found"; return; } - $hostname=$user_data["hostname"]; if (in_array($hostname,$server_data["app_data"]["moderators"])==True) { $response["msg"][]="sneak: hostname \"$hostname\" already in gm list"; diff --git a/scripts/sneak/mods/mod_sneak_admin-del-gm b/scripts/sneak/mods/mod_sneak_admin-del-gm new file mode 100644 index 0000000..446657f --- /dev/null +++ b/scripts/sneak/mods/mod_sneak_admin-del-gm @@ -0,0 +1,35 @@ + diff --git a/scripts/sneak/mods/mod_sneak_gm-add-goody b/scripts/sneak/mods/mod_sneak_gm-add-goody new file mode 100644 index 0000000..9df5049 --- /dev/null +++ b/scripts/sneak/mods/mod_sneak_gm-add-goody @@ -0,0 +1,7 @@ + diff --git a/scripts/sneak/mods/mod_sneak_gm-del-goody b/scripts/sneak/mods/mod_sneak_gm-del-goody new file mode 100644 index 0000000..9df5049 --- /dev/null +++ b/scripts/sneak/mods/mod_sneak_gm-del-goody @@ -0,0 +1,7 @@ + diff --git a/scripts/sneak/mods/mod_sneak_gm-kill b/scripts/sneak/mods/mod_sneak_gm-del-player similarity index 92% rename from scripts/sneak/mods/mod_sneak_gm-kill rename to scripts/sneak/mods/mod_sneak_gm-del-player index 033bdce..a561b8a 100644 --- a/scripts/sneak/mods/mod_sneak_gm-kill +++ b/scripts/sneak/mods/mod_sneak_gm-del-player @@ -2,7 +2,7 @@ ##################################################################################################### -if (is_gm($server_data,$unpacked["hostname"])==True) +/*if (is_gm($server_data,$unpacked["hostname"])==True) { if (count($trailing_parts)<>1) { @@ -24,7 +24,7 @@ if (is_gm($server_data,$unpacked["hostname"])==True) else { $response["msg"][]="not authorized"; -} +}*/ ##################################################################################################### diff --git a/scripts/sneak/mods/mod_sneak_gm-edit-goody b/scripts/sneak/mods/mod_sneak_gm-edit-goody index 31cd61e..9df5049 100644 --- a/scripts/sneak/mods/mod_sneak_gm-edit-goody +++ b/scripts/sneak/mods/mod_sneak_gm-edit-goody @@ -2,15 +2,6 @@ ##################################################################################################### -if (is_gm($server_data,$unpacked["hostname"])==True) -{ - $response["msg"][]="i farted"; -} -else -{ - $response["msg"][]="not authorized"; -} - ##################################################################################################### ?> diff --git a/scripts/sneak/mods/mod_sneak_gm-edit-map b/scripts/sneak/mods/mod_sneak_gm-edit-map new file mode 100644 index 0000000..9df5049 --- /dev/null +++ b/scripts/sneak/mods/mod_sneak_gm-edit-map @@ -0,0 +1,7 @@ + diff --git a/scripts/sneak/mods/mod_sneak_gm-edit-player b/scripts/sneak/mods/mod_sneak_gm-edit-player index 523b6c9..953c80d 100644 --- a/scripts/sneak/mods/mod_sneak_gm-edit-player +++ b/scripts/sneak/mods/mod_sneak_gm-edit-player @@ -2,7 +2,7 @@ ##################################################################################################### -if (is_gm($server_data,$unpacked["hostname"])==True) +/*if (is_gm($server_data,$unpacked["hostname"])==True) { if (count($trailing_parts)<=3) { @@ -57,7 +57,7 @@ if (is_gm($server_data,$unpacked["hostname"])==True) else { $response["msg"][]="not authorized"; -} +}*/ ##################################################################################################### diff --git a/scripts/sneak/mods/mod_sneak_gm-map b/scripts/sneak/mods/mod_sneak_gm-goody-data similarity index 100% rename from scripts/sneak/mods/mod_sneak_gm-map rename to scripts/sneak/mods/mod_sneak_gm-goody-data diff --git a/scripts/sneak/mods/mod_sneak_gm-map-data b/scripts/sneak/mods/mod_sneak_gm-map-data new file mode 100644 index 0000000..583e224 --- /dev/null +++ b/scripts/sneak/mods/mod_sneak_gm-map-data @@ -0,0 +1,40 @@ +1) + { + $response["msg"][]="invalid number of parameters"; + break; + } + $subject=$trailing_parts[0]; + $user_data=users_get_data($subject); + if (isset($user_data["hostname"])==False) + { + $response["msg"][]="nick \"$subject\" not found"; + } + else + { + $subject=$user_data["hostname"]; + if (isset($server_data["app_data"]["players"][$subject])==True) + { + $output=var_export($server_data["app_data"]["players"][$subject],True); + output_ixio_paste($output,False); + $response["msg"][]="player data for \"$subject\" dumped to http://ix.io/nAz"; + } + else + { + $response["msg"][]="player \"$subject\" not found on the game server in this channel"; + } + } +} +else +{ + $response["msg"][]="not authorized"; +} + +##################################################################################################### + +?> diff --git a/scripts/sneak/mods/mod_sneak_gm-view-map b/scripts/sneak/mods/mod_sneak_gm-view-map new file mode 100644 index 0000000..31cd61e --- /dev/null +++ b/scripts/sneak/mods/mod_sneak_gm-view-map @@ -0,0 +1,16 @@ + diff --git a/scripts/sneak/mods/mod_sneak_list-gms b/scripts/sneak/mods/mod_sneak_list-gms new file mode 100644 index 0000000..fac4bc6 --- /dev/null +++ b/scripts/sneak/mods/mod_sneak_list-gms @@ -0,0 +1,36 @@ + diff --git a/scripts/sneak/mods/mod_sneak_start b/scripts/sneak/mods/mod_sneak_start new file mode 100644 index 0000000..9df5049 --- /dev/null +++ b/scripts/sneak/mods/mod_sneak_start @@ -0,0 +1,7 @@ + diff --git a/scripts/sneak/mods/mod_sneak_testing b/scripts/sneak/mods/mod_sneak_testing index f8f74ae..e513be1 100644 --- a/scripts/sneak/mods/mod_sneak_testing +++ b/scripts/sneak/mods/mod_sneak_testing @@ -19,7 +19,7 @@ $trailing_parts $action */ -if (is_gm($server_data,$unpacked["hostname"])==True) +if ($is_gm($server_data,$unpacked["hostname"])==True) { $response["msg"][]="sneak: authorized gm"; } @@ -28,7 +28,7 @@ else $response["msg"][]="sneak: not authorized gm"; } -if (is_admin($server_data,$unpacked["hostname"])==True) +if ($is_admin($server_data,$unpacked["hostname"])==True) { $response["msg"][]="sneak: authorized admin"; } diff --git a/scripts/sneak/sneak_client.php b/scripts/sneak/sneak_client.php index 571ae5a..0d8f29c 100644 --- a/scripts/sneak/sneak_client.php +++ b/scripts/sneak/sneak_client.php @@ -4,6 +4,7 @@ /* exec:add ~sneak +exec:edit ~sneak timeout 30 exec:edit ~sneak cmd php scripts/sneak/sneak_client.php %%trailing%% %%dest%% %%nick%% %%user%% %%hostname%% %%alias%% %%cmd%% %%timestamp%% %%server%% exec:enable ~sneak */ diff --git a/scripts/users.php b/scripts/users.php index b4e7749..548578b 100644 --- a/scripts/users.php +++ b/scripts/users.php @@ -24,6 +24,9 @@ switch ($cmd) { + case "hostname": + privmsg(users_get_hostname(trim($trailing))); + break; case "nicks": $channel=strtolower(trim($trailing)); $nicks=users_get_nicks($channel); diff --git a/scripts/users_lib.php b/scripts/users_lib.php index ea145bc..25f9239 100644 --- a/scripts/users_lib.php +++ b/scripts/users_lib.php @@ -43,6 +43,42 @@ function users_get_data($nick) ##################################################################################################### +function users_get_hostname($nick) +{ + $nick=strtolower(trim($nick)); + $users=get_array_bucket(BUCKET_USERS); + if (isset($users[$nick])==True) + { + if (isset($users[$nick]["hostname"])==True) + { + # TODO: expiry + return $users[$nick]["hostname"]; + } + } + $start=microtime(True); + rawmsg("USERHOST $nick"); + do + { + $users=get_array_bucket(BUCKET_USERS); + if (isset($users[$nick])==True) + { + if (isset($users[$nick]["hostname"])==True) + { + return $users[$nick]["hostname"]; + } + } + else + { + break; + } + usleep(0.2*1e6); + } + while ((microtime(True)-$start)<5.0); + return ""; +} + +##################################################################################################### + function users_get_account($nick) { $nick=strtolower(trim($nick));