Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2020
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
TCL 1.52 KB | None | 0 0
  1. static int tcl_chanlist STDVAR
  2. {
  3.   char nuh[1024];
  4.   int f;
  5.   memberlist *m;
  6.   struct chanset_t *chan;
  7.   struct flag_record plus = { FR_CHAN | FR_GLOBAL | FR_BOT, 0, 0, 0, 0, 0 },
  8.                      minus = { FR_CHAN | FR_GLOBAL | FR_BOT, 0, 0, 0, 0, 0},
  9.                      user = { FR_CHAN | FR_GLOBAL | FR_BOT, 0, 0, 0, 0, 0 };
  10.  
  11.   BADARGS(2, 3, " channel ?flags?");
  12.  
  13.   chan = findchan_by_dname(argv[1]);
  14.   if (!chan) {
  15.     Tcl_AppendResult(irp, "invalid channel: ", argv[1], NULL);
  16.     return TCL_ERROR;
  17.   }
  18.   if (argc == 2) {
  19.     /* No flag restrictions so just whiz it thru quick */
  20.     for (m = chan->channel.member; m && m->nick[0]; m = m->next)
  21.       Tcl_AppendElement(irp, m->nick);
  22.     return TCL_OK;
  23.   }
  24.   break_down_flags(argv[2], &plus, &minus);
  25.   f = (minus.global || minus.udef_global || minus.chan || minus.udef_chan ||
  26.        minus.bot);
  27.   /* Return empty set if asked for flags but flags don't exist */
  28.  if (!plus.global && !plus.udef_global && !plus.chan && !plus.udef_chan &&
  29.      !plus.bot && !f)
  30.    return TCL_OK;
  31.  minus.match = plus.match ^ (FR_AND | FR_OR);
  32.  
  33.  for (m = chan->channel.member; m && m->nick[0]; m = m->next) {
  34.    if (!m->user) {
  35.      egg_snprintf(nuh, sizeof nuh, "%s!%s", m->nick, m->userhost);
  36.      m->user = get_user_by_host(nuh);
  37.    }
  38.    get_user_flagrec(m->user, &user, argv[1]);
  39.    user.match = plus.match;
  40.    if (flagrec_eq(&plus, &user)) {
  41.      if (!f || !flagrec_eq(&minus, &user))
  42.        Tcl_AppendElement(irp, m->nick);
  43.    }
  44.  }
  45.  return TCL_OK;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement