/*
* m_whois
- * parv[0] = sender prefix
* parv[1] = nickname masklist
*/
static int
/*
* ms_whois
- * parv[0] = sender prefix
* parv[1] = server to reply
* parv[2] = nickname to whois
*/
static void
single_whois(struct Client *source_p, struct Client *target_p, int operspy)
{
+ const char *awaymsg;
char buf[BUFSIZE];
rb_dlink_node *ptr;
struct membership *msptr;
hook_data_client hdata;
int visible;
int extra_space = 0;
+ struct DictionaryIter iter;
+ struct MetadataEntry *md;
if(target_p->user == NULL)
{
target_p->name, target_p->servptr->name,
target_p->servptr->info);
- if(target_p->user->away)
+ if(!IsCapable(source_p, CLICAP_PRESENCE) && (awaymsg = get_metadata(target_p, "away")) != NULL)
sendto_one_numeric(source_p, RPL_AWAY, form_str(RPL_AWAY),
- target_p->name, target_p->user->away);
+ target_p->name, awaymsg);
if(IsOper(target_p))
{
}
}
+ DICTIONARY_FOREACH(md, &iter, target_p->user->metadata)
+ {
+ /* XXX: hack around "away" for legacy clients. --nenolod */
+ if (!IsCapable(source_p, CLICAP_PRESENCE) && !irccmp(md->key, "away"))
+ continue;
+
+ sendto_one_numeric(source_p, RPL_WHOISMETADATA,
+ form_str(RPL_WHOISMETADATA),
+ target_p->name, md->key, md->value);
+ }
+
hdata.client = source_p;
hdata.target = target_p;