@create $generic_utils named "Tilde Utilities" @property #0.tilde_utils #170 @describe $tilde_utils as "This is the Tilde Utilities utility package. See `help $tilde_utils' for more details." @set $tilde_utils.help_msg to {"Mirrored functions:", " curl (STR [, INT , INT timeout]) -- See `help curl()`", " exec (LIST command[, STR input][, LIST environment variables]) -- See `help eval()`", "", "$wiz_utils:", "", ":set_programmer(object) object.programmer = 1;"," chparent object to $prog", " send mail to $prog_log"} @verb $tilde_utils:exec tnt @program $tilde_utils:exec {command, ?input=#-1, ?env_vars=#-1} = args; if (env_vars != #-1) return exec (command, input, env_vars); elseif (input != #-1) return exec (command, input); else return exec (command); endif . @verb $tilde_utils:curl tnt @program $tilde_utils:curl {url, ?include_headers=#-1, ?timeout=#-1} = args; if (timeout != #-1) return curl (url, include_headers, timeout); elseif (include_headers != #-1) return curl (url, include_headers); else return curl (url); endif . @verb $tilde_utils:set_programmer tnt @program $tilde_utils:set_programmer "This code is taken from $wiz_utils:set_programmer, but has the wiz check removed, and a guest check added."; ":set_programmer(victim[,mail from]) => 1 or error."; "Sets victim.programmer, chparents victim to $prog if necessary, and sends mail to $new_prog_log, mail is from optional second arg or caller_perms()."; whodunnit = caller_perms(); {victim, ?mailfrom = whodunnit} = args; if (!(valid(victim) && (is_player(victim) && $object_utils:isa(victim, $player)))) return E_INVARG; elseif ($object_utils:isa(victim, $guest)) return E_INVARG; elseif (victim.programmer) return E_NONE; elseif ($wiz_utils:check_prog_restricted(victim)) return E_INVARG; elseif (typeof(e = `victim.programmer = 1 ! ANY') == ERR) return e; else $quota_utils:adjust_quota_for_programmer(victim); if (!$object_utils:isa(victim, $prog)) if (typeof(e = `chparent(victim, $prog) ! ANY') == ERR) "...this isn't really supposed to happen but it could..."; player:notify(tostr("chparent(", victim, ",", $prog, ") failed: ", e)); player:notify("Check for common properties."); endif else player:notify(tostr(victim.name, " was already a child of ", parent(victim).name, " (", parent(victim), ")")); endif if (!$mail_agent:send_message(mailfrom, {$new_prog_log, victim}, tostr("@programmer ", victim.name, " (", victim, ")"), tostr("I just gave ", victim.name, " a programmer bit."))[1]) $mail_agent:send_message(mailfrom, {$new_prog_log}, tostr("@programmer ", victim.name, " (", victim, ")"), tostr("I just gave ", victim.name, " a programmer bit.")); endif return 1; endif .