Merge pull request #1941 from DarthGandalf/tagmsg

Implement message-tags spec
This commit is contained in:
Alexey Sokolov
2025-04-13 11:46:18 +01:00
committed by GitHub
15 changed files with 291 additions and 24 deletions

View File

@@ -138,6 +138,8 @@ class CClient : public CIRCSocket {
void SetPlaybackActive(bool bActive) { m_bPlaybackActive = bActive; }
void PutIRC(const CString& sLine);
// Strips prefix and potentially tags before sending to server.
void PutIRCStripping(CMessage Message);
/** Sends a raw data line to the client.
* @param sLine The line to be sent.
*
@@ -305,6 +307,7 @@ class CClient : public CIRCSocket {
bool OnPingMessage(CMessage& Message);
bool OnPongMessage(CMessage& Message);
bool OnQuitMessage(CQuitMessage& Message);
bool OnTagMessage(CTargetMessage& Message);
bool OnTextMessage(CTextMessage& Message);
bool OnTopicMessage(CTopicMessage& Message);
bool OnOtherMessage(CMessage& Message);
@@ -327,6 +330,7 @@ class CClient : public CIRCSocket {
bool m_bBatch;
bool m_bEchoMessage;
bool m_bSelfMessage;
bool m_bMessageTagCap;
bool m_bSASLCap;
bool m_bPlaybackActive;
CUser* m_pUser;

View File

@@ -153,9 +153,8 @@ class CIRCSock : public CIRCSocket {
bool HasAccountNotify() const { return m_bAccountNotify; }
bool HasExtendedJoin() const { return m_bExtendedJoin; }
bool HasServerTime() const { return m_bServerTime; }
const std::set<char>& GetUserModes() const {
return m_scUserModes;
}
bool HasMessageTagCap() const { return m_bMessageTagCap; }
const std::set<char>& GetUserModes() const { return m_scUserModes; }
// This is true if we are past raw 001
bool IsAuthed() const { return m_bAuthed; }
const SCString& GetAcceptedCaps() const { return m_ssAcceptedCaps; }
@@ -192,6 +191,7 @@ class CIRCSock : public CIRCSocket {
bool OnPingMessage(CMessage& Message);
bool OnPongMessage(CMessage& Message);
bool OnQuitMessage(CQuitMessage& Message);
bool OnTagMessage(CTargetMessage& Message);
bool OnTextMessage(CTextMessage& Message);
bool OnTopicMessage(CTopicMessage& Message);
bool OnWallopsMessage(CMessage& Message);
@@ -213,6 +213,7 @@ class CIRCSock : public CIRCSocket {
bool m_bAccountNotify;
bool m_bExtendedJoin;
bool m_bServerTime;
bool m_bMessageTagCap;
CString m_sPerms;
CString m_sPermModes;
std::set<char> m_scUserModes;

View File

@@ -82,6 +82,7 @@ class CMessage {
Ping,
Pong,
Quit,
TagMsg,
Text,
Topic,
Wallops,
@@ -139,6 +140,7 @@ class CMessage {
void SetTime(const timeval& ts) { m_time = ts; }
const MCString& GetTags() const { return m_mssTags; }
MCString& GetTags() { return m_mssTags; }
void SetTags(const MCString& mssTags) { m_mssTags = mssTags; }
CString GetTag(const CString& sKey) const;

View File

@@ -1079,6 +1079,25 @@ class CModule {
/// @deprecated Use OnSendToIRCMessage() instead.
virtual EModRet OnSendToIRC(CString& sLine);
/** This module hook is called when a user sends a TAGMSG message.
* @since 1.10.0
* @param Message The message which was sent.
* @return See CModule::EModRet.
*/
virtual EModRet OnUserTagMessage(CTargetMessage& Message);
/** Called when we receive a channel TAGMSG message <em>from IRC</em>.
* @since 1.10.0
* @param Message The channel message.
* @return See CModule::EModRet.
*/
virtual EModRet OnChanTagMessage(CTargetMessage& Message);
/** Called when we receive a private TAGMSG message <em>from IRC</em>.
* @since 1.10.0
* @param Message The message.
* @return See CModule::EModRet.
*/
virtual EModRet OnPrivTagMessage(CTargetMessage& Message);
ModHandle GetDLL() { return m_pDLL; }
/** This function sends a given IRC line to the IRC server, if we
@@ -1628,6 +1647,9 @@ class CModules : public std::vector<CModule*>, private CCoreTranslationMixin {
bool OnUserTopicRequest(CString& sChannel);
bool OnUserQuit(CString& sMessage);
bool OnUserQuitMessage(CQuitMessage& Message);
bool OnUserTagMessage(CTargetMessage& Message);
bool OnChanTagMessage(CTargetMessage& Message);
bool OnPrivTagMessage(CTargetMessage& Message);
bool OnCTCPReply(CNick& Nick, CString& sMessage);
bool OnCTCPReplyMessage(CCTCPMessage& Message);