new object $user_db: $registry; var $db database = <$trie, [0, "GRNps", [0, "e", [0, "n", [0, "e", [0, "r", [0, "i", [0, "c", [0, "GBPAU", [["uestObject", $guest], ""], [["uilder", $builder], ""], [["rogrammer", $programmer], ""], [["dmin", $admin], ""], [["serObject", $user], ""]]]]]]]], [["eaper", $reaper], ""], [["oOne", $no_one], ""], [["layer", $player], ""], [["toryteller", $storyteller], ""]]>; var $registry invalid_names = "(^| )(ass|cunt|fuck|shit|damn)( |$)"; var $registry max_char_len = 20; var $registry min_char_len = 3; var $registry reserved_names = ["user", "builder", "programmer", "housekeeper", "Reaper", "noone", "guest", "a", "i", "an", "your", "you'r", "me", "god"]; var $registry stripped = 1; var $registry stripped_characters = "!@#$%^&*()_+-=~`'{}[]|/?\",.<>;: "; var $root created_on = 796268969; var $root flags = ['methods, 'variables, 'code, 'core]; var $root inited = 1; var $root managed = [$user_db]; var $root manager = $user_db; var $root trusted = [$user]; var $user_db connected = []; var $user_db invalid_chars = "$#@!^&%~:"; public method .clean_user_db() { var key, db, invalid; db = .database(); invalid = []; for key in ((.database()).keys()) { if (!valid(db[key])) { .remove(key); connected = connected.setremove(key); invalid += [key]; } } return ["Invalid $user_db entries: " + (invalid.to_english())]; }; public method .connected() { var x; for x in (connected) { if ((!valid(x)) || (| !(x.connections()) |)) connected = connected.setremove(x); } return connected; }; root method .core_user_db(): nooverride { var o; .set_database($trie.new()); for o in (($user.descendants()) + [$user]) .insert(o.name(), o); }; public method .did_connect() { (> .perms(caller(), $user) <); connected = connected.setadd(sender()); }; public method .did_disconnect() { .perms(caller(), $user); connected = connected.setremove(sender()); }; public method .match() { arg name; return (> .search(name) <); }; public method .reserved_names() { return pass() + ((($smtp.mail_aliases()).keys()).mmap('strip)); }; public method .total_connected() { return (.connected()).length(); }; public method .user_dbrefs() { var db; db = .database(); if (type(db) != 'dictionary) db = db.to_dict(); return (db.values()).compress(); }; public method .users() { return (.database()).keys(); }; public method .valid_name() { arg name; if (((name.strip(invalid_chars)).length()) < (name.length())) throw(~invname, ("Names cannot contain any of '" + invalid_chars) + "'."); return (> pass(name) <); };