parent $interfaces
parent $has_verbs
object $user_data
var $root dbref 'user_data
var $root child_index 0
var $root fertile 0
var $root manager $user_data
var $root owned [$user_data]
var $root owners [$user_data]
var $root writable []
var $root readable ['parameters, 'methods, 'code]
var $has_commands commands [["@user-data * my * is|are *", 'data_is_cmd], ["@user-data *", 'data_cmd]]
var $has_commands shortcuts []
var $root inited 1
var $user_data valid_settings #[["real name", 'real_name], ["email", 'email], ["address", 'address], ["affiliation", 'affiliation], ["position", 'position], ["location", 'location], ["interests", 'interests], ["plan", 'plan], ["projects", 'projects], ["see also", 'see_also]]
var $user_data user_data #[]
var $has_verbs verbs #[["finger %this", ['finger_vrb, 'remote]]]
method init_user_info
.perms(caller(), $root);
user_data = #[['real_name, [1, "???"]], ['email, [1, "???"]]];
.
method data_on
arg data;
data = (| user_data[data] |);
if (data) {
if ((data[1]) || (.is_writable_by(sender())))
return data[2];
return "not public.";
} else {
return "not set.";
}
.
method set_data
arg key, value, public;
.perms(sender(), 'this);
user_data = dict_add(user_data, key, [public, value]);
.
method init_user_data
.perms(caller(), $root);
user_data = #[['real_name, [1, "???"]], ['email, [1, "???"]]];
.
method valid_settings
return valid_settings;
.
method data_is_cmd
arg com, public, me, what, is, value;
var valid, kvalid, tmp;
.perms(sender(), 'parser);
valid = $user_data.valid_settings();
what = (| valid[what] |);
if (!what) {
tmp = " [+p|+public|-p|-public] my <setting name> is <value>'";
.tell(("! => Syntax: '" + com) + tmp);
.tell("! Where setting name can be any of: ");
tmp = $string.wrap_line($list.to_english(dict_keys(valid)), .linelen(), "! ");
tmp = replace(tmp, 1, "! " + (tmp[1]));
.tell(tmp);
return;
}
if ((!public) || (public in ["+p", "+public"]))
public = 1;
else if (public in ["-p", "-public"])
public = 0;
else
$parse.tell_error("Invalid public setting (must be +p, +public, -p or -public)");
.set_data(what, value, public);
.tell("Value set.");
.
method data_cmd
arg com, who;
var valid, line, user;
.perms(sender(), 'parser);
//
if (!who)
user = this();
else
user = (| .find_object(who, 'environment, 'user, 'grasp) |);
if (!user) {
.tell(("! No user found by the name \"" + who) + "\".");
.tell("! To set a value use the syntax:");
.tell(("! '" + com) + " [+p|+public|-p|-public] my <parameter> is|are <value>'");
return;
}
.tell(("Current personal data settings on " + (user.namef())) + ":");
valid = $user_data.valid_settings();
.tell(user.display_data());
.tell("-=-");
.
method display_data
arg [dont_display];
var x, valid, line, len, pub, actor, data, lines, output;
actor = sender();
len = actor.linelen();
valid = $user_data.valid_settings();
output = [];
for x in (valid) {
if (!((x[2]) in dont_display)) {
data = (| user_data[x[2]] |);
if (data) {
if ((data[1]) || (.is_writable_by(actor)))
line = data[2];
else
line = "not public.";
} else {
continue;
}
pub = (| (user_data[x[2]])[1] |);
pub = ((!pub) && (type(pub) != 'error)) ? "*" | " ";
if ((len - 20) < strlen(line)) {
output = [@output, (pub + ($string.capitalize(x[1]))) + ":"];
lines = $string.wrap_line(line, len, " ");
lines = replace(lines, 1, " " + (lines[1]));
output = output + lines;
} else {
output = output + [(pub + pad(($string.capitalize(x[1])) + ": ", 13)) + line];
}
}
}
return output;
.
method finger_vrb
arg [args];
.