diff options
-rw-r--r-- | src/channels.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/channels.c b/src/channels.c index ee8985c33..85f17785e 100644 --- a/src/channels.c +++ b/src/channels.c @@ -1814,6 +1814,32 @@ Channel *join_user_update(User * user, Channel * chan, const char *name, /* If it's a new channel, so we need to create it first. */ if (!chan) chan = chan_create(name, chants); + else + { + // Check chants against 0, as not every ircd sends JOIN with a TS. + if (chan->creation_time > chants && chants != 0) + { + struct c_userlist *cu; + const char *modes[6]; + + chan->creation_time = chants; + for (cu = chan->users; cu; cu = cu->next) + { + /* XXX */ + modes[0] = "-ov"; + modes[1] = cu->user->nick; + modes[2] = cu->user->nick; + chan_set_modes(s_OperServ, chan, 3, modes, 2); + } + if (chan->ci && chan->ci->bi) + { + /* This is ugly, but it always works */ + ircdproto->SendPart(chan->ci->bi, chan->name, "TS reop"); + bot_join(chan->ci); + } + /* XXX simple modes and bans */ + } + } if (debug) alog("debug: %s joins %s", user->nick, chan->name); |