|
@@ -1699,13 +1699,13 @@ static int got315(char *from, char *msg)
|
|
|
return 0;
|
|
return 0;
|
|
|
/* Finished getting who list, can now be considered officially ON CHANNEL */
|
|
/* Finished getting who list, can now be considered officially ON CHANNEL */
|
|
|
chan->status |= CHAN_ACTIVE;
|
|
chan->status |= CHAN_ACTIVE;
|
|
|
- chan->status &= ~CHAN_PEND;
|
|
|
|
|
|
|
+ chan->status &= ~(CHAN_PEND | CHAN_JOINING);
|
|
|
/* Am *I* on the channel now? if not, well d0h. */
|
|
/* Am *I* on the channel now? if not, well d0h. */
|
|
|
if (!ismember(chan, botname)) {
|
|
if (!ismember(chan, botname)) {
|
|
|
- putlog(LOG_MISC | LOG_JOIN, chan->dname, "Oops, I'm not really on %s.",
|
|
|
|
|
- chan->dname);
|
|
|
|
|
|
|
+ putlog(LOG_MISC | LOG_JOIN, chan->dname, "Oops, I'm not really on %s.", chan->dname);
|
|
|
clear_channel(chan, 1);
|
|
clear_channel(chan, 1);
|
|
|
chan->status &= ~CHAN_ACTIVE;
|
|
chan->status &= ~CHAN_ACTIVE;
|
|
|
|
|
+ chan->status |= CHAN_JOINING;
|
|
|
dprintf(DP_MODE, "JOIN %s %s\n",
|
|
dprintf(DP_MODE, "JOIN %s %s\n",
|
|
|
(chan->name[0]) ? chan->name : chan->dname,
|
|
(chan->name[0]) ? chan->name : chan->dname,
|
|
|
chan->channel.key[0] ? chan->channel.key : chan->key_prot);
|
|
chan->channel.key[0] ? chan->channel.key : chan->key_prot);
|
|
@@ -1929,6 +1929,7 @@ static int got403(char *from, char *msg)
|
|
|
"Unique channel %s does not exist... Attempting to join with "
|
|
"Unique channel %s does not exist... Attempting to join with "
|
|
|
"short name.", chname);
|
|
"short name.", chname);
|
|
|
dprintf(DP_SERVER, "JOIN %s\n", chan->dname);
|
|
dprintf(DP_SERVER, "JOIN %s\n", chan->dname);
|
|
|
|
|
+ chan->status |= CHAN_JOINING;
|
|
|
} else {
|
|
} else {
|
|
|
/* We have found the channel, so the server has given us the short
|
|
/* We have found the channel, so the server has given us the short
|
|
|
* name. Prefix another '!' to it, and attempt the join again...
|
|
* name. Prefix another '!' to it, and attempt the join again...
|
|
@@ -2261,7 +2262,7 @@ static int gotjoin(char *from, char *chname)
|
|
|
/* uh, what?! i'm on the channel?! */
|
|
/* uh, what?! i'm on the channel?! */
|
|
|
putlog(LOG_ERROR, "*", "confused bot: guess I'm on %s and didn't realize it", chan->dname);
|
|
putlog(LOG_ERROR, "*", "confused bot: guess I'm on %s and didn't realize it", chan->dname);
|
|
|
chan->status |= CHAN_ACTIVE;
|
|
chan->status |= CHAN_ACTIVE;
|
|
|
- chan->status &= ~CHAN_PEND;
|
|
|
|
|
|
|
+ chan->status &= ~(CHAN_PEND | CHAN_JOINING);
|
|
|
reset_chan_info(chan);
|
|
reset_chan_info(chan);
|
|
|
} else {
|
|
} else {
|
|
|
int splitjoin = 0;
|
|
int splitjoin = 0;
|
|
@@ -2438,7 +2439,7 @@ static int gotpart(char *from, char *msg)
|
|
|
if (match_my_nick(nick))
|
|
if (match_my_nick(nick))
|
|
|
irc_log(chan, "Parting");
|
|
irc_log(chan, "Parting");
|
|
|
clear_channel(chan, 1);
|
|
clear_channel(chan, 1);
|
|
|
- chan->status &= ~(CHAN_ACTIVE | CHAN_PEND);
|
|
|
|
|
|
|
+ chan->status &= ~(CHAN_ACTIVE | CHAN_PEND | CHAN_JOINING);
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|
|
|
if (chan && !channel_pending(chan)) {
|
|
if (chan && !channel_pending(chan)) {
|
|
@@ -2446,7 +2447,7 @@ static int gotpart(char *from, char *msg)
|
|
|
/* whoa! */
|
|
/* whoa! */
|
|
|
putlog(LOG_ERRORS, "*", "confused bot: guess I'm on %s and didn't realize it", chan->dname);
|
|
putlog(LOG_ERRORS, "*", "confused bot: guess I'm on %s and didn't realize it", chan->dname);
|
|
|
chan->status |= CHAN_ACTIVE;
|
|
chan->status |= CHAN_ACTIVE;
|
|
|
- chan->status &= ~CHAN_PEND;
|
|
|
|
|
|
|
+ chan->status &= ~(CHAN_PEND | CHAN_JOINING);
|
|
|
reset_chan_info(chan);
|
|
reset_chan_info(chan);
|
|
|
}
|
|
}
|
|
|
set_handle_laston(chan->dname, u, now);
|
|
set_handle_laston(chan->dname, u, now);
|
|
@@ -2462,11 +2463,13 @@ static int gotpart(char *from, char *msg)
|
|
|
/* If it was me, all hell breaks loose... */
|
|
/* If it was me, all hell breaks loose... */
|
|
|
if (match_my_nick(nick)) {
|
|
if (match_my_nick(nick)) {
|
|
|
clear_channel(chan, 1);
|
|
clear_channel(chan, 1);
|
|
|
- chan->status &= ~(CHAN_ACTIVE | CHAN_PEND);
|
|
|
|
|
- if (shouldjoin(chan))
|
|
|
|
|
|
|
+ chan->status &= ~(CHAN_ACTIVE | CHAN_PEND | CHAN_JOINING);
|
|
|
|
|
+ if (shouldjoin(chan)) {
|
|
|
dprintf(DP_MODE, "JOIN %s %s\n",
|
|
dprintf(DP_MODE, "JOIN %s %s\n",
|
|
|
(chan->name[0]) ? chan->name : chan->dname,
|
|
(chan->name[0]) ? chan->name : chan->dname,
|
|
|
chan->channel.key[0] ? chan->channel.key : chan->key_prot);
|
|
chan->channel.key[0] ? chan->channel.key : chan->key_prot);
|
|
|
|
|
+ chan->status |= CHAN_JOINING;
|
|
|
|
|
+ }
|
|
|
} else
|
|
} else
|
|
|
check_lonely_channel(chan);
|
|
check_lonely_channel(chan);
|
|
|
}
|
|
}
|
|
@@ -2489,8 +2492,9 @@ static int gotkick(char *from, char *origmsg)
|
|
|
|
|
|
|
|
char *nick = newsplit(&msg);
|
|
char *nick = newsplit(&msg);
|
|
|
|
|
|
|
|
- if (match_my_nick(nick) && channel_pending(chan) && shouldjoin(chan)) {
|
|
|
|
|
|
|
+ if (match_my_nick(nick) && channel_pending(chan) && shouldjoin(chan) && !channel_joining(chan)) {
|
|
|
chan->status &= ~(CHAN_ACTIVE | CHAN_PEND);
|
|
chan->status &= ~(CHAN_ACTIVE | CHAN_PEND);
|
|
|
|
|
+ chan->status |= CHAN_JOINING;
|
|
|
dprintf(DP_MODE, "JOIN %s %s\n",
|
|
dprintf(DP_MODE, "JOIN %s %s\n",
|
|
|
(chan->name[0]) ? chan->name : chan->dname,
|
|
(chan->name[0]) ? chan->name : chan->dname,
|
|
|
chan->channel.key[0] ? chan->channel.key : chan->key_prot);
|
|
chan->channel.key[0] ? chan->channel.key : chan->key_prot);
|
|
@@ -2537,11 +2541,12 @@ static int gotkick(char *from, char *origmsg)
|
|
|
}
|
|
}
|
|
|
irc_log(chan, "%s was kicked by %s (%s)", s1, from, msg);
|
|
irc_log(chan, "%s was kicked by %s (%s)", s1, from, msg);
|
|
|
/* Kicked ME?!? the sods! */
|
|
/* Kicked ME?!? the sods! */
|
|
|
- if (match_my_nick(nick) && shouldjoin(chan)) {
|
|
|
|
|
|
|
+ if (match_my_nick(nick) && shouldjoin(chan) && !channel_joining(chan)) {
|
|
|
chan->status &= ~(CHAN_ACTIVE | CHAN_PEND);
|
|
chan->status &= ~(CHAN_ACTIVE | CHAN_PEND);
|
|
|
dprintf(DP_MODE, "JOIN %s %s\n",
|
|
dprintf(DP_MODE, "JOIN %s %s\n",
|
|
|
(chan->name[0]) ? chan->name : chan->dname,
|
|
(chan->name[0]) ? chan->name : chan->dname,
|
|
|
chan->channel.key[0] ? chan->channel.key : chan->key_prot);
|
|
chan->channel.key[0] ? chan->channel.key : chan->key_prot);
|
|
|
|
|
+ chan->status |= CHAN_JOINING;
|
|
|
clear_channel(chan, 1);
|
|
clear_channel(chan, 1);
|
|
|
} else {
|
|
} else {
|
|
|
killmember(chan, nick);
|
|
killmember(chan, nick);
|