virtual void OnModCommand(const CString& sCommand) { CString sCmdName = sCommand.Token(0); if (sCmdName == "away") { CString sReason; if (sCommand.Token(1) != "-quiet") { sReason = sCommand.Token(1, true); PutModNotice("You have been marked as away", "away"); } else sReason = sCommand.Token(2, true); Away(false, sReason); } else if (sCmdName == "back") { if ((m_vMessages.empty()) && (sCommand.Token(1) != "-quiet")) PutModNotice("Welcome Back!", "away"); Back(); } else if (sCmdName == "messages") { for (u_int a = 0; a < m_vMessages.size(); a++) PutModule(m_vMessages[a], "away"); } else if (sCmdName == "delete") { CString sWhich = sCommand.Token(1); if (sWhich == "all") { PutModNotice("Deleted " + CString(m_vMessages.size()) + " Messages.", "away"); for (u_int a = 0; a < m_vMessages.size(); a++) m_vMessages.erase(m_vMessages.begin() + a--); } else if (sWhich.empty()) { PutModNotice("USAGE: delete <num|all>", "away"); return; } else { u_int iNum = sWhich.ToUInt(); if (iNum >= m_vMessages.size()) { PutModNotice("Illegal Message # Requested", "away"); return; } else { m_vMessages.erase(m_vMessages.begin() + iNum); PutModNotice("Message Erased.", "away"); } SaveBufferToDisk(); } } else if (sCmdName == "save" && m_saveMessages) { SaveBufferToDisk(); PutModNotice("Messages saved to disk.", "away"); } else if (sCmdName == "ping") { Ping(); if (m_bIsAway) Back(); } else if (sCmdName == "pass") { m_sPassword = sCommand.Token(1); PutModNotice("Password Updated to [" + m_sPassword + "]"); } else if (sCmdName == "show") { map< CString, vector< CString> > msvOutput; for (u_int a = 0; a < m_vMessages.size(); a++) { CString sTime = m_vMessages[a].Token(0, false, ":"); CString sWhom = m_vMessages[a].Token(1, false, ":"); CString sMessage = m_vMessages[a].Token(2, true, ":"); if ((sTime.empty()) || (sWhom.empty()) || (sMessage.empty())) { // illegal format PutModule("Corrupt message! [" + m_vMessages[a] + "]", "away"); m_vMessages.erase(m_vMessages.begin() + a--); continue; } time_t iTime = sTime.ToULong(); char szFormat[64]; struct tm t; localtime_r(&iTime, &t); size_t iCount = strftime(szFormat, 64, "%Y-%m-%d %H:%M:%S", &t); if (iCount <= 0) { PutModule("Corrupt time stamp! [" + m_vMessages[a] + "]", "away"); m_vMessages.erase(m_vMessages.begin() + a--); continue; } CString sTmp = " " + CString(a) + ") ["; sTmp.append(szFormat, iCount); sTmp += "] "; sTmp += sMessage; msvOutput[sWhom].push_back(sTmp); } for (map< CString, vector< CString> >::iterator it = msvOutput.begin(); it != msvOutput.end(); ++it) { PutModule(it->first, "away"); for (u_int a = 0; a < it->second.size(); a++) PutModule(it->second[a]); } PutModule("#--- End Messages", "away"); } else if (sCmdName == "enabletimer") { SetAwayTime(300); PutModule("Timer set to 300 seconds"); } else if (sCmdName == "disabletimer") { SetAwayTime(0); PutModule("Timer disabled"); } else if (sCmdName == "settimer") { int iSetting = sCommand.Token(1).ToInt(); SetAwayTime(iSetting); if (iSetting == 0) PutModule("Timer disabled"); else PutModule("Timer set to " + CString(iSetting) + " seconds"); } else if (sCmdName == "timer") { PutModule("Current timer setting: " + CString(GetAwayTime()) + " seconds"); } else { PutModule("Commands: away [-quiet], back [-quiet], delete <num|all>, ping, show, save, enabletimer, disabletimer, settimer <secs>, timer", "away"); } }
void TimerCommand(const CString& sCommand) { PutModule("Current timer setting: " + CString(GetAwayTime()) + " seconds"); }