/
ColdCore-3.0a9.02/
ColdCore-3.0a9.02/src/
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", "admin", "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) <);
};