X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fmessage.h;h=068f3124659182b02e08609df9f90bedb78db94b;hb=085777cf272cd74e44abec70c0a87003429e2fd3;hp=fb9e7619f70b473a1be57902578f99808cab6952;hpb=124c17e14134a4999afc1a5e981ab7c75b3694b9;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/message.h b/include/message.h index fb9e7619f..068f31246 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) 2018 Attila Molnar + * Copyright (C) 2017-2018, 2020 Sadie Powell * * 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,24 +33,57 @@ 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; + + /** Whether to update the source user's idle time. */ + bool update_idle; /** 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; /** The type of message. */ - const MessageType type; + MessageType type; + + /** 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; - 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 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) + , update_idle(true) + , original_text(msg) + , tags_in(tags) , text(msg) , type(mt) { @@ -124,4 +158,23 @@ 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(); + } + + // We should never reach this point during a normal execution but + // handle it just in case. + static const std::string target = "*"; + return target; + } };