Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static int tcl_chanlist STDVAR
- {
- char nuh[1024];
- int f;
- memberlist *m;
- struct chanset_t *chan;
- struct flag_record plus = { FR_CHAN | FR_GLOBAL | FR_BOT, 0, 0, 0, 0, 0 },
- minus = { FR_CHAN | FR_GLOBAL | FR_BOT, 0, 0, 0, 0, 0},
- user = { FR_CHAN | FR_GLOBAL | FR_BOT, 0, 0, 0, 0, 0 };
- BADARGS(2, 3, " channel ?flags?");
- chan = findchan_by_dname(argv[1]);
- if (!chan) {
- Tcl_AppendResult(irp, "invalid channel: ", argv[1], NULL);
- return TCL_ERROR;
- }
- if (argc == 2) {
- /* No flag restrictions so just whiz it thru quick */
- for (m = chan->channel.member; m && m->nick[0]; m = m->next)
- Tcl_AppendElement(irp, m->nick);
- return TCL_OK;
- }
- break_down_flags(argv[2], &plus, &minus);
- f = (minus.global || minus.udef_global || minus.chan || minus.udef_chan ||
- minus.bot);
- /* Return empty set if asked for flags but flags don't exist */
- if (!plus.global && !plus.udef_global && !plus.chan && !plus.udef_chan &&
- !plus.bot && !f)
- return TCL_OK;
- minus.match = plus.match ^ (FR_AND | FR_OR);
- for (m = chan->channel.member; m && m->nick[0]; m = m->next) {
- if (!m->user) {
- egg_snprintf(nuh, sizeof nuh, "%s!%s", m->nick, m->userhost);
- m->user = get_user_by_host(nuh);
- }
- get_user_flagrec(m->user, &user, argv[1]);
- user.match = plus.match;
- if (flagrec_eq(&plus, &user)) {
- if (!f || !flagrec_eq(&minus, &user))
- Tcl_AppendElement(irp, m->nick);
- }
- }
- return TCL_OK;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement