--- chanserv.c 2006-10-30 10:45:49.141355864 +0100 +++ chanserv-new.c 2006-10-30 10:44:15.462597200 +0100 @@ -7026,6 +7026,7 @@ { int ii, arc; char *tempnix, *tempptr, **arv; + char *currnick; struct Luser *currlptr; /* they want to voice other people */ @@ -7039,26 +7040,35 @@ dnicks[0] = '\0'; for (ii = 0; ii < arc; ii++) { - if (*arv[ii] == '-') - currlptr = FindClient(arv[ii] + 1); + if ((*arv[ii] == '-') || (*arv[ii] == '+')) + currnick = arv[ii] + 1; else - currlptr = FindClient(arv[ii]); + currnick = arv[ii]; + currlptr = FindClient(currnick); if (!IsChannelMember(chptr, currlptr)) continue; + /* Cute little hack to ignore voice requests for autodevoiced nicks. + * I do hope no nicks start with +, this char can be prefixed to force + * a voice anyway + */ + if ((*arv[ii] != '-') && (*arv[ii] != '+') && + (GetAccess(cptr, lptr) == cptr->access_lvl[CA_AUTODEOP])) + continue; + if (arv[ii][0] == '-') { dnicks = (char *) MyRealloc(dnicks, strlen(dnicks) - + strlen(arv[ii] + 1) + (2 * sizeof(char))); - strcat(dnicks, arv[ii] + 1); + + strlen(currnick) + (2 * sizeof(char))); + strcat(dnicks, currnick); strcat(dnicks, " "); } else { vnicks = (char *) MyRealloc(vnicks, strlen(vnicks) - + strlen(arv[ii]) + (2 * sizeof(char))); - strcat(vnicks, arv[ii]); + + strlen(currnick) + (2 * sizeof(char))); + strcat(vnicks, currnick); strcat(vnicks, " "); } }