X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fmessage.h;h=2e3cd9bb1c88c4ef5f819d2eb8837de2cc40e090;hb=a697104a8c768228ce494967c11ff669d4aa3555;hp=fb9e7619f70b473a1be57902578f99808cab6952;hpb=2fcb5ff4389a9a82d253acdff02a388ddcf14653;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/message.h b/include/message.h index fb9e7619f..2e3cd9bb1 100644 --- a/include/message.h +++ b/include/message.h @@ -1,7 +1,8 @@ /* * InspIRCd -- Internet Relay Chat Daemon * - * Copyright (C) 2017 Peter Powell + * Copyright (C) 2017-2018 Sadie Powell + * Copyright (C) 2017-2018 Attila Molnar * * This file is part of InspIRCd. InspIRCd is free software: you can * redistribute it and/or modify it under the terms of the GNU General Public @@ -32,14 +33,23 @@ enum MessageType class CoreExport MessageDetails { public: + /** Whether to echo the message at all. */ + bool echo; + /* Whether to send the original message back to clients with echo-message support. */ - bool echooriginal; + bool echo_original; /** The users who are exempted from receiving this message. */ CUList exemptions; /* The original message as sent by the user. */ - const std::string originaltext; + const std::string original_text; + + /** IRCv3 message tags sent to the server by the user. */ + const ClientProtocol::TagMap tags_in; + + /** IRCv3 message tags sent out to users who get this message. */ + ClientProtocol::TagMap tags_out; /** The message which will be sent to clients. */ std::string text; @@ -47,9 +57,29 @@ class CoreExport MessageDetails /** The type of message. */ const MessageType type; - MessageDetails(MessageType mt, const std::string& msg) - : echooriginal(false) - , originaltext(msg) + /** Determines whether the specified message is a CTCP. If the specified message + * is a CTCP then the CTCP name and CTCP body are extracted and stored in the + * name and body references. + * @param name The location to store the parsed CTCP name. + * @param body The location to store the parsed CTCP body. + */ + virtual bool IsCTCP(std::string& name, std::string& body) const = 0; + + /** Determines whether the specified message is a CTCP. If the specified message + * is a CTCP then the CTCP name is extracted and stored in the name reference. + * @param name The location to store the parsed CTCP name. + */ + virtual bool IsCTCP(std::string& name) const = 0; + + /** Determines whether the specified message is a CTCP. */ + virtual bool IsCTCP() const = 0; + + protected: + MessageDetails(MessageType mt, const std::string& msg, const ClientProtocol::TagMap& tags) + : echo(true) + , echo_original(false) + , original_text(msg) + , tags_in(tags) , text(msg) , type(mt) { @@ -124,4 +154,18 @@ class CoreExport MessageTarget { return static_cast(dest); } + + /** Retrieves the name of the target of this message. */ + const std::string& GetName() const + { + switch (type) + { + case TYPE_CHANNEL: + return Get()->name; + case TYPE_USER: + return Get()->nick; + case TYPE_SERVER: + return *Get(); + } + } };