summaryrefslogtreecommitdiff
path: root/src/channels.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/channels.c')
-rw-r--r--src/channels.c26
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);