/* Do not remove the headers from this file! see /USAGE for more info. */
//:ADMINCOMMAND
//USAGE: listeners
// listeners <channel name>
//
//Displays list of people listening to channels
//Admin only
/*
** listeners.c -- displays info on people listening to channels
**
** Note: this is an admin only command.
**
** 950727, Deathblade: Created.
*/
#include <channel.h>
inherit CMD;
private nomask string fmt_listener(object listener)
{
if ( !listener )
return "<null>";
if ( function_exists("query_link", listener) )
{
if ( !listener->query_link() ||
!interactive(listener->query_link()) )
return sprintf("%s (link-dead)", listener->query_name());
return sprintf("%s", listener->query_name());
}
return sprintf("%O", listener);
}
private void show_one_channel(string channel_name)
{
object * listeners;
int flags;
string flagstr = ":";
listeners = CHANNEL_D->query_listeners(channel_name);
if ( !listeners )
{
out("No such channel: " + channel_name + "\n");
return;
}
listeners -= ({ 0 });
flags = CHANNEL_D->query_flags(channel_name);
if ( flags & CHANNEL_WIZ_ONLY )
flagstr += " wiz";
if ( flags & CHANNEL_ADMIN_ONLY )
flagstr += " admin";
if ( flags & CHANNEL_PERMANENT )
flagstr += " permanent";
out(channel_name + flagstr + "\n " +
implode(map_array(listeners, (: fmt_listener :)), ", ") +
"\n\n");
}
private void show_users_channels(object user)
{
out("*** NOT YET IMPLEMENTED ***\n");
}
private void main(mixed *argv)
{
if ( !check_privilege(1) )
{
out("Sorry, this command is only available to admins.\n");
return;
}
if ( argv[0] )
{
if ( objectp(argv[0]) )
show_users_channels(argv[0]);
else
show_one_channel(argv[0]);
} else {
map(CHANNEL_D->query_channels(), (: show_one_channel :));
}
}