summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2017-03-19 18:36:03 -0400
committerAdam <Adam@anope.org>2017-03-19 18:36:03 -0400
commit2a886acbedb6b6386dbff3e591b0d4035d516b2a (patch)
tree765218b2fc476e9b1517d7f1e4aa78f57de87752 /modules
parentf237405a52f6b8efb606c5181ffe3bd75a6a6a8a (diff)
Get rid of relying on if(this) in WhoSends()
Diffstat (limited to 'modules')
-rw-r--r--modules/chanserv/main/channel.cpp9
-rw-r--r--modules/chanserv/main/channel.h1
-rw-r--r--modules/chanserv/main/chanserv.cpp19
-rw-r--r--modules/chanserv/topic.cpp4
-rw-r--r--modules/nickserv/recover.cpp2
-rw-r--r--modules/operserv/mode.cpp4
-rw-r--r--modules/protocol/unreal.cpp12
7 files changed, 37 insertions, 14 deletions
diff --git a/modules/chanserv/main/channel.cpp b/modules/chanserv/main/channel.cpp
index d10abbc0d..25430656e 100644
--- a/modules/chanserv/main/channel.cpp
+++ b/modules/chanserv/main/channel.cpp
@@ -347,6 +347,15 @@ void ChannelImpl::SetPrivate(bool _private)
Set(&ChannelType::_private, _private);
}
+ServiceBot *ChannelImpl::WhoSends()
+{
+ BotInfo *bi = GetBI();
+ if (bi != nullptr)
+ return bi->bot;
+
+ return Config->GetClient("ChanServ");
+}
+
ChanServ::ChanAccess *ChannelImpl::GetAccess(unsigned index)
{
std::vector<ChanServ::ChanAccess *> a = GetRefs<ChanServ::ChanAccess *>();
diff --git a/modules/chanserv/main/channel.h b/modules/chanserv/main/channel.h
index bb79df3c5..1cc6dc408 100644
--- a/modules/chanserv/main/channel.h
+++ b/modules/chanserv/main/channel.h
@@ -141,6 +141,7 @@ class ChannelImpl : public ChanServ::Channel
void SetPrivate(bool) override;
bool IsFounder(const User *user) override;
+ ServiceBot *WhoSends() override;
ChanServ::ChanAccess *GetAccess(unsigned index) override;
ChanServ::AccessGroup AccessFor(const User *u, bool = true) override;
ChanServ::AccessGroup AccessFor(NickServ::Account *nc, bool = true) override;
diff --git a/modules/chanserv/main/chanserv.cpp b/modules/chanserv/main/chanserv.cpp
index dd6bdb472..be29c0ab8 100644
--- a/modules/chanserv/main/chanserv.cpp
+++ b/modules/chanserv/main/chanserv.cpp
@@ -380,17 +380,17 @@ class ChanServCore : public Module
return;
if (c->ci)
- c->SetMode(c->ci->WhoSends(), "REGISTERED", "", false);
+ c->SetMode(nullptr, "REGISTERED", "", false);
else
- c->RemoveMode(c->ci->WhoSends(), "REGISTERED", "", false);
+ c->RemoveMode(nullptr, "REGISTERED", "", false);
const Anope::string &require = Config->GetModule(this)->Get<Anope::string>("require");
if (!require.empty())
{
if (c->ci)
- c->SetModes(c->ci->WhoSends(), false, "+%s", require.c_str());
+ c->SetModes(nullptr, false, "+%s", require.c_str());
else
- c->SetModes(c->ci->WhoSends(), false, "-%s", require.c_str());
+ c->SetModes(nullptr, false, "-%s", require.c_str());
}
}
@@ -485,8 +485,13 @@ class ChanServCore : public Module
else
{
if (!ci->GetBot())
- ci->WhoSends()->Assign(NULL, ci);
- if (ci->c->FindUser(ci->GetBot()) == NULL)
+ {
+ ServiceBot *bi = ci->WhoSends();
+ if (bi != nullptr)
+ bi->Assign(nullptr, ci);
+ }
+
+ if (ci->GetBot() != nullptr && ci->c->FindUser(ci->GetBot()) == nullptr)
{
Anope::string botmodes = Config->GetModule("botserv/main")->Get<Anope::string>("botmodes",
Config->GetModule("chanserv/main")->Get<Anope::string>("botmodes"));
@@ -535,7 +540,7 @@ class ChanServCore : public Module
if (cu && cm && !cu->status.HasMode(cm->mchar))
{
/* Our -o and their mode change crossing, bounce their mode */
- c->RemoveMode(c->ci->WhoSends(), mode, param);
+ c->RemoveMode(nullptr, mode, param);
/* We don't set mlocks until after the join has finished processing, it will stack with this change,
* so there isn't much for the user to remove except -nt etc which is likely locked anyway.
*/
diff --git a/modules/chanserv/topic.cpp b/modules/chanserv/topic.cpp
index d3546562e..005bcaf22 100644
--- a/modules/chanserv/topic.cpp
+++ b/modules/chanserv/topic.cpp
@@ -261,7 +261,9 @@ class CSTopic : public Module
/* Update channel topic */
if ((c->ci->IsTopicLock() || c->ci->IsKeepTopic()) && c->ci->GetLastTopic() != c->topic)
{
- c->ChangeTopic(!c->ci->GetLastTopicSetter().empty() ? c->ci->GetLastTopicSetter() : c->ci->WhoSends()->nick, c->ci->GetLastTopic(), c->ci->GetLastTopicTime() ? c->ci->GetLastTopicTime() : Anope::CurTime);
+ ServiceBot *sender = c->ci->WhoSends();
+ c->ChangeTopic(!c->ci->GetLastTopicSetter().empty() ? c->ci->GetLastTopicSetter() : (sender ? sender->nick : Me->GetName()),
+ c->ci->GetLastTopic(), c->ci->GetLastTopicTime() ? c->ci->GetLastTopicTime() : Anope::CurTime);
}
}
}
diff --git a/modules/nickserv/recover.cpp b/modules/nickserv/recover.cpp
index 5c4f3ac1d..386542fc9 100644
--- a/modules/nickserv/recover.cpp
+++ b/modules/nickserv/recover.cpp
@@ -295,7 +295,7 @@ class NSRecover : public Module
if (it != ei->end())
{
for (size_t i = 0; i < it->second.Modes().length(); ++i)
- c->SetMode(c->ci->WhoSends(), ModeManager::FindChannelModeByChar(it->second.Modes()[i]), u->GetUID());
+ c->SetMode(nullptr, ModeManager::FindChannelModeByChar(it->second.Modes()[i]), u->GetUID());
ei->erase(it);
if (ei->empty())
diff --git a/modules/operserv/mode.cpp b/modules/operserv/mode.cpp
index 84b4ba6fb..2dd9b899e 100644
--- a/modules/operserv/mode.cpp
+++ b/modules/operserv/mode.cpp
@@ -53,7 +53,7 @@ class CommandOSMode : public Command
const Channel::ModeList chmodes = c->GetModes();
for (Channel::ModeList::const_iterator it = chmodes.begin(), it_end = chmodes.end(); it != it_end && c; ++it)
- c->RemoveMode(c->ci->WhoSends(), it->first, it->second, false);
+ c->RemoveMode(nullptr, it->first, it->second, false);
if (!c)
{
@@ -71,7 +71,7 @@ class CommandOSMode : public Command
continue;
for (size_t i = uc->status.Modes().length(); i > 0; --i)
- c->RemoveMode(c->ci->WhoSends(), ModeManager::FindChannelModeByChar(uc->status.Modes()[i - 1]), uc->user->GetUID(), false);
+ c->RemoveMode(nullptr, ModeManager::FindChannelModeByChar(uc->status.Modes()[i - 1]), uc->user->GetUID(), false);
}
source.Reply(_("All modes cleared on \002{0}\002."), c->name);
diff --git a/modules/protocol/unreal.cpp b/modules/protocol/unreal.cpp
index fd6e31875..0bca595df 100644
--- a/modules/protocol/unreal.cpp
+++ b/modules/protocol/unreal.cpp
@@ -104,10 +104,16 @@ void unreal::senders::MessageChannel::Send(Channel* c)
/* Unreal does not support updating a channels TS without actually joining a user,
* so we will join and part us now
*/
- ServiceBot *bi = c->ci->WhoSends();
+ ServiceBot *bi;
+ if (c->ci)
+ bi = c->ci->WhoSends();
+ else
+ bi = Config->GetClient("ChanServ");
+
if (!bi)
- ;
- else if (c->FindUser(bi) == NULL)
+ return;
+
+ if (c->FindUser(bi) == NULL)
{
bi->Join(c);
bi->Part(c);