diff options
Diffstat (limited to 'src/modules/m_spanningtree/treesocket2.cpp')
-rw-r--r-- | src/modules/m_spanningtree/treesocket2.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/modules/m_spanningtree/treesocket2.cpp b/src/modules/m_spanningtree/treesocket2.cpp index fa9c97a45..249507799 100644 --- a/src/modules/m_spanningtree/treesocket2.cpp +++ b/src/modules/m_spanningtree/treesocket2.cpp @@ -339,6 +339,29 @@ bool TreeSocket::ServiceJoin(const std::string &prefix, std::deque<std::string> return true; } +bool TreeSocket::ServicePart(const std::string &prefix, std::deque<std::string> ¶ms) +{ + if (params.size() < 2) + return true; + + if (!this->Instance->IsChannel(params[1].c_str())) + return true; + + userrec* u = this->Instance->FindNick(params[0]); + chanrec* c = this->Instance->FindChan(params[1]); + + if (u) + { + /* only part if it's local, otherwise just pass it on! */ + if (IS_LOCAL(u)) + if (!c->PartUser(u, "Services forced part")) + delete c; + Utils->DoOneToAllButSender(prefix,"SVSPART",params,prefix); + } + + return true; +} + bool TreeSocket::RemoteRehash(const std::string &prefix, std::deque<std::string> ¶ms) { if (params.size() < 1) @@ -1408,6 +1431,12 @@ bool TreeSocket::ProcessLine(std::string &line) } return this->ServiceJoin(prefix,params); } + else if (command == "SVSPART") + { + if (prefix.empty()) + prefix = this->GetName(); + return this->ServicePart(prefix,params); + } else if (command == "SQUIT") { if (params.size() == 2) |