Add OnSendToIRCMessage and OnSendToClientMessage

This also alters PutClient such that the CMessage variant handles
sending messages, rather than the CString variant. As a side bonus, this
gives callers better information on whether the message was sent to the
client. Additionally, it eliminates the need for a hook to let modules
set the tags sent to a client, as that can now be done inside
OnSendToClientMessage.
This commit is contained in:
Eli Young
2017-04-11 13:03:38 -07:00
parent f37aa308e1
commit 823ac07240
13 changed files with 123 additions and 26 deletions

View File

@@ -483,13 +483,8 @@ CString CClient::GetFullName() const {
}
void CClient::PutClient(const CString& sLine) {
bool bReturn = false;
CString sCopy = sLine;
NETWORKMODULECALL(OnSendToClient(sCopy, *this), m_pUser, m_pNetwork, this,
&bReturn);
if (bReturn) return;
DEBUG("(" << GetFullName() << ") ZNC -> CLI [" << sCopy << "]");
Write(sCopy + "\r\n");
CMessage Message(sLine);
PutClient(Message);
}
bool CClient::PutClient(const CMessage& Message) {
@@ -563,10 +558,7 @@ bool CClient::PutClient(const CMessage& Message) {
}
}
CString sLine = Msg.ToString(CMessage::ExcludeTags);
// TODO: introduce a module hook that gives control over the tags that are
// sent
// TODO: add the ability to set a list of tags to send
MCString mssTags;
if (HasServerTime()) {
@@ -585,11 +577,22 @@ bool CClient::PutClient(const CMessage& Message) {
}
}
if (!mssTags.empty()) {
CUtils::SetMessageTags(sLine, mssTags);
}
Msg.SetTags(mssTags);
Msg.SetClient(this);
Msg.SetNetwork(m_pNetwork);
PutClient(sLine);
bool bReturn = false;
NETWORKMODULECALL(OnSendToClientMessage(Msg), m_pUser, m_pNetwork, this,
&bReturn);
if (bReturn) return false;
CString sCopy = Msg.ToString();
NETWORKMODULECALL(OnSendToClient(sCopy, *this), m_pUser, m_pNetwork, this,
&bReturn);
if (bReturn) return false;
DEBUG("(" << GetFullName() << ") ZNC -> CLI [" << sCopy << "]");
Write(sCopy + "\r\n");
return true;
}