X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/d4715e8f2867df6d775289446b4e002ff5656476..12894c8888675e4627d0e16b850e73648b5f3dce:/extensions/m_olist.c diff --git a/extensions/m_olist.c b/extensions/m_olist.c index c23fddc..df15928 100644 --- a/extensions/m_olist.c +++ b/extensions/m_olist.c @@ -62,7 +62,6 @@ static void list_named_channel(struct Client *source_p, const char *name); /* ** mo_olist -** parv[0] = sender prefix ** parv[1] = channel */ static int @@ -79,15 +78,9 @@ mo_olist(struct Client *client_p, struct Client *source_p, int parc, const char /* If no arg, do all channels *whee*, else just one channel */ if(parc < 2 || EmptyString(parv[1])) - { - report_operspy(source_p, "LIST", NULL); list_all_channels(source_p); - } else - { - report_operspy(source_p, "LIST", parv[1]); list_named_channel(source_p, parv[1]); - } sendto_one(source_p, form_str(RPL_LISTEND), me.name, source_p->name); return 0; @@ -105,15 +98,18 @@ list_all_channels(struct Client *source_p) { struct Channel *chptr; rb_dlink_node *ptr; + + report_operspy(source_p, "LIST", NULL); sendto_one(source_p, form_str(RPL_LISTSTART), me.name, source_p->name); RB_DLINK_FOREACH(ptr, global_channel_list.head) { chptr = ptr->data; - sendto_one(source_p, form_str(RPL_LIST), + sendto_one(source_p, ":%s 322 %s %s %lu :[%s] %s", me.name, source_p->name, chptr->chname, rb_dlink_list_length(&chptr->members), + channel_modes(chptr, &me), chptr->topic == NULL ? "" : chptr->topic); } @@ -133,23 +129,24 @@ list_named_channel(struct Client *source_p, const char *name) char *p; char *n = LOCAL_COPY(name); - sendto_one(source_p, form_str(RPL_LISTSTART), me.name, source_p->name); - if((p = strchr(n, ','))) *p = '\0'; + /* Put operspy notice before any output, but only if channel exists */ + chptr = EmptyString(n) ? NULL : find_channel(n); + if(chptr != NULL) + report_operspy(source_p, "LIST", chptr->chname); + + sendto_one(source_p, form_str(RPL_LISTSTART), me.name, source_p->name); + if(EmptyString(n)) - { - sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL, - form_str(ERR_NOSUCHCHANNEL), n); return; - } - if((chptr = find_channel(n)) == NULL) + if(chptr == NULL) sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL, form_str(ERR_NOSUCHCHANNEL), n); else - sendto_one(source_p, form_str(RPL_LIST), me.name, source_p->name, - chptr->chname, rb_dlink_list_length(&chptr->members), - chptr->topic ? chptr->topic : ""); + sendto_one(source_p, ":%s 322 %s %s %lu :[%s] %s", me.name, source_p->name, + chptr->chname, rb_dlink_list_length(&chptr->members), + channel_modes(chptr, &me), chptr->topic ? chptr->topic : ""); }