- if (chan->limit)
- {
- char foo[24];
- sprintf(foo," %lu",(unsigned long)chan->limit);
- strlcat(sparam,foo,MAXBUF);
- }
- if (*chan->custom_modes)
- {
- for (char* t = chan->custom_modes; *t; t++)
- *offset++ = *t;
- for (int z = 0; chan->custom_modes[z]; z++)
- {
- std::string extparam = chan->GetModeParameter(chan->custom_modes[z]);
- if (extparam != "")
- {
- charlcat(sparam,' ',MAXBUF);
- strlcat(sparam,extparam.c_str(),MAXBUF);
- }
- }
- }
- /* Null terminate scratch */
- *offset = '\0';
- strlcat(scratch,sparam,MAXMODES);
- return scratch;
-}
-
-
-/* compile a userlist of a channel into a string, each nick seperated by
- * spaces and op, voice etc status shown as @ and + */
-
-void userlist(userrec *user,chanrec *c)
-{
- if ((!c) || (!user))
- {
- log(DEFAULT,"*** BUG *** userlist was given an invalid parameter");
- return;
- }
-
- snprintf(list,MAXBUF,"353 %s = %s :", user->nick, c->name);
-
- std::map<char*,char*> *ulist= c->GetUsers();
- for (std::map<char*,char*>::iterator i = ulist->begin(); i != ulist->end(); i++)
- {
- char* o = i->second;
- userrec* otheruser = (userrec*)o;
- if ((!has_channel(user,c)) && (strchr(otheruser->modes,'i')))
- {
- /* user is +i, and source not on the channel, does not show
- * nick in NAMES list */
- continue;
- }
- strlcat(list,cmode(otheruser,c),MAXBUF);
- strlcat(list,otheruser->nick,MAXBUF);
- charlcat(list,' ',MAXBUF);
- if (strlen(list)>(480-NICKMAX))
- {
- /* list overflowed into
- * multiple numerics */
- WriteServ_NoFormat(user->fd,list);
- snprintf(list,MAXBUF,"353 %s = %s :", user->nick, c->name);
- }
- }
- /* if whats left in the list isnt empty, send it */
- if (list[strlen(list)-1] != ':')
- {
- WriteServ_NoFormat(user->fd,list);
- }
-}
-
-/* return a count of the users on a specific channel accounting for
- * invisible users who won't increase the count. e.g. for /LIST */
-
-int usercount_i(chanrec *c)
-{
- int count = 0;
-
- if (!c)
- {
- log(DEFAULT,"*** BUG *** usercount_i was given an invalid parameter");
- return 0;
- }
-
- for (user_hash::const_iterator i = clientlist.begin(); i != clientlist.end(); i++)
- {
- if (has_channel(i->second,c))
- {
- if (i->second->registered == 7)
- {
- if ((!has_channel(i->second,c)) && (strchr(i->second->modes,'i')))
- {
- /* user is +i, and source not on the channel, does not show
- * nick in NAMES list */
- continue;
- }
- count++;
- }
- }
- }
- log(DEBUG,"usercount_i: %s %lu",c->name,(unsigned long)count);
- return count;
-}