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; } .