;var p, new; if(!(| valid($irc_connection) |)) { new = $connection.spawn(); new.set_objname('irc_connection);} ;var p, new; if(!(| valid($irc) |)) { new = $connection_interface.spawn(); new.set_objname('irc);} $irc.chparents($connection_interface,$daemon); ;as $irc<$root>;trusted_by = [$irc_connection]; ;as $irc<$root>;flags = ['variables, 'methods, 'code]; ;as $irc<$root>;created_on = 857088844; ;as $irc<$root>;inited = 1; ;as $irc<$has_commands>;shortcuts = #[]; ;as $irc<$has_commands>;remote = #[]; ;as $irc<$has_commands>;local = #[]; @av $irc,connection = 0 ;as $irc<$irc>;connection = 0; ;as $irc<$has_settings>;defined_settings = #[]; ;as $irc<$has_settings>;local_settings = #[]; ;as $irc<$has_settings>;settings = #[]; @program $irc.close() +access=pub (> .perms(sender()) <); (> $sys.destroy_sender() <); // $#Edited: 27 Feb 97 15:08 $user_neale // $#Edited: 27 Feb 97 17:47 $user_neale . @program $irc.port() +access=pub return 6667; // $#Edited: 27 Feb 97 15:44 $user_neale // $#Edited: 27 Feb 97 17:47 $user_neale . @program $irc.server() +access=prot return "phoenix.az.us.undernet.org"; // $#Edited: 10 Feb 97 17:21 $user_neale // $#Edited: 27 Feb 97 17:47 $user_neale . @program $irc.do_ping() +access=prot arg conn, args, text; conn.write_string("PONG :" + text + "\n"); // $#Edited: 11 Feb 97 02:52 $user_neale // $#Edited: 27 Feb 97 17:47 $user_neale . @program $irc.connection_going_away() +access=pub arg [args]; (> .close() <); // $#Edited: 27 Feb 97 15:08 $user_neale // $#Edited: 27 Feb 97 17:47 $user_neale . @program $irc.connection() +access=pub return connection; // $#Edited: 27 Feb 97 15:08 $user_neale // $#Edited: 27 Feb 97 17:47 $user_neale . @program $irc.new() +access=pub arg [ignored]; throw(~no, "Don't use .new on a child of $irc."); // $#Edited: 27 Feb 97 17:47 $user_neale . @program $irc.new_connection() +access=pub arg this, host, port; // $#Edited: 27 Feb 97 15:08 $user_neale // $#Edited: 27 Feb 97 17:47 $user_neale . @program $irc.set_connection() +access=pub arg c; (> .perms(caller(), definer()) <); connection = c; // $#Edited: 27 Feb 97 15:08 $user_neale // $#Edited: 27 Feb 97 17:47 $user_neale . @program $irc.daemon_shutdown() +access=pub var i; throw(~no, "$irc doesn't work that way."); // $#Edited: 27 Feb 97 17:47 $user_neale . @program $irc.connection_starting() +access=pub arg addr, port; // $#Edited: 27 Feb 97 15:08 $user_neale // $#Edited: 27 Feb 97 17:47 $user_neale . @program $irc.open_irc_connection() +access=pub arg [args]; var line; (| .perms(sender(), 'trusts) |) || (> .perms(caller(), 'trusts) <); .set_connection($irc_connection.new()); catch any { .connection().open_connection($network.ip(.server()), .port()); } with { line = "Can't connect to IRC server: " + traceback()[1][2]; (| .connection().close() |); return line; } .connection().write_string("NICK " + $motd.server_name() + "\n"); .connection().write_string("USER " + $motd.server_name() + " unused1 unused2 :" + $motd.server_title() + "\n"); return .connection(); // $#Edited: 09 Feb 97 02:15 $user_neale // $#Edited: 09 Feb 97 22:06 $user_neale // $#Edited: 27 Feb 97 15:48 $user_neale // $#Edited: 27 Feb 97 17:47 $user_neale . @program $irc.parse_line() +access=pub arg buf; var conn, line, args, text, ctcp, func; if (buf[1] == 58) { buf = subbuf(buf, 2, buf.length() - 1); } else { func = 1; } line = buf.to_string(); if (line.match_regexp("shit|fuck|bitch|cunt|asshole|asswipe|clit")) { return; } conn = sender(); args = explode(explode(line, ":")[1], " "); // extract text and check for CTCP stuff catch any { text = (line.regexp("^.[^:]+:(.*)$"))[1]; ctcp = subbuf(buf, (`[58] in buf) + 1, buf.length() - (`[58] in buf)); ctcp = ctcp[1] == 1 && ctcp[ctcp.length()] == 1; } if (func) { func = args[1]; } else if ((args[2] == "PRIVMSG" || args[2] == "NOTICE") && ctcp) { func = "C" + args[2]; } else { func = args[2]; } .(tosym("do_" + lowercase(func)))(conn, args, text); // $#Edited: 09 Feb 97 22:41 $user_neale // $#Edited: 25 Feb 97 18:05 $user_neale // $#Edited: 25 Feb 97 19:52 $user_neale // $#Edited: 27 Feb 97 17:47 $user_neale . ;var p, new; if(!(| valid($irc_connection) |)) { new = $connection.spawn(); new.set_objname('irc_connection);} ;as $irc_connection<$root>;manager = $irc_connection; ;as $irc_connection<$root>;inited = 1; ;as $irc_connection<$root>;created_on = 855612795; ;as $irc_connection<$root>;managed = [$irc_connection]; ;as $irc_connection<$root>;trusted = [$irc]; ;as $irc_connection<$root>;quota = 10000; ;as $irc_connection<$root>;quota_exempt = 1; ;as $irc_connection<$root>;child_index = 123; ;as $irc_connection<$root>;writes = []; ;as $irc_connection<$root>;flags = ['methods, 'code]; ;as $irc_connection<$connection>;buffer = `[]; ;as $irc_connection<$connection>;remote_addr = ""; ;as $irc_connection<$connection>;local_addr = ""; ;as $irc_connection<$connection>;line_buffer = []; ;as $irc_connection<$connection>;timeout = 300; ;as $irc_connection<$connection>;tid = -1; @av $irc_connection,buffer = 0 ;as $irc_connection<$irc_connection>;buffer = 0; @av $irc_connection,line_buffer = 0 ;as $irc_connection<$irc_connection>;line_buffer = 0; @program $irc_connection.connect() +access=driver arg task_id; $scheduler.resume(task_id, 'success); // $#Edited: 10 Feb 97 23:26 $user_neale . @program $irc_connection.failed() +access=driver arg task_id, reason; $scheduler.resume(task_id, reason); // $#Edited: 10 Feb 97 23:26 $user_neale . @program $irc_connection.open_connection() +access=pub arg host, port; (> .perms(sender()) <); (> pass(host, port) <); buffer = `[]; line_buffer = []; return $scheduler.suspend(this()); // $#Edited: 10 Feb 97 23:26 $user_neale . @program $irc_connection.new() +access=pub var child, daemon, port, i; (| .perms(sender(), 'trusts) |) || (> .perms(caller(), 'trusts) <); child = .spawn(); // do perms stuff child.add_writer(sender()); child.add_writer(this()); child.new_interface(sender()); return child; // $#Edited: 10 Feb 97 23:26 $user_neale . @program $irc_connection.parse() +access=driver arg incoming; var lines, line, index; lines = (buffer + incoming + `[10]).break_lines(); index = lines.length(); buffer = lines[index]; lines = lines.delete(index); line_buffer += lines; while (line_buffer) { line = line_buffer[1]; line_buffer = line_buffer.delete(1); (| .parse_line(line) |); } // $#Edited: 11 Feb 97 02:18 $user_neale . ;var p, new; if(!(| valid($irc_user) |)) { new = $body.spawn(); new.set_objname('irc_user);} ;as $irc_user<$root>;quota_exempt = 1; ;as $irc_user<$root>;flags = ['variables, 'methods, 'code, 'fertile]; ;as $irc_user<$root>;created_on = 855660002; ;as $irc_user<$root>;inited = 1; ;as $irc_user<$root>;child_index = 2832; ;as $irc_user<$root>;quota = 75000; ;as $irc_user<$has_commands>;shortcuts = #[]; ;as $irc_user<$has_commands>;remote = #[]; ;as $irc_user<$has_commands>;local = #[]; ;as $irc_user<$has_settings>;defined_settings = #[]; ;as $irc_user<$has_settings>;local_settings = #[]; ;as $irc_user<$has_settings>;settings = #[]; ;as $irc_user<$has_name>;name = ['prop, "Generic IRC User", "Generic IRC User"]; ;as $irc_user<$has_gender>;gender = $gender_neuter; ;as $irc_user<$described>;prose = []; ;as $irc_user<$location>;contents = []; ;as $irc_user<$located>;location = $body_cave; ;as $irc_user<$located>;obvious = 1; @av $irc_user,uhost = 0 ;as $irc_user<$irc_user>;uhost = 0; @av $irc_user,real_name = 0 ;as $irc_user<$irc_user>;real_name = 0; @av $irc_user,server = 0 ;as $irc_user<$irc_user>;server = 0; @av $irc_user,ircop = 0 ;as $irc_user<$irc_user>;ircop = 0; @av $irc_user,lag = 0 ;as $irc_user<$irc_user>;lag = 0; @av $irc_user,lag_timestamp = 0 ;as $irc_user<$irc_user>;lag_timestamp = 0; @program $irc_user._tell() +access=pub arg [args]; return; // $#Edited: 11 Feb 97 04:27 $user_neale . @program $irc_user.set_real_name() +access=pub arg text; (| .perms(sender(), 'trusts) |) || (> .perms(caller(), 'trusts) <); real_name = text; // $#Edited: 12 Feb 97 03:24 $user_neale . @program $irc_user.set_server() +access=pub arg text; (| .perms(sender(), 'trusts) |) || (> .perms(caller(), 'trusts) <); server = text; // $#Edited: 12 Feb 97 03:24 $user_neale . @program $irc_user.set_ircop() +access=pub arg bool; (| .perms(sender(), 'trusts) |) || (> .perms(caller(), 'trusts) <); ircop = bool; // $#Edited: 12 Feb 97 03:24 $user_neale . @program $irc_user.uhost() +access=pub return uhost; // $#Edited: 12 Feb 97 03:25 $user_neale . @program $irc_user.real_name() +access=pub return real_name; // $#Edited: 12 Feb 97 03:25 $user_neale . @program $irc_user.server() +access=pub return server; // $#Edited: 12 Feb 97 03:25 $user_neale . @program $irc_user.ircop() +access=pub return ircop; // $#Edited: 12 Feb 97 03:25 $user_neale . @program $irc_user.description() +access=pub arg flags; var line, desc; desc = [(<$ctext_frob, [[(<$format, ["subj", [], [.name()], 'do_subj]>)], #[]]>)]; line = .name() + " is an IRC user from " + .uhost(); if (.real_name()) { line += " (" + .real_name() + ")"; } desc += [line]; if (.server()) { desc += ["They are on the IRC server " + .server()]; } if (.lag() > -1) { desc += ["They are " + $time.to_english(.lag() / 2) + " lagged; this was last verified " + $time.to_english(time() - .lag_timestamp()) + " ago."]; } return desc; // $#Edited: 12 Feb 97 03:30 $user_neale . @program $irc_user.set_uhost() +access=pub arg text; (| .perms(sender(), 'trusts) |) || (> .perms(caller(), 'trusts) <); uhost = text; // $#Edited: 12 Feb 97 03:35 $user_neale . @program $irc_user.set_lag() +access=pub arg time; (| .perms(sender(), 'trusts) |) || (> .perms(caller(), 'trusts) <); lag = time() - time + 1; lag_timestamp = time; // $#Edited: 13 Feb 97 21:27 $user_neale . @program $irc_user.lag() +access=pub if (lag == 0) { return -1; } else { return lag - 1; } // $#Edited: 13 Feb 97 21:54 $user_neale . @program $irc_user.lag_timestamp() +access=pub return lag_timestamp; // $#Edited: 14 Feb 97 03:44 $user_neale . @program $irc_user.irc_name() +access=pub var name; name = .name(); return substr(name, 1, name.length() - 1); . ;var p, new; if(!(| valid($irc_room) |)) { new = $place.spawn(); new.set_objname('irc_room);} $irc_room.chparents($place,$irc); ;as $irc_room<$root>;flags = ['variables, 'methods, 'code]; ;as $irc_room<$root>;created_on = 854679629; ;as $irc_room<$root>;inited = 1; ;as $irc_room<$root>;quota_exempt = 1; ;as $irc_room<$root>;trusted = []; ;as $irc_room<$root>;managed = []; ;as $irc_room<$root>;writes = []; ;as $irc_room<$command_cache>;shortcut_cache = []; ;as $irc_room<$command_cache>;local_cache = #[["@kick", ["@kick"]]]; ;as $irc_room<$command_cache>;remote_cache = #[["@rewho", [["@rewho"], #[[$irc_room, 1]]]], ["@lock", [["@lock"], #[[$thing, 666], [$exit, 1]]]], ["@unlock", [["@unlock"], #[[$thing, 666], [$exit, 1]]]], ["@boot", [["@boot"], #[[$thing, 666]]]]]; ;as $irc_room<$has_commands>;shortcuts = #[]; ;as $irc_room<$has_commands>;remote = #[["@rewho", [["@rewho", "*", "@rewho <this>", 'rewho, #[[1, ['this, []]]]]]]]; ;as $irc_room<$has_commands>;local = #[["@kick", [["@kick", "*", "@kick <descendant of $irc_user>", 'kick_cmd, #[[1, ['descendant, [$irc_user]]]]]]]]; ;as $irc_room<$has_settings>;defined_settings = #[]; ;as $irc_room<$has_settings>;local_settings = ["realm"]; ;as $irc_room<$has_settings>;settings = #[]; ;as $irc_room<$has_name>;name = ['uniq, "IRC Room", "the IRC Room"]; ;as $irc_room<$has_gender>;gender = $gender_neuter; ;as $irc_room<$described>;prose = <$ctext_frob, [["Holograms of people are projected into this otherwise empty white room from an unknown source; their voices are expertly made to originate from the people they correspond to."], #[['this, $irc_room]]]>; ;as $irc_room<$location>;contents = []; ;as $irc_room<$place>;entrances = []; ;as $irc_room<$place>;exits = []; @av $irc_room,real_nick = 0 ;as $irc_room<$irc_room>;real_nick = 0; @av $irc_room,users = #[] ;as $irc_room<$irc_room>;users = #[]; @av $irc_room,connected = 0 ;as $irc_room<$irc_room>;connected = 0; @av $irc_room,channel = "#testing_123" ;as $irc_room<$irc_room>;channel = "#testing_123"; @av $irc_room,lag_times = 0 ;as $irc_room<$irc_room>;lag_times = 0; ;as $irc_room<$irc>;connection = 0; @program $irc_room.quad2num +access=pub arg quad; var a, b, c, d, ah, al, ip, iph, ipl; [a, b, c, d] = explode(quad, ".").mmap('to_number); ah = a / 128; al = a % 128; ip = ((al * 256 + b) * 256 + c) * 256 + d; if (ah > 0) { iph = ip / 1000000000; ip = ip % 1000000000; ip = ip + 147483648; iph = iph + ip / 1000000000 + 2; ipl = ip % 1000000000; return iph.to_string() + ipl.to_string(); } else { return ip.to_string(); } // $#Edited: 08 Feb 97 18:25 $user_neale . @program $irc_room.dcc_chat() +access=prot arg conn, nick; .ctcp(conn, 'msg, nick, "DCC CHAT chat " + .quad2num($sys.server_info('server_ip)) + " " + $login_daemon.current_port().to_string()); // $#Edited: 11 Feb 97 15:44 $user_neale // $#Edited: 11 Feb 97 23:04 $user_neale . @program $irc_room.do_quit() +access=prot arg conn, args, text; var nick; nick = .get_nick(args); if (text.match_regexp("^([A-Za-z0-9*_-]+\.)+[A-Za-z0-9_-]+ ([A-Za-z0-9*_-]+\.)+[A-Za-z0-9_-]+$")) { text = "'s image goes on the fritz and fuzzes out."; } else { text = " " + $code_lib.punctuation_type(text) + "s, \"" + text + "\"; then disappears."; } .say(nick + text); .del_user(nick); // $#Edited: 10 Feb 97 23:48 $user_neale . @program $irc_room.do_002() +access=prot arg conn, args, text; conn.write_string("JOIN " + .channel() + "\n"); // $#Edited: 09 Feb 97 22:35 $user_neale // $#Edited: 10 Feb 97 23:48 $user_neale . @program $irc_room.do_nick() +access=prot arg conn, args, text; var nick, newnick; nick = .get_nick(args); newnick = text + "*"; .say(nick + " is now known as " + newnick + "."); .user(nick).set_name(newnick, 'prop); users = users.add(newnick, users[nick]).del(nick); // $#Edited: 10 Feb 97 23:48 $user_neale . @program $irc_room.do_privmsg() +access=prot arg conn, args, text; var split; if (args[3] == .channel()) { .say(.get_nick(args) + " " + $code_lib.punctuation_type(text) + "s, \"" + text + "\""); } else { switch (text) { case "chat": .dcc_chat(conn, explode(args[1], "!")[1]); case "who": conn.write_string("PRIVMSG " + explode(args[1], "!")[1] + " :"); conn.write_string(.contents().english_name_list()); conn.write_string("\n"); } } // $#Edited: 11 Feb 97 23:02 $user_neale . @program $irc_room.do_join() +access=prot arg conn, args, text; var nick, host; [nick, host] = explode(args[1], "!"); if (nick == real_nick) { return; } nick = .get_nick(args); .say(nick + " (" + host + ") appears."); return .add_user(conn, nick, host); // $#Edited: 11 Feb 97 13:53 $user_neale . @program $irc_room.do_part() +access=prot arg conn, args, text; var nick; nick = .get_nick(args); .say(nick + " disappears."); .del_user(nick); // $#Edited: 10 Feb 97 02:25 $user_neale // $#Edited: 10 Feb 97 23:48 $user_neale . @program $irc_room.kick_cmd() +access=pub arg cmdstr, com, luser; (| .perms(sender(), 'trusts) |) || (> .perms(caller(), 'trusts) <); if (!$irc_user in luser.parents()) { sender().tell(luser.name() + " is not an IRC user."); return; } .connection().write_string("KICK " + .channel() + " " + luser.irc_name() + " :" + sender().name() + "\n"); sender().tell("Attempting to kick " + luser.name() + " off."); . @program $irc_room.say() +access=prot arg text; // use this for announcing messages that you don't want to go to IRC. .announce('say, text); // $#Edited: 10 Feb 97 02:32 $user_neale // $#Edited: 10 Feb 97 02:34 $user_neale // $#Edited: 10 Feb 97 23:48 $user_neale . @program $irc_room.do_mode() +access=prot arg conn, args, text; var nick, plus, i, j; nick = .get_nick(args); plus = 1; j = 1; for i in [1 .. args[4].length()] { switch (args[4][i]) { case "+": plus = 1; case "-": plus = 0; case "o": if (plus) { .say(nick + " gives " + args[4 + j] + "* ops."); } else { .say(nick + " takes away " + args[4 + j] + "*'s ops."); } ++j; case "b", "l", "v", "k": .say(nick + " fiddles with the 3-D projector."); ++j; default: .say(nick + " fiddles with the 3-D projector."); } } //.say("You hear the distant churning of machinery."); //["Cubbi!dsmr@yu-nmr.chem.msu.su", "MODE", "#disney", "+bb", "foo!*bar@bar.foo", "and!the*@other.one", 0] //["W!cservice@undernet.org", "MODE", "#disney", "+o", "Copper", 0] // $#Edited: 11 Feb 97 23:05 $user_neale . @program $irc_room.do_cnotice() +access=prot arg conn, args, text; var split; split = text.regexp("^([A-Z]+) (.*)$"); if (split[1] == "DCC") { split = text.regexp("^(DCC [A-Z]+) (.*)$"); } if (args[3] == real_nick && split[1] == "PING") { (| .user(.get_nick(args)).set_lag(split[2].to_number()) |); } else { throw(~ctcp, "unknown notice"); } // $#Edited: 13 Feb 97 21:57 $user_neale . @program $irc_room.do_kick() +access=prot arg conn, args, text; var nick; nick = .get_nick(args); if (nick == .real_nick() + "*") { .say(text + " kicks " + args[4] + "* out."); } else { .say(nick + " kicks " + args[4] + "* out, " + $code_lib.punctuation_type(text) + "ing, \"" + text + "\""); } .del_user(args[4] + "*"); // $#Edited: 10 Feb 97 23:48 $user_neale . @program $irc_room.do_topic() +access=prot arg conn, args, text; .say(.get_nick(args) + " sets the topic to: " + text); // $#Edited: 10 Feb 97 20:47 $user_neale // $#Edited: 10 Feb 97 23:48 $user_neale . @program $irc_room.announce() +access=pub arg line, [rest]; var buf; if (line != 'say) { if (!.connected()) { return (> pass(line, @rest) <); } catch any { switch (type(line)) { case 'string: .connection().write_string("PRIVMSG " + .channel() + " :" + strsub(line, "fnord", "") + "\n"); case 'frob: buf = ("PRIVMSG " + .channel() + " :").to_buffer(); buf += $parse_lib.filter_ctext(line, #[['formatter, $text_format]]); .connection().write_buffer(buf); } } return (> pass(line, @rest) <); } else { return (> pass(@rest) <); } // $#Edited: 11 Feb 97 02:22 $user_neale . @program $irc_room.do_cprivmsg() +access=prot arg conn, args, text; var split, buf; split = text.regexp("^([A-Z]+) (.*)$"); if (split[1] == "DCC") { split = text.regexp("^(DCC [A-Z]+) (.*)$"); } if (split[1] == "PING") { buf = ("NOTICE " + explode(args[1], "!")[1] + " :").to_buffer(); buf += `[1]; buf += text.to_buffer(); buf += `[1, 13]; conn.write_buffer(buf); .ping(conn, explode(args[1], "!")[1]); } else if (args[3] == .channel()) { if (split[1] == "ACTION") { .say(.get_nick(args) + " " + split[2]); } } else if (split[1] == "DCC CHAT") { .dcc_chat(conn, explode(args[1], "!")[1]); } else { throw(~ctcp, "no response"); } // $#Edited: 11 Feb 97 03:18 $user_neale . @program $irc_room.del_user() +access=prot arg nick; (| .user(nick).destroy() |); (| (users = users.del(nick)) |); // $#Edited: 12 Feb 97 01:08 $user_neale . @program $irc_room.ctcp() +access=prot arg conn, type, nick, text; switch (type) { case 'msg: conn.write_string("PRIVMSG"); case 'notice: conn.write_string("NOTICE"); default: throw(~type, "unknown type"); } conn.write_string(" " + nick + " :"); conn.write_buffer(`[1]); conn.write_string(text); conn.write_buffer(`[1, 13]); // $#Edited: 11 Feb 97 15:58 $user_neale // $#Edited: 11 Feb 97 23:04 $user_neale . @program $irc_room.add_user() +access=prot arg conn, nick, uhost; var body; if (nick in users.keys()) { return .user(nick); } if (nick == real_nick + "*") { return 0; } body = $irc_user.spawn(); body.set_name(nick, 'prop); body.set_uhost(uhost); body.move_to(this()); users = users.add(nick, body); // Launch a WHOIS on the nick to get extended information, and ping them to calculate lag nick = substr(nick, 1, nick.length() - 1); conn.write_string("WHOIS " + nick + "\n"); .ping(conn, nick); return body; // $#Edited: 12 Feb 97 01:23 $user_neale . @program $irc_room.do_001() +access=prot arg conn, args, text; // 001 is the first message we get. It tells us what our nick really is. real_nick = args[3]; .say("The IRC connection has been re-established."); .set_connected(1); // $#Edited: 12 Feb 97 02:39 $user_neale . @program $irc_room.do_352() +access=prot arg conn, args, text; // 352 is the result of a WHO command, it lists usernames and real names. We just want the username, .add_user will launch a whois to get the rest. .add_user(conn, args[8] + "*", args[5] + "@" + args[6]); // $#Edited: 12 Feb 97 03:10 $user_neale . @program $irc_room.connection() +access=prot var conn; conn = pass(); if (!valid(conn)) { .say("The IRC connection has been lost. I will try to reconnect."); .set_connected(0); .open_irc_connection(); return pass(); } return conn; // $#Edited: 12 Feb 97 02:30 $user_neale // $#Edited: 27 Feb 97 21:58 $user_neale . @program $irc_room.server() +access=pub //return "irc.wisp.net"; return "lowell.ma.us.undernet.org"; // $#Edited: 27 Feb 97 15:11 $user_neale . @program $irc_room.pulse() +access=pub if (caller() != $heart) { throw(~perm, "go away."); } if (.connected()) { .ping(.connection(), .channel()); } // $#Edited: 13 Feb 97 20:27 $user_neale . @program $irc_room.do_311() +access=prot arg conn, args, text; // 311 RPL_WHOISUSER .user(args[4] + "*").set_real_name(text); // $#Edited: 13 Feb 97 18:15 $user_neale . @program $irc_room.do_312() +access=prot arg conn, args, text; // 312 RPL_WHOISSERVER .user(args[4] + "*").set_server(args[5] + " (" + text + ")"); // $#Edited: 13 Feb 97 18:11 $user_neale . @program $irc_room.rewho() +access=pub arg [ignored]; (| .perms(sender(), 'trusts) |) || (> .perms(caller(), 'trusts) <); .reap(); .connection().write_string("WHO " + .channel() + "\n"); sender().tell("Rewhoing."); // $#Edited: 12 Feb 97 20:29 $user_neale . @program $irc_room.reap() +access=prot var a; for a in (users.keys()) { .del_user(a); } // $#Edited: 12 Feb 97 18:21 $user_neale . @program $irc_room.do_333() +access=prot arg conn, args, text; .rewho(); // $#Edited: 13 Feb 97 20:52 $user_neale . @program $irc_room.do_366() +access=prot arg conn, args, text; // 366, end of NAMES, is a good time to recount the users on the channel, since it gets sent when we first join. .rewho(); // $#Edited: 13 Feb 97 20:54 $user_neale . @program $irc_room.open_irc_connection() +access=pub (| .perms(sender(), 'trusts) |) || (> .perms(caller(), 'trusts) <); .set_connected(0); $heart.add_heartbeat(420); (> pass() <); // $#Edited: 13 Feb 97 21:37 $user_neale // $#Edited: 27 Feb 97 15:28 $user_neale . @program $irc_room.connected() +access=pub return connected; // $#Edited: 13 Feb 97 21:51 $user_neale . @program $irc_room.ping() +access=prot arg conn, nick; var buf; buf = ("PRIVMSG " + nick + " :").to_buffer(); buf += `[1]; buf += "PING ".to_buffer(); buf += time().to_string().to_buffer(); buf += `[1, 13]; conn.write_buffer(buf); // $#Edited: 13 Feb 97 22:23 $user_neale . @program $irc_room.channel() +access=pub return channel; // $#Edited: 13 Feb 97 22:23 $user_neale . @program $irc_room.set_connected() +access=pub arg bool; connected = bool; if (connected == 0) { .reap(); } // $#Edited: 13 Feb 97 23:00 $user_neale . @program $irc_room.description() +access=pub arg flags; var open, desc, lag, laggers, user, line; for user in (.contents()) { if ($irc_user in user.parents() && user.lag() > 0 && time() - user.lag_timestamp() < 1200) { lag += user.lag(); ++laggers; } } if (.connected()) { open = "open"; if (laggers > 0) { open += ", with " + $time.to_english(lag / laggers / 2) + " average recent lag"; } } else { open = "closed"; } line = .name() + " (the connection is " + open + ")"; desc = [(<$ctext_frob, [[(<$format, ["subj", [], [line], 'do_subj]>)], #[]]>)]; if ((| flags['prose] |)) { desc += [.prose()]; } desc += .format_contents(flags) + .format_exits(.visible_exits(), flags); return desc; // $#Edited: 14 Feb 97 01:55 $user_neale . @program $irc_room.do_313() +access=pub arg conn, args, text; // 313 RPL_WHOISOPERATOR .user(args[4] + "*").set_ircop(1); // $#Edited: 14 Feb 97 03:29 $user_neale . @program $irc_room.get_nick() +access=prot arg args; return explode(args[1], "!")[1] + "*"; // $#Edited: 14 Feb 97 13:50 $user_neale . @program $irc_room.user() +access=prot arg nick; return users[nick]; // $#Edited: 14 Feb 97 14:36 $user_neale . @program $irc_room.real_nick() +access=pub return real_nick; // $#Edited: 25 Feb 97 14:42 $user_neale . @program $irc_room.wallop() +access=prot arg line; var i; for i in (.contents()) { if ($admin in i.parents()) { i.tell("< " + line + " >"); } } // $#Edited: 25 Feb 97 19:24 $user_neale . @program $irc_room.parse_line() +access=pub arg buf; var err; //.wallop("| " + buf.to_string() + " |"); catch any { pass(buf); } with { if ((err = traceback()[1])[1] != ~methodnf) { .wallop(err[1] + ": " + err[2] + " [ " + buf.to_string() + " ]"); } } // $#Edited: 25 Feb 97 18:57 $user_neale // $#Edited: 25 Feb 97 19:20 $user_neale . @program $irc_room.connection_going_away() +access=pub arg [args]; if (!(this() in sender().parents())) { throw(~perms, sender() + " is not a child of " + this()); } //(> pass() <); .say("The IRC connection has been lost."); .say("(is_going_away) was called! Tell Neale!"); // $#Edited: 27 Feb 97 15:08 $user_neale // $#Edited: 27 Feb 97 15:24 $user_neale . @program $irc_room.do_error() +access=prot arg [ignored]; .say("The IRC connection punts."); // $#Edited: 27 Feb 97 16:56 $user_neale . @program $irc_room.port() +access=pub return 6668; // $#Edited: 27 Feb 97 22:01 $user_neale .