diff options
Diffstat (limited to 'modules/protocol/inspircd20.cpp')
| -rw-r--r-- | modules/protocol/inspircd20.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/modules/protocol/inspircd20.cpp b/modules/protocol/inspircd20.cpp index 04a23c104..abe9779b6 100644 --- a/modules/protocol/inspircd20.cpp +++ b/modules/protocol/inspircd20.cpp @@ -538,7 +538,7 @@ class ProtoInspIRCd : public Module Capab.insert("NOQUIT"); - Implementation i[] = { I_OnUserNickChange, I_OnServerSync, I_OnChannelCreate, I_OnChanRegistered, I_OnDelChan, I_OnMLock, I_OnUnMLock }; + Implementation i[] = { I_OnUserNickChange, I_OnServerSync, I_OnChannelCreate, I_OnChanRegistered, I_OnDelChan, I_OnMLock, I_OnUnMLock, I_OnSetChannelOption }; ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation)); if (Config->Numeric.empty()) @@ -576,13 +576,13 @@ class ProtoInspIRCd : public Module void OnChanRegistered(ChannelInfo *ci) anope_override { - if (Config->UseServerSideMLock) + if (Config->UseServerSideMLock && ci->c) { Anope::string modes = ci->GetMLockAsString(false).replace_all_cs("+", "").replace_all_cs("-", ""); SendChannelMetadata(ci->c, "mlock", modes); } - if (Config->UseServerSideTopicLock && has_svstopic_topiclock) + if (Config->UseServerSideTopicLock && has_svstopic_topiclock && ci->c) { Anope::string on = ci->HasFlag(CI_TOPICLOCK) ? "1" : ""; SendChannelMetadata(ci->c, "topiclock", on); @@ -591,10 +591,10 @@ class ProtoInspIRCd : public Module void OnDelChan(ChannelInfo *ci) anope_override { - if (Config->UseServerSideMLock) + if (Config->UseServerSideMLock && ci->c) SendChannelMetadata(ci->c, "mlock", ""); - if (Config->UseServerSideTopicLock && has_svstopic_topiclock) + if (Config->UseServerSideTopicLock && has_svstopic_topiclock && ci->c) SendChannelMetadata(ci->c, "topiclock", ""); } @@ -621,6 +621,14 @@ class ProtoInspIRCd : public Module return EVENT_CONTINUE; } + + EventReturn OnSetChannelOption(CommandSource &source, Command *cmd, ChannelInfo *ci, const Anope::string &setting) anope_override + { + if (cmd->name == "chanserv/set/topiclock" && ci->c) + SendChannelMetadata(ci->c, "topiclock", setting.equals_ci("ON") ? "1" : ""); + + return EVENT_CONTINUE; + } }; MODULE_INIT(ProtoInspIRCd) |
