parent $user_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 [["@finger-data|@user-data * my * is|are *", 'data_is_cmd], ["@finger|@user-data *", 'data_cmd], ["@set-finger|@set-user-data * as|to *", 'set_info_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 #[]
var $old_command_environment verb_cache #[]
var $old_command_environment command_cache [["@finger-data|@user-data * my * is|are *", 'data_is_cmd], ["@finger|@user-data *", 'data_cmd], ["@set-finger|@set-user-data * as|to *", 'set_info_cmd]]
var $old_command_environment shortcuts_cache []
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) <);
if (!value) {
if ((| user_data[key] |))
user_data = (| dict_del(user_data, key) |);
} else {
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 cmd, what, is, args;
var valid, line, syntax, value, public;
(> .perms(sender(), 'this) <);
valid = $user_data.valid_settings();
what = (| valid[what] |);
if (!what) {
syntax = cmd + " <setting name> is|to <value> [+/-public]";
lines = ["Where setting name can be any of: "];
lines = [@lines, dict_keys(valid).to_english()];
$parse.tell_error(lines, syntax);
}
args = $parse.options(args, #[["public", [1, 0]]]);
public = args[2];
value = (args[1]).to_string();
.set_data(what, value, (public["public"])[1]);
.
method data_cmd
arg com, who;
var valid, line, user;
if (!who)
user = this();
else
user = (| .find_object(who, 'user, 'environment, '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());
if (user.connected())
.tell((user.name()) + " is connected.");
else
.tell(((((user.name()) + " was last connected at ") + ($time.ltime(abs(user.connected_at())))) + " ") + ($time.ldate(abs(user.connected_at()))));
.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 set_info_cmd
arg cmd, what, is, args;
var valid, lines, syntax, value, public;
(> .perms(sender(), 'this) <);
valid = $user_data.valid_settings();
what = (| valid[what] |);
if (!what) {
syntax = cmd + " <setting name> is|to <value> [+/-public]";
lines = ["Where setting name can be any of: "];
lines = [@lines, dict_keys(valid).to_english()];
$parse.tell_error(lines, syntax);
}
args = $parse.options(args, #[["public", [1, 0]]]);
public = args[2];
value = (args[1]).to_string();
if (value in ["none", "<none>"])
value = "";
.set_data(what, value, (public["public"])[1]);
if (!value)
.tell(("You unset " + (tostr(what).capitalize())) + ".");
else
.tell((("You set " + (tostr(what).capitalize())) + " to ") + ($string.chop(value, 50)));
.
method user_data
arg [which];
var d, v;
if ((!which) && (!(.is_writable_by(sender()))))
throw(~perm, "You are unable to get full user data, try specific fields.");
if (which) {
which = which[1];
v = ($user_data.valid_settings()).values();
d = (| user_data[which] |);
if ((!d) && (!(which in v)))
throw(~type, "No user data field type of " + toliteral(which));
else if (!d)
return "Not set.";
else if ((!(d[1])) && (!(.is_writable_by(sender()))))
throw(~perm, "That value is not public.");
else
return d[2];
} else {
return user_data;
}
.