diff options
author | Adam <Adam@anope.org> | 2013-06-01 21:51:00 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2013-06-01 21:56:52 -0400 |
commit | 9956da18e3186591b5347e63081756390f4f35d5 (patch) | |
tree | 61992e9d8b370cec2785db1ea281175359088cc3 /src | |
parent | b56e71ab14b020a3a01f1fbd183382083156aaf4 (diff) |
Move OnJoinChannel event to trigger after the user has completely joined and document it more about what you should and shouldnt do in it
Diffstat (limited to 'src')
-rw-r--r-- | src/bots.cpp | 2 | ||||
-rw-r--r-- | src/channels.cpp | 12 | ||||
-rw-r--r-- | src/messages.cpp | 12 |
3 files changed, 13 insertions, 13 deletions
diff --git a/src/bots.cpp b/src/bots.cpp index 74cf0d9e4..e2c346837 100644 --- a/src/bots.cpp +++ b/src/bots.cpp @@ -176,7 +176,7 @@ void BotInfo::Join(Channel *c, ChannelStatus *status) if (c->FindUser(this) != NULL) return; - c->JoinUser(this); + c->JoinUser(this, status); if (IRCD) IRCD->SendJoin(this, c, status); } diff --git a/src/channels.cpp b/src/channels.cpp index ff060dce9..9fdc44a49 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -93,7 +93,7 @@ void Channel::Sync() void Channel::CheckModes() { - if (this->bouncy_modes) + if (this->bouncy_modes || this->syncing) return; /* Check for mode bouncing */ @@ -170,7 +170,7 @@ bool Channel::CheckDelete() return MOD_RESULT != EVENT_STOP && this->users.empty(); } -ChanUserContainer* Channel::JoinUser(User *user) +ChanUserContainer* Channel::JoinUser(User *user, const ChannelStatus *status) { if (user->server && user->server->IsSynced()) Log(user, this, "join"); @@ -178,8 +178,8 @@ ChanUserContainer* Channel::JoinUser(User *user) ChanUserContainer *cuc = new ChanUserContainer(user, this); user->chans[this] = cuc; this->users[user] = cuc; - - FOREACH_MOD(OnJoinChannel, (user, this)); + if (status) + cuc->status = *status; return cuc; } @@ -732,7 +732,7 @@ void Channel::KickInternal(MessageSource &source, const Anope::string &nick, con User *target = User::Find(nick); if (!target) { - Log() << "Channel::KickInternal got a nonexistent user " << nick << " on " << this->name << ": " << reason; + Log(LOG_DEBUG) << "Channel::KickInternal got a nonexistent user " << nick << " on " << this->name << ": " << reason; return; } @@ -746,7 +746,7 @@ void Channel::KickInternal(MessageSource &source, const Anope::string &nick, con ChanUserContainer *cu = target->FindChannel(this); if (cu == NULL) { - Log() << "Channel::KickInternal got kick for user " << target->nick << " from " << source.GetSource() << " who isn't on channel " << this->name; + Log(LOG_DEBUG) << "Channel::KickInternal got kick for user " << target->nick << " from " << source.GetSource() << " who isn't on channel " << this->name; return; } diff --git a/src/messages.cpp b/src/messages.cpp index ce92841e6..fcaeffa43 100644 --- a/src/messages.cpp +++ b/src/messages.cpp @@ -128,18 +128,18 @@ void Join::SJoin(MessageSource &source, const Anope::string &chan, time_t ts, co User *u = it->second; /* Add the user to the channel */ - ChanUserContainer *cc = c->JoinUser(u); + c->JoinUser(u, keep_their_modes ? &status : NULL); - /* Update their status internally on the channel */ - if (keep_their_modes) - cc->status = status; + /* Check if the user is allowed to join */ + if (c->CheckKick(u)) + continue; /* Set whatever modes the user should have, and remove any that * they aren't allowed to have (secureops etc). */ c->SetCorrectModes(u, true); - - c->CheckKick(u); + + FOREACH_MOD(OnJoinChannel, (u, c)); } /* Channel is done syncing */ |