irccd  3.0.3
server.hpp
1 /*
2  * server.hpp -- an IRC server
3  *
4  * Copyright (c) 2013-2019 David Demelier <markand@malikania.fr>
5  *
6  * Permission to use, copy, modify, and/or distribute this software for any
7  * purpose with or without fee is hereby granted, provided that the above
8  * copyright notice and this permission notice appear in all copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 #ifndef IRCCD_DAEMON_SERVER_HPP
20 #define IRCCD_DAEMON_SERVER_HPP
21 
27 #include <irccd/sysconfig.hpp>
28 
29 #include <cstdint>
30 #include <deque>
31 #include <functional>
32 #include <map>
33 #include <memory>
34 #include <set>
35 #include <string>
36 #include <variant>
37 #include <vector>
38 
39 #include <json.hpp>
40 
41 #include "irc.hpp"
42 
43 namespace irccd::daemon {
44 
45 class server;
46 
51 enum class channel_mode {
52  creator = 'O',
53  half_op = 'h',
54  op = 'o',
55  protection = 'a',
56  voiced = 'v'
57 };
58 
63 struct channel {
64  std::string name;
65  std::string password;
66 };
67 
72 struct whois_info {
73  std::string nick;
74  std::string user;
75  std::string hostname;
76  std::string realname;
77  std::vector<std::string> channels;
78 };
79 
84 struct connect_event {
85  std::shared_ptr<class server> server;
86 };
87 
93  std::shared_ptr<class server> server;
94 };
95 
100 struct invite_event {
101  std::shared_ptr<class server> server;
102  std::string origin;
103  std::string channel;
104  std::string nickname;
105 };
106 
111 struct join_event {
112  std::shared_ptr<class server> server;
113  std::string origin;
114  std::string channel;
115 };
116 
121 struct kick_event {
122  std::shared_ptr<class server> server;
123  std::string origin;
124  std::string channel;
125  std::string target;
126  std::string reason;
127 };
128 
134  std::shared_ptr<class server> server;
135  std::string origin;
136  std::string channel;
137  std::string message;
138 };
139 
144 struct me_event {
145  std::shared_ptr<class server> server;
146  std::string origin;
147  std::string channel;
148  std::string message;
149 };
150 
155 struct mode_event {
156  std::shared_ptr<class server> server;
157  std::string origin;
158  std::string channel;
159  std::string mode;
160  std::string limit;
161  std::string user;
162  std::string mask;
163 };
164 
169 struct names_event {
170  std::shared_ptr<class server> server;
171  std::string channel;
172  std::vector<std::string> names;
173 };
174 
179 struct nick_event {
180  std::shared_ptr<class server> server;
181  std::string origin;
182  std::string nickname;
183 };
184 
189 struct notice_event {
190  std::shared_ptr<class server> server;
191  std::string origin;
192  std::string channel;
193  std::string message;
194 };
195 
200 struct part_event {
201  std::shared_ptr<class server> server;
202  std::string origin;
203  std::string channel;
204  std::string reason;
205 };
206 
211 struct topic_event {
212  std::shared_ptr<class server> server;
213  std::string origin;
214  std::string channel;
215  std::string topic;
216 };
217 
222 struct whois_event {
223  std::shared_ptr<class server> server;
225 };
226 
231 using event = std::variant<
232  std::monostate,
235  invite_event,
236  join_event,
237  kick_event,
238  me_event,
240  mode_event,
241  names_event,
242  nick_event,
243  notice_event,
244  part_event,
245  topic_event,
247 >;
248 
256 class server : public std::enable_shared_from_this<server> {
257 public:
261  using connect_handler = std::function<void (std::error_code)>;
262 
266  using recv_handler = std::function<void (std::error_code, event)>;
267 
271  enum class options : std::uint8_t {
272  none = 0,
273  ipv4 = (1 << 0),
274  ipv6 = (1 << 1),
275  ssl = (1 << 2),
276  auto_rejoin = (1 << 3),
277  auto_reconnect = (1 << 4),
278  join_invite = (1 << 5)
279  };
280 
284  enum class state : std::uint8_t {
285  disconnected,
286  connecting,
287  identifying,
288  connected
289  };
290 
291 protected:
296 
297 private:
298  // Requested and joined channels.
299  std::vector<channel> rchannels_;
300  std::set<std::string> jchannels_;
301 
302  // Identifier.
303  std::string id_;
304 
305  // Connection information.
306  std::string hostname_;
307  std::string password_;
308  std::uint16_t port_{6667};
309  options options_;
310 
311  // Identity.
312  std::string nickname_{"irccd"};
313  std::string username_{"irccd"};
314  std::string realname_{"IRC Client Daemon"};
315  std::string ctcpversion_{"IRC Client Daemon"};
316 
317  // Settings.
318  std::string command_char_{"!"};
319  std::uint16_t recodelay_{30};
320  std::uint16_t timeout_{1000};
321 
322  // Server information.
323  std::map<channel_mode, char> modes_;
324 
325  // Misc.
326  boost::asio::io_service& service_;
327  boost::asio::deadline_timer timer_;
328  std::shared_ptr<irc::connection> conn_;
329  std::deque<std::string> queue_;
330  std::map<std::string, std::set<std::string>> names_map_;
331  std::map<std::string, whois_info> whois_map_;
332 
333  auto dispatch_connect(const irc::message&, const recv_handler&) -> bool;
334  auto dispatch_endofnames(const irc::message&, const recv_handler&) -> bool;
335  auto dispatch_endofwhois(const irc::message&, const recv_handler&) -> bool;
336  auto dispatch_invite(const irc::message&, const recv_handler&) -> bool;
337  auto dispatch_isupport(const irc::message&) -> bool;
338  auto dispatch_join(const irc::message&, const recv_handler&) -> bool;
339  auto dispatch_kick(const irc::message&, const recv_handler&) -> bool;
340  auto dispatch_mode(const irc::message&, const recv_handler&) -> bool;
341  auto dispatch_namreply(const irc::message&) -> bool;
342  auto dispatch_nick(const irc::message&, const recv_handler&) -> bool;
343  auto dispatch_notice(const irc::message&, const recv_handler&) -> bool;
344  auto dispatch_part(const irc::message&, const recv_handler&) -> bool;
345  auto dispatch_ping(const irc::message&) -> bool;
346  auto dispatch_privmsg(const irc::message&, const recv_handler&) -> bool;
347  auto dispatch_topic(const irc::message&, const recv_handler&) -> bool;
348  auto dispatch_whoischannels(const irc::message&) -> bool;
349  auto dispatch_whoisuser(const irc::message&) -> bool;
350  auto dispatch(const irc::message&, const recv_handler&) -> bool;
351 
352  // I/O and connection.
353  void flush();
354  void identify();
355  void handle_send(const std::error_code&);
356  void handle_recv(const std::error_code&, const irc::message&, const recv_handler&);
357  void handle_connect(const std::error_code&, const connect_handler&);
358 
359 public:
368  server(boost::asio::io_service& service, std::string id, std::string hostname = "localhost");
369 
373  virtual ~server();
374 
380  auto get_state() const noexcept -> state;
381 
387  auto get_id() const noexcept -> const std::string&;
388 
394  auto get_hostname() const noexcept -> const std::string&;
395 
401  auto get_password() const noexcept -> const std::string&;
402 
410  void set_password(std::string password) noexcept;
411 
417  auto get_port() const noexcept -> std::uint16_t;
418 
424  void set_port(std::uint16_t port) noexcept;
425 
431  auto get_options() const noexcept -> options;
432 
438  void set_options(options flags) noexcept;
439 
445  auto get_nickname() const noexcept -> const std::string&;
446 
455  void set_nickname(std::string nickname);
456 
462  auto get_username() const noexcept -> const std::string&;
463 
470  void set_username(std::string name) noexcept;
471 
477  auto get_realname() const noexcept -> const std::string&;
478 
485  void set_realname(std::string realname) noexcept;
486 
492  auto get_ctcp_version() const noexcept -> const std::string&;
493 
499  void set_ctcp_version(std::string ctcpversion);
500 
506  auto get_command_char() const noexcept -> const std::string&;
507 
514  void set_command_char(std::string command_char) noexcept;
515 
521  auto get_reconnect_delay() const noexcept -> std::uint16_t;
522 
528  void set_reconnect_delay(std::uint16_t reconnect_delay) noexcept;
529 
535  auto get_ping_timeout() const noexcept -> std::uint16_t;
536 
542  void set_ping_timeout(std::uint16_t ping_timeout) noexcept;
543 
549  auto get_channels() const noexcept -> const std::set<std::string>&;
550 
557  auto is_self(std::string_view nick) const noexcept -> bool;
558 
570  virtual void connect(connect_handler handler) noexcept;
571 
575  virtual void disconnect();
576 
583  virtual void wait(connect_handler handler);
584 
592  virtual void recv(recv_handler handler) noexcept;
593 
600  virtual void invite(std::string_view target, std::string_view channel);
601 
608  virtual void join(std::string_view channel, std::string_view password = "");
609 
618  virtual void kick(std::string_view target,
619  std::string_view channel,
620  std::string_view reason = "");
621 
629  virtual void me(std::string_view target, std::string_view message);
630 
637  virtual void message(std::string_view target, std::string_view message);
638 
648  virtual void mode(std::string_view channel,
649  std::string_view mode,
650  std::string_view limit = "",
651  std::string_view user = "",
652  std::string_view mask = "");
653 
659  virtual void names(std::string_view channel);
660 
667  virtual void notice(std::string_view target, std::string_view message);
668 
678  virtual void part(std::string_view channel, std::string_view reason = "");
679 
689  virtual void send(std::string_view raw);
690 
697  virtual void topic(std::string_view channel, std::string_view topic);
698 
704  virtual void whois(std::string_view target);
705 };
706 
718 inline auto operator^(server::options v1, server::options v2) noexcept -> server::options
719 {
720  return static_cast<server::options>(static_cast<unsigned>(v1) ^ static_cast<unsigned>(v2));
721 }
722 
730 inline auto operator&(server::options v1, server::options v2) noexcept -> server::options
731 {
732  return static_cast<server::options>(static_cast<unsigned>(v1) & static_cast<unsigned>(v2));
733 }
734 
742 inline auto operator|(server::options v1, server::options v2) noexcept -> server::options
743 {
744  return static_cast<server::options>(static_cast<unsigned>(v1) | static_cast<unsigned>(v2));
745 }
746 
753 inline auto operator~(server::options v) noexcept -> server::options
754 {
755  return static_cast<server::options>(~static_cast<unsigned>(v));
756 }
757 
765 inline auto operator|=(server::options& v1, server::options v2) noexcept -> server::options&
766 {
767  return v1 = v1 | v2;
768 }
769 
777 inline auto operator&=(server::options& v1, server::options v2) noexcept -> server::options&
778 {
779  return v1 = v1 & v2;
780 }
781 
789 inline auto operator^=(server::options& v1, server::options v2) noexcept -> server::options&
790 {
791  return v1 = v1 ^ v2;
792 }
793 
802 class server_error : public std::system_error {
803 public:
807  enum error {
809  no_error = 0,
810 
812  not_found,
813 
815  invalid_identifier,
816 
818  not_connected,
819 
821  already_connected,
822 
824  already_exists,
825 
827  invalid_port,
828 
830  invalid_reconnect_delay,
831 
833  invalid_hostname,
834 
836  invalid_channel,
837 
839  invalid_mode,
840 
842  invalid_nickname,
843 
845  invalid_username,
846 
848  invalid_realname,
849 
851  invalid_password,
852 
854  invalid_ping_timeout,
855 
857  invalid_ctcp_version,
858 
860  invalid_command_char,
861 
863  invalid_message,
864 
866  ssl_disabled,
867 
869  invalid_family
870  };
871 
872 public:
878  server_error(error code) noexcept;
879 };
880 
886 auto server_category() -> const std::error_category&;
887 
894 auto make_error_code(server_error::error e) -> std::error_code;
895 
896 } // !irccd::daemon
897 
902 namespace std {
903 
904 template <>
905 struct is_error_code_enum<irccd::daemon::server_error::error> : public std::true_type {
906 };
907 
908 } // !std
909 
914 #endif // !IRCCD_DAEMON_SERVER_HPP
irccd::daemon::server::options
options
Various options for server.
Definition: server.hpp:271
irccd::daemon::server::state::disconnected
@ disconnected
not connected at all,
irccd::daemon::notice_event::channel
std::string channel
The channel or target.
Definition: server.hpp:192
irccd::daemon::kick_event
Kick event.
Definition: server.hpp:121
irccd::daemon::server::get_id
auto get_id() const noexcept -> const std::string &
irccd::daemon::server::whois
virtual void whois(std::string_view target)
irccd::daemon::whois_info::user
std::string user
user's user
Definition: server.hpp:74
irccd::daemon::server::options::auto_reconnect
@ auto_reconnect
Auto reconnect on disconnection.
irccd::daemon::server::get_command_char
auto get_command_char() const noexcept -> const std::string &
irccd::daemon::kick_event::channel
std::string channel
The channel.
Definition: server.hpp:124
irccd::daemon::topic_event
Topic event.
Definition: server.hpp:211
irccd::daemon::connect_event
Connection success event.
Definition: server.hpp:84
irccd::daemon::server::state::identifying
@ identifying
sending nick, user and password commands,
irccd::daemon::server::options::none
@ none
No options.
irccd::daemon::server::topic
virtual void topic(std::string_view channel, std::string_view topic)
irccd::daemon::server::get_ping_timeout
auto get_ping_timeout() const noexcept -> std::uint16_t
irccd::daemon::join_event::server
std::shared_ptr< class server > server
The server.
Definition: server.hpp:112
irccd::daemon::server::get_channels
auto get_channels() const noexcept -> const std::set< std::string > &
irccd::daemon::server::set_ping_timeout
void set_ping_timeout(std::uint16_t ping_timeout) noexcept
irccd::daemon::server::get_hostname
auto get_hostname() const noexcept -> const std::string &
irccd::daemon::server::state::connecting
@ connecting
network connection in progress,
irccd::daemon::channel_mode::voiced
@ voiced
Voice power.
irccd::daemon::kick_event::reason
std::string reason
The reason (Optional).
Definition: server.hpp:126
irccd::daemon::whois_event
Whois event.
Definition: server.hpp:222
irccd::daemon::me_event
CTCP action event.
Definition: server.hpp:144
irccd::daemon::server::state_
state state_
Server state.
Definition: server.hpp:295
irccd::daemon::join_event::origin
std::string origin
The originator.
Definition: server.hpp:113
irccd::daemon::server::options::auto_rejoin
@ auto_rejoin
Auto rejoin a kick.
irccd::daemon::names_event::names
std::vector< std::string > names
The names.
Definition: server.hpp:172
irccd::daemon::server::get_nickname
auto get_nickname() const noexcept -> const std::string &
irccd::daemon::server::names
virtual void names(std::string_view channel)
irccd::daemon::server::recv
virtual void recv(recv_handler handler) noexcept
irccd::daemon::server::get_reconnect_delay
auto get_reconnect_delay() const noexcept -> std::uint16_t
irccd::daemon::server::set_ctcp_version
void set_ctcp_version(std::string ctcpversion)
irccd::daemon::server::get_password
auto get_password() const noexcept -> const std::string &
irccd::daemon::server::set_reconnect_delay
void set_reconnect_delay(std::uint16_t reconnect_delay) noexcept
irccd::daemon::server::set_options
void set_options(options flags) noexcept
irccd::daemon::nick_event::server
std::shared_ptr< class server > server
The server.
Definition: server.hpp:180
irccd::daemon::server::join
virtual void join(std::string_view channel, std::string_view password="")
irccd::daemon::notice_event
Notice event.
Definition: server.hpp:189
irccd::daemon::mode_event::mode
std::string mode
The mode.
Definition: server.hpp:159
irccd::daemon::invite_event::origin
std::string origin
The originator.
Definition: server.hpp:102
irccd::daemon::part_event
Part event.
Definition: server.hpp:200
irccd::daemon::notice_event::message
std::string message
The message.
Definition: server.hpp:193
irccd::daemon::me_event::origin
std::string origin
The originator.
Definition: server.hpp:146
irccd::daemon::names_event::channel
std::string channel
The channel.
Definition: server.hpp:171
irccd::daemon::mode_event::origin
std::string origin
The originator.
Definition: server.hpp:157
irccd::daemon::event
std::variant< std::monostate, connect_event, disconnect_event, invite_event, join_event, kick_event, me_event, message_event, mode_event, names_event, nick_event, notice_event, part_event, topic_event, whois_event > event
Store all possible events.
Definition: server.hpp:247
irccd::daemon::server::part
virtual void part(std::string_view channel, std::string_view reason="")
irccd::daemon::server::set_password
void set_password(std::string password) noexcept
irccd::daemon::me_event::server
std::shared_ptr< class server > server
The server.
Definition: server.hpp:145
irccd::daemon::server::connect
virtual void connect(connect_handler handler) noexcept
irccd::daemon::nick_event::origin
std::string origin
The originator.
Definition: server.hpp:181
irccd::daemon::server::get_state
auto get_state() const noexcept -> state
irccd::daemon::mode_event
Mode event.
Definition: server.hpp:155
irccd::daemon::notice_event::server
std::shared_ptr< class server > server
The server.
Definition: server.hpp:190
irccd::daemon::kick_event::server
std::shared_ptr< class server > server
The server.
Definition: server.hpp:122
irccd::daemon::channel_mode::protection
@ protection
Unkillable.
irccd::daemon::server::connect_handler
std::function< void(std::error_code)> connect_handler
Definition: server.hpp:261
irccd::daemon::names_event::server
std::shared_ptr< class server > server
The server.
Definition: server.hpp:170
irccd::daemon::topic_event::server
std::shared_ptr< class server > server
The server.
Definition: server.hpp:212
irccd::daemon::invite_event::nickname
std::string nickname
The nickname (you).
Definition: server.hpp:104
irccd::daemon::part_event::channel
std::string channel
The channel.
Definition: server.hpp:203
irccd::daemon::nick_event::nickname
std::string nickname
The new nickname.
Definition: server.hpp:182
irccd::daemon::join_event
Join event.
Definition: server.hpp:111
irccd::daemon::server::recv_handler
std::function< void(std::error_code, event)> recv_handler
Definition: server.hpp:266
irccd::daemon::server::mode
virtual void mode(std::string_view channel, std::string_view mode, std::string_view limit="", std::string_view user="", std::string_view mask="")
irccd::daemon::make_error_code
auto make_error_code(bot_error::error e) noexcept -> std::error_code
irccd::daemon::whois_event::server
std::shared_ptr< class server > server
The server.
Definition: server.hpp:223
irccd::daemon::invite_event
Invite event.
Definition: server.hpp:100
irccd::daemon::server::disconnect
virtual void disconnect()
irccd::daemon::part_event::server
std::shared_ptr< class server > server
The server.
Definition: server.hpp:201
irccd::daemon::message_event::message
std::string message
The message.
Definition: server.hpp:137
irccd::daemon::disconnect_event::server
std::shared_ptr< class server > server
The server.
Definition: server.hpp:93
irccd::daemon::connect_event::server
std::shared_ptr< class server > server
The server.
Definition: server.hpp:85
irccd::daemon::server::options::ipv4
@ ipv4
Connect using IPv4.
irccd::daemon::kick_event::target
std::string target
The target.
Definition: server.hpp:125
irccd::daemon::mode_event::channel
std::string channel
The channel or target.
Definition: server.hpp:158
irccd::daemon::server::get_ctcp_version
auto get_ctcp_version() const noexcept -> const std::string &
irccd::daemon::me_event::message
std::string message
The message.
Definition: server.hpp:148
irccd::daemon::topic_event::origin
std::string origin
The originator.
Definition: server.hpp:213
irccd::daemon::whois_event::whois
whois_info whois
The whois information.
Definition: server.hpp:224
irccd::daemon::server::state::connected
@ connected
ready for use.
irccd::daemon::channel
A channel to join with an optional password.
Definition: server.hpp:63
irccd::daemon::invite_event::channel
std::string channel
The channel.
Definition: server.hpp:103
irccd::daemon::server::send
virtual void send(std::string_view raw)
irccd::daemon::server::set_username
void set_username(std::string name) noexcept
irccd::daemon::part_event::origin
std::string origin
The originator.
Definition: server.hpp:202
irccd::daemon::server::~server
virtual ~server()
irccd::daemon::server::set_nickname
void set_nickname(std::string nickname)
irccd::daemon::server_error::error
error
Server related errors.
Definition: server.hpp:807
irccd::daemon::server::get_port
auto get_port() const noexcept -> std::uint16_t
irccd::daemon::server::me
virtual void me(std::string_view target, std::string_view message)
irccd::daemon::channel_mode::creator
@ creator
Channel creator.
irccd::daemon::join_event::channel
std::string channel
The channel.
Definition: server.hpp:114
irccd::daemon::message_event::server
std::shared_ptr< class server > server
The server.
Definition: server.hpp:134
irccd::daemon::server::set_port
void set_port(std::uint16_t port) noexcept
irccd::daemon::server::get_realname
auto get_realname() const noexcept -> const std::string &
irccd::daemon::whois_info::realname
std::string realname
realname
Definition: server.hpp:76
irccd::daemon::server::get_username
auto get_username() const noexcept -> const std::string &
irccd::daemon::channel::password
std::string password
the optional password
Definition: server.hpp:65
irccd::daemon::server::options::join_invite
@ join_invite
Join a channel on invitation.
irccd::daemon::server::server
server(boost::asio::io_service &service, std::string id, std::string hostname="localhost")
irccd::daemon::channel::name
std::string name
the channel to join
Definition: server.hpp:64
irccd::daemon::message_event::origin
std::string origin
The originator.
Definition: server.hpp:135
irccd::daemon::server::set_realname
void set_realname(std::string realname) noexcept
irccd::daemon::mode_event::server
std::shared_ptr< class server > server
The server.
Definition: server.hpp:156
irccd::daemon::message_event::channel
std::string channel
The channel.
Definition: server.hpp:136
irccd::daemon::notice_event::origin
std::string origin
The originator.
Definition: server.hpp:191
irccd::daemon::whois_info::hostname
std::string hostname
hostname
Definition: server.hpp:75
irccd::daemon::message_event
Message event.
Definition: server.hpp:133
irccd::daemon::server
The class that connect to a IRC server.
Definition: server.hpp:256
irccd
Parent namespace.
Definition: acceptor.hpp:43
irccd::daemon::mode_event::mask
std::string mask
The optional ban mask.
Definition: server.hpp:162
std
Definition: bot.hpp:253
irccd::daemon::server::get_options
auto get_options() const noexcept -> options
irccd::daemon::server_error
Server error.
Definition: server.hpp:802
irccd::daemon::whois_info::channels
std::vector< std::string > channels
the channels where the user is
Definition: server.hpp:77
irccd::daemon::server::kick
virtual void kick(std::string_view target, std::string_view channel, std::string_view reason="")
irccd::daemon::invite_event::server
std::shared_ptr< class server > server
The server.
Definition: server.hpp:101
irccd::daemon::server::set_command_char
void set_command_char(std::string command_char) noexcept
irccd::daemon::mode_event::limit
std::string limit
The optional limit.
Definition: server.hpp:160
irccd::daemon::server::options::ssl
@ ssl
Use SSL.
irccd::daemon::part_event::reason
std::string reason
The reason.
Definition: server.hpp:204
irccd::daemon::server::options::ipv6
@ ipv6
Connect using IPv6.
irccd::daemon
Main irccd namespace.
Definition: bot.hpp:41
irccd::daemon::server_category
auto server_category() -> const std::error_category &
irccd::daemon::topic_event::topic
std::string topic
The topic message.
Definition: server.hpp:215
irccd::daemon::server::is_self
auto is_self(std::string_view nick) const noexcept -> bool
irccd::daemon::whois_info::nick
std::string nick
user's nickname
Definition: server.hpp:73
irccd::daemon::disconnect_event
Connection success event.
Definition: server.hpp:92
irccd::daemon::server::wait
virtual void wait(connect_handler handler)
irccd::daemon::me_event::channel
std::string channel
The channel.
Definition: server.hpp:147
irccd::daemon::mode_event::user
std::string user
The optional user.
Definition: server.hpp:161
irccd::daemon::whois_info
Describe a whois information.
Definition: server.hpp:72
irccd::daemon::channel_mode
channel_mode
Prefixes for nicknames.
Definition: server.hpp:51
irccd::daemon::server::state
state
Describe current server state.
Definition: server.hpp:284
irccd::daemon::kick_event::origin
std::string origin
The originator.
Definition: server.hpp:123
irccd::daemon::topic_event::channel
std::string channel
The channel.
Definition: server.hpp:214
irccd::daemon::channel_mode::half_op
@ half_op
Half operator.
irccd::daemon::server::invite
virtual void invite(std::string_view target, std::string_view channel)
irccd::daemon::server::message
virtual void message(std::string_view target, std::string_view message)
irccd::daemon::nick_event
Nick change event.
Definition: server.hpp:179
irccd::daemon::server::notice
virtual void notice(std::string_view target, std::string_view message)
irccd::daemon::channel_mode::op
@ op
Channel operator.
irccd::daemon::names_event
Names listing event.
Definition: server.hpp:169