diff --git a/modules/controlpanel.cpp b/modules/controlpanel.cpp index eadeee65..21d79fa7 100644 --- a/modules/controlpanel.cpp +++ b/modules/controlpanel.cpp @@ -470,6 +470,69 @@ class CAdminMod : public CModule { PutModule("Error: Unknown variable"); } } + + void AddChan(const CString& sLine) { + const CString sUsername = sLine.Token(1); + const CString sNetwork = sLine.Token(2); + const CString sChan = sLine.Token(3); + + if (sChan.empty()) { + PutModule("Usage: addchan "); + return; + } + + CUser* pUser = GetUser(sUsername); + if (!pUser) + return; + + CIRCNetwork* pNetwork = pUser->FindNetwork(sNetwork); + if (!pNetwork) { + PutModule("Error: [" + sUsername + "] does not have a network named [" + sNetwork + "]."); + return; + } + + if (pNetwork->FindChan(sChan)) { + PutModule("Error: [" + sUsername + "] already has a channel named [" + sChan + "]."); + return; + } + + CChan* pChan = new CChan(sChan, pNetwork, true); + pNetwork->AddChan(pChan); + + PutModule("Channel [" + sChan + "] for user [" + sUsername + "] added."); + } + + void DelChan(const CString& sLine) { + const CString sUsername = sLine.Token(1); + const CString sNetwork = sLine.Token(2); + const CString sChan = sLine.Token(3); + + if (sChan.empty()) { + PutModule("Usage: delchan "); + return; + } + + CUser* pUser = GetUser(sUsername); + if (!pUser) + return; + + CIRCNetwork* pNetwork = pUser->FindNetwork(sNetwork); + if (!pNetwork) { + PutModule("Error: [" + sUsername + "] does not have a network named [" + sNetwork + "]."); + return; + } + + CChan* pChan = pNetwork->FindChan(sChan); + if (!pChan) { + PutModule("Error: User [" + sUsername + "] does not have a channel named [" + sChan + "]."); + return; + } + + pNetwork->DelChan(sChan); + pNetwork->PutIRC("PART " + sChan); + + PutModule("Channel [" + sChan + "] for user [" + sUsername + "] deleted."); + } void GetChan(const CString& sLine) { const CString sVar = sLine.Token(1).AsLower(); @@ -1200,6 +1263,10 @@ public: "variable [username] network chan", "Prints the variable's value for the given channel"); AddCommand("SetChan", static_cast(&CAdminMod::SetChan), "variable username network chan value", "Sets the variable's value for the given channel"); + AddCommand("AddChan", static_cast(&CAdminMod::AddChan), + "username network chan", "Adds a new channel"); + AddCommand("DelChan", static_cast(&CAdminMod::DelChan), + "username network chan", "Deletes a channel"); AddCommand("ListUsers", static_cast(&CAdminMod::ListUsers), "", "Lists users"); AddCommand("AddUser", static_cast(&CAdminMod::AddUser),