1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
/*
* InspIRCd -- Internet Relay Chat Daemon
*
* Copyright (C) 2017 Peter Powell <petpow@saberuk.com>
*
* 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
* License as published by the Free Software Foundation, version 2.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
/** Whether message was a PRIVMSG or a NOTICE. */
enum MessageType
{
/** The message is a PRIVMSG. */
MSG_PRIVMSG,
/** The message is a NOTICE. */
MSG_NOTICE
};
class CoreExport MessageDetails
{
public:
/* Whether to send the original message back to clients with echo-message support. */
bool echooriginal;
/** The users who are exempted from receiving this message. */
CUList exemptions;
/* The original message as sent by the user. */
const std::string originaltext;
/** The message which will be sent to clients. */
std::string text;
/** The type of message. */
const MessageType type;
MessageDetails(MessageType mt, const std::string& msg)
: echooriginal(false)
, originaltext(msg)
, text(msg)
, type(mt)
{
}
};
/** Represents the target of a message (NOTICE, PRIVMSG, etc). */
class CoreExport MessageTarget
{
public:
/** An enumeration of possible message target types. */
enum TargetType
{
/** The target of the message is a user. */
TYPE_USER,
/** The target of the message is a channel. */
TYPE_CHANNEL,
/** The target of the message is a server. */
TYPE_SERVER
};
private:
/** The target of the message. */
void* dest;
public:
/** If type is TYPE_CHANNEL and the user specified a status rank. */
char status;
/** The type of the target of the message. If this is TYPE_CHANNEL then dest
* is a Channel*, TYPE_USER then dest is a User*, and TYPE_SERVER then dest is
* a std::string* containing a server glob.
*/
MessageTarget::TargetType type;
/** Initialises a new channel message target.
* @param channel The channel which is the target of the message.
* @param statuschar The lowest status rank that the message is being sent to.
*/
MessageTarget(Channel* channel, char statuschar)
: dest(channel)
, status(statuschar)
, type(TYPE_CHANNEL)
{
}
/** Initialises a new user message target.
* @param user The user which is the target of the message.
*/
MessageTarget(User* user)
: dest(user)
, status(0)
, type(TYPE_USER)
{
}
/** Initialises a new server message target.
* @param server The server glob which is the target of the message.
*/
MessageTarget(std::string* server)
: dest(server)
, status(0)
, type(TYPE_SERVER)
{
}
/** Retrieves the target of this message. */
template<typename T>
T* Get() const
{
return static_cast<T*>(dest);
}
};
|