From ff4e09c59408d01861507653b9951758e9afd382 Mon Sep 17 00:00:00 2001 From: psychon Date: Sat, 7 Nov 2009 14:54:45 +0000 Subject: [PATCH] Send correct away status on client login If some client now sets "us" away via /away, new clients will be sent a 306 numeric after login to inform them that they are set /away. Thanks to nobswolf for the suggestion. git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@1655 726aef4b-f618-498e-8847-2d620e286838 --- IRCSock.cpp | 6 ++++++ User.cpp | 8 ++++++++ User.h | 2 ++ 3 files changed, 16 insertions(+) diff --git a/IRCSock.cpp b/IRCSock.cpp index 6dbaa2ed..4eacdbc3 100644 --- a/IRCSock.cpp +++ b/IRCSock.cpp @@ -193,6 +193,12 @@ void CIRCSock::ReadLine(const CString& sData) { } break; } + case 305: + m_pUser->SetIRCAway(false); + break; + case 306: + m_pUser->SetIRCAway(true); + break; case 331: { // :irc.server.com 331 yournick #chan :No topic is set. CChan* pChan = m_pUser->FindChan(sLine.Token(3)); diff --git a/User.cpp b/User.cpp index f026669c..58870dc2 100644 --- a/User.cpp +++ b/User.cpp @@ -36,6 +36,7 @@ CUser::CUser(const CString& sUserName) { m_bUseClientIP = false; m_bDenyLoadMod = false; m_bAdmin= false; + m_bIRCAway = false; m_bDenySetVHost= false; m_sStatusPrefix = "*"; m_sChanPrefixes = ""; @@ -147,6 +148,7 @@ void CUser::IRCDisconnected() { } SetIRCServer(""); + m_bIRCAway = false; // Get the reconnect going CheckIRCConnect(); @@ -275,6 +277,12 @@ void CUser::UserConnected(CClient* pClient) { } } + if (m_bIRCAway) { + // If they want to know their away reason they'll have to whois + // themselves. At least we can tell them their away status... + pClient->PutClient(":irc.znc.in 306 " + GetIRCNick().GetNick() + " :You have been marked as being away"); + } + const vector& vChans = GetChans(); for (unsigned int a = 0; a < vChans.size(); a++) { if ((vChans[a]->IsOn()) && (!vChans[a]->IsDetached())) { diff --git a/User.h b/User.h index cc9dc769..59a4310e 100644 --- a/User.h +++ b/User.h @@ -170,6 +170,7 @@ public: void SetJoinTries(unsigned int i) { m_uMaxJoinTries = i; } void SetMaxJoins(unsigned int i) { m_uMaxJoins = i; } void SetIRCConnectEnabled(bool b) { m_bIRCConnectEnabled = b; } + void SetIRCAway(bool b) { m_bIRCAway = b; } // !Setters // Getters @@ -240,6 +241,7 @@ protected: CString m_sDefaultChanModes; CString m_sChanPrefixes; CNick m_IRCNick; + bool m_bIRCAway; CString m_sIRCServer; CString m_sQuitMsg; MCString m_mssCTCPReplies;