Method code for $channel_ui.channels_cmd()

[Turn off line numbering]
  1: arg cmdstr, cmd, args;
  2: var opts, f, d, cur_channels, cd_keys, cd_values, i, alias, db, active, msg, match_with, match_pattern, tmp, form, add, o;
  3: 
  4: (> .perms(caller(), 'command) <);
  5: [args, opts] = args;
  6: o = opts.slice(1);
  7: if ((f = (| "f?ull" in o |)))
  8:     f = opts[f][3];
  9: if ((d = (| "d?etailed" in o |)))
 10:     d = opts[d][3];
 11: if (listlen(args) > 1) {
 12:     catch any {
 13:         cmd = (| ($channel_db.search(args[1]))[1] |);
 14:         return .channel_members(cmd, f);
 15:     } with {
 16:         return traceback()[1][2];
 17:     }
 18: }
 19: cd_keys = channel_dict.keys();
 20: cd_values = channel_dict.values();
 21: cur_channels = f ? $channel_db.database().values().slice(1) : cd_values;
 22: if (args) {
 23:     match_with = (| .get_setting("match-with", $programmer) |) || 'match_pattern;
 24:     match_pattern = (| args[1][1] |) || (| .get_setting("match-default", $programmer) |) || "*";
 25:     cur_channels = filter f in (cur_channels) where (f.to_string().(match_with)(match_pattern) != 0);
 26: }
 27: if (!cur_channels)
 28:     return "No channels found.";
 29: msg = [];
 30: add = [];
 31: for i in (cur_channels) {
 32:     alias = (| cd_keys[i in cd_values] |) || "";
 33:     db = (| $channel_db.search(tostr(i)) |);
 34:     if (type(db) == 'list) {
 35:         msg += [[active_channels.contains(i) ? "*" : " ", alias, tostr(db[1]), db[7] || "<no description>"]];
 36:         form = "%26r: %50l";
 37:         if (d) {
 38:             tmp = [form.format("Number of users", tostr(db[2])), form.format("Owner", db[5].name()), form.format("Managers", db[6].mmap('namef, 'name).to_english())];
 39:             if (db[3])
 40:                 tmp += [form.format("Join Lock", db[3].lock_name())];
 41:             if (db[4])
 42:                 tmp += [form.format("Leave Lock", db[4].lock_name())];
 43:             if (db[8])
 44:                 tmp += [form.format("Use Lock", db[8].lock_name())];
 45:             add += [tmp];
 46:         }
 47:     } else {
 48:         msg += [[active_channels.contains(i) ? "*" : " ", alias, "", "Channel not in database!"]];
 49:     }
 50:     refresh();
 51: }
 52: msg = msg.transpose().tabulate([["", ""], ["Alias", "-----"], ["Channel", "-------"], ["Description", "-----------"]]);
 53: if (d)
 54:     msg = [msg[1], msg[2], @map i in [3 .. msg.length()] to ([msg[i]] + add[i - 2]).sum()];
 55: return [@msg, "   -----"];

// Created 24-Jul-1996 as a part of ColdCore, see: @help Credit

Tlon