#include <newudp.h>
#define CHANNEL "channel"
#define COMMAND "cmd"
int filter_listeners(object ob, string channel) {
if (!ob->query_creator() || ob->check_earmuffs("intermud-all") ||
ob->check_earmuffs(channel))
return 0;
return 1;
} /* filter_listeners() */
void udp_channel(mapping data) {
object *list;
string msg, start;
int i;
/* Compatability with older systems. */
if (!data[CHANNEL])
data[CHANNEL] = data["CHANNEL"];
if (!data[COMMAND])
data[COMMAND] = data["CMD"];
switch(data[COMMAND]) {
case "emote":
start = capitalize(data[SENDER]) + "@" + capitalize(data[NAME]) +
" ";
break;
case "list":
list = filter_array(
users(), "filter_listeners", this_object(), data[CHANNEL]);
if (i = sizeof(list)) {
msg = "[" + capitalize(data[CHANNEL]) + "@" +
LOCAL_NAME + "] Listening:\n";
while(i--)
msg +=
" " + list[i]->query_cap_name() + "\n";
} else
msg = "[" + capitalize(data[CHANNEL]) + "@" +
LOCAL_NAME + "] Nobody Listening.\n";
INETD->send_udp(data[NAME], ([
REQUEST: REPLY,
RECIPIENT: data[SENDER],
ID: data[ID],
DATA: msg
]) );
return;
default:
start = capitalize(data[SENDER]) + "@" + capitalize(data[NAME])+
": ";
break;
}
if (lower_case(data[CHANNEL]) == "d-chat") return;
event(users(), "intermud_tell", start, data[DATA], data[CHANNEL]);
/* Never generate an error. Unknown channels can be ignored later. */
} /* udp_channel() */