368 |
|
*/ |
369 |
|
void |
370 |
|
sendto_channel_butone(struct Client *one, struct Client *from, |
371 |
< |
struct Channel *chptr, const char *command, |
371 |
> |
struct Channel *chptr, unsigned int type, |
372 |
|
const char *pattern, ...) |
373 |
|
{ |
374 |
|
va_list alocal, aremote, auid; |
379 |
|
dlink_node *ptr = NULL, *ptr_next = NULL; |
380 |
|
|
381 |
|
if (IsServer(from)) |
382 |
< |
local_len = ircsprintf(local_buf, ":%s %s %s ", |
383 |
< |
from->name, command, chptr->chname); |
382 |
> |
local_len = ircsprintf(local_buf, ":%s ", |
383 |
> |
from->name); |
384 |
|
else |
385 |
< |
local_len = ircsprintf(local_buf, ":%s!%s@%s %s %s ", |
386 |
< |
from->name, from->username, from->host, |
387 |
< |
command, chptr->chname); |
388 |
< |
remote_len = ircsprintf(remote_buf, ":%s %s %s ", |
389 |
< |
from->name, command, chptr->chname); |
390 |
< |
uid_len = ircsprintf(uid_buf, ":%s %s %s ", |
391 |
< |
ID(from), command, chptr->chname); |
385 |
> |
local_len = ircsprintf(local_buf, ":%s!%s@%s ", |
386 |
> |
from->name, from->username, from->host); |
387 |
> |
remote_len = ircsprintf(remote_buf, ":%s ", |
388 |
> |
from->name); |
389 |
> |
uid_len = ircsprintf(uid_buf, ":%s ", |
390 |
> |
ID(from)); |
391 |
|
|
392 |
|
va_start(alocal, pattern); |
393 |
|
va_start(aremote, pattern); |
406 |
|
|
407 |
|
DLINK_FOREACH_SAFE(ptr, ptr_next, chptr->members.head) |
408 |
|
{ |
409 |
< |
struct Client *target_p = ((struct Membership *)ptr->data)->client_p; |
409 |
> |
struct Membership *ms = ptr->data; |
410 |
> |
struct Client *target_p = ms->client_p; |
411 |
|
|
412 |
|
assert(IsClient(target_p)); |
413 |
|
|
414 |
|
if (IsDefunct(target_p) || HasUMode(target_p, UMODE_DEAF) || target_p->from == one) |
415 |
|
continue; |
416 |
|
|
417 |
+ |
if (type != 0 && (ms->flags & type) == 0) |
418 |
+ |
continue; |
419 |
+ |
|
420 |
|
if (MyConnect(target_p)) |
421 |
|
{ |
422 |
|
if (target_p->localClient->serial != current_serial) |