callback(bot, chan, data);
}
-void get_userlist_with_invisible(struct ChanNode *chan, userlist_callback_t callback, void *data) {
+void _get_userlist_with_invisible(struct ChanNode *chan, userlist_callback_t callback, void *data, int force) {
struct ClientSocket *bot;
for(bot = getBots(SOCKET_FLAG_READY, NULL); bot; bot = getBots(SOCKET_FLAG_READY, bot)) {
if(isUserOnChan(bot->user, chan))
//check if we really need to who the channel
//invisible users can only be present if chanmode +D or +d is set!
int do_who = (!(chan->flags & CHANFLAG_RECEIVED_USERLIST)) || (isModeSet(chan->modes, 'd') || isModeSet(chan->modes, 'D'));
- if(!do_who) {
+ if(!do_who && force) {
struct ChanUser *chanuser;
for(chanuser = getChannelUsers(chan, NULL); chanuser; chanuser = getChannelUsers(chan, chanuser)) {
if(!(chanuser->user->flags & (USERFLAG_ISAUTHED | USERFLAG_ISIRCOP | USERFLAG_ISBOT)) && (time(0) - chanuser->user->last_who) > REWHO_TIMEOUT) {
void recv_whohandler_354(struct ClientSocket *client, char **argv, unsigned int argc);
void recv_whohandler_315(struct ClientSocket *client, char **argv, unsigned int argc);
void get_userlist(struct ChanNode *chan, userlist_callback_t callback, void *data);
-void get_userlist_with_invisible(struct ChanNode *chan, userlist_callback_t callback, void *data);
+#define get_userlist_if_invisible(CHAN, CALLBACK, DATA) _get_userlist_with_invisible(CHAN, CALLBACK, DATA, 0)
+#define get_userlist_with_invisible(CHAN, CALLBACK, DATA) _get_userlist_with_invisible(CHAN, CALLBACK, DATA, 1)
+void _get_userlist_with_invisible(struct ChanNode *chan, userlist_callback_t callback, void *data, int force);
void get_userauth(struct UserNode *user, userauth_callback_t callback, void *data);
void free_whoqueue();
cache->user = user;
cache->event = event;
cache->nicks = strdup(merge_argv(argv, 0, argc));
- get_userlist_with_invisible(chan, neonserv_cmd_op_userlist_lookup, cache);
+ get_userlist_if_invisible(chan, neonserv_cmd_op_userlist_lookup, cache);
}
static USERLIST_CALLBACK(neonserv_cmd_op_userlist_lookup) {
cache->nickmask = strdup(argv[1]);
} else
cache->nickmask = NULL;
- get_userlist_with_invisible(chan, neonserv_cmd_opall_userlist_lookup, cache);
+ get_userlist_if_invisible(chan, neonserv_cmd_opall_userlist_lookup, cache);
}
static USERLIST_CALLBACK(neonserv_cmd_opall_userlist_lookup) {
cache->client = client;
cache->textclient = getTextBot();
cache->user = user;
- get_userlist_with_invisible(chan, neonserv_cmd_peek_userlist_lookup, cache);
+ get_userlist_if_invisible(chan, neonserv_cmd_peek_userlist_lookup, cache);
}
static USERLIST_CALLBACK(neonserv_cmd_peek_userlist_lookup) {
cache->user = user;
cache->event = event;
cache->nicks = strdup(merge_argv(argv, 0, argc));
- get_userlist_with_invisible(chan, neonserv_cmd_voice_userlist_lookup, cache);
+ get_userlist_if_invisible(chan, neonserv_cmd_voice_userlist_lookup, cache);
}
static USERLIST_CALLBACK(neonserv_cmd_voice_userlist_lookup) {
cache->nickmask = strdup(argv[0]);
} else
cache->nickmask = NULL;
- get_userlist_with_invisible(chan, neonserv_cmd_voiceall_userlist_lookup, cache);
+ get_userlist_if_invisible(chan, neonserv_cmd_voiceall_userlist_lookup, cache);
}
static USERLIST_CALLBACK(neonserv_cmd_voiceall_userlist_lookup) {