irccd  3.0.3
transport_command.hpp
1 /*
2  * transport_command.hpp -- remote command
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_TRANSPORT_COMMAND_HPP
20 #define IRCCD_DAEMON_TRANSPORT_COMMAND_HPP
21 
27 #include <irccd/sysconfig.hpp>
28 
29 #include <functional>
30 #include <memory>
31 #include <string_view>
32 #include <vector>
33 
34 #include <irccd/json_util.hpp>
35 
36 namespace irccd::daemon {
37 
38 class bot;
39 class transport_client;
40 
41 // {{{ transport_command
42 
48 public:
53 
57  using constructor = std::function<std::unique_ptr<transport_command> ()>;
58 
62  static auto registry() noexcept -> const std::vector<constructor>&;
63 
67  virtual ~transport_command() = default;
68 
74  virtual auto get_name() const noexcept -> std::string_view = 0;
75 
89  virtual void exec(bot& bot, transport_client& client, const document& args) = 0;
90 };
91 
92 // }}}
93 
94 // {{{ plugin_config_command
95 
105 public:
109  auto get_name() const noexcept -> std::string_view override;
110 
114  void exec(bot& bot, transport_client& client, const document& args) override;
115 };
116 
117 // }}}
118 
119 // {{{ plugin_info_command
120 
130 public:
134  auto get_name() const noexcept -> std::string_view override;
135 
139  void exec(bot& bot, transport_client& client, const document& args) override;
140 };
141 
142 // }}}
143 
144 // {{{ plugin_list_command
145 
151 public:
155  auto get_name() const noexcept -> std::string_view override;
156 
160  void exec(bot& bot, transport_client& client, const document& args) override;
161 };
162 
163 // }}}
164 
165 // {{{ plugin_load_command
166 
178 public:
182  auto get_name() const noexcept -> std::string_view override;
183 
187  void exec(bot& bot, transport_client& client, const document& args) override;
188 };
189 
190 // }}}
191 
192 // {{{ plugin_reload_command
193 
204 public:
208  auto get_name() const noexcept -> std::string_view override;
209 
213  void exec(bot& bot, transport_client& client, const document& args) override;
214 };
215 
216 // }}}
217 
218 // {{{ plugin_unload_command
219 
230 public:
234  auto get_name() const noexcept -> std::string_view override;
235 
239  void exec(bot& bot, transport_client& client, const document& args) override;
240 };
241 
242 // }}}
243 
244 // {{{ rule_add_command
245 
255 public:
259  auto get_name() const noexcept -> std::string_view override;
260 
264  void exec(bot& bot, transport_client& client, const document& args) override;
265 };
266 
267 // }}}
268 
269 // {{{ rule_edit_command
270 
281 public:
285  auto get_name() const noexcept -> std::string_view override;
286 
290  void exec(bot& bot, transport_client& client, const document& args) override;
291 };
292 
293 // }}}
294 
295 // {{{ rule_info_command
296 
306 public:
310  auto get_name() const noexcept -> std::string_view override;
311 
315  void exec(bot& bot, transport_client& client, const document& args) override;
316 };
317 
318 // }}}
319 
320 // {{{ rule_list_command
321 
327 public:
331  auto get_name() const noexcept -> std::string_view override;
332 
336  void exec(bot& bot, transport_client& client, const document& args) override;
337 };
338 
339 // }}}
340 
341 // {{{ rule_move_command
342 
352 public:
356  auto get_name() const noexcept -> std::string_view override;
357 
361  void exec(bot& bot, transport_client& client, const document& args) override;
362 };
363 
364 // }}}
365 
366 // {{{ rule_remove_command
367 
377 public:
381  auto get_name() const noexcept -> std::string_view override;
382 
386  void exec(bot& bot, transport_client& client, const document& args) override;
387 };
388 
389 // }}}
390 
391 // {{{ server_connect_command
392 
406 public:
410  auto get_name() const noexcept -> std::string_view override;
411 
415  void exec(bot& bot, transport_client& client, const document& args) override;
416 };
417 
418 // }}}
419 
420 // {{{ server_disconnect_command
421 
432 public:
436  auto get_name() const noexcept -> std::string_view override;
437 
441  void exec(bot& bot, transport_client& client, const document& args) override;
442 };
443 
444 // }}}
445 
446 // {{{ server_info_command
447 
458 public:
462  auto get_name() const noexcept -> std::string_view override;
463 
467  void exec(bot& bot, transport_client& client, const document& args) override;
468 };
469 
470 // }}}
471 
472 // {{{ server_invite_command
473 
486 public:
490  auto get_name() const noexcept -> std::string_view override;
491 
495  void exec(bot& bot, transport_client& client, const document& args) override;
496 };
497 
498 // }}}
499 
500 // {{{ server_join_command
501 
513 public:
517  auto get_name() const noexcept -> std::string_view override;
518 
522  void exec(bot& bot, transport_client& client, const document& args) override;
523 };
524 
525 // }}}
526 
527 // {{{ server_kick_command
528 
541 public:
545  auto get_name() const noexcept -> std::string_view override;
546 
550  void exec(bot& bot, transport_client& client, const document& args) override;
551 };
552 
553 // }}}
554 
555 // {{{ server_list_command
556 
562 public:
566  auto get_name() const noexcept -> std::string_view override;
567 
571  void exec(bot& bot, transport_client& client, const document& args) override;
572 };
573 
574 // }}}
575 
576 // {{{ server_me_command
577 
589 public:
593  auto get_name() const noexcept -> std::string_view override;
594 
598  void exec(bot& bot, transport_client& client, const document& args) override;
599 };
600 
601 // }}}
602 
603 // {{{ server_message_command
604 
616 public:
620  auto get_name() const noexcept -> std::string_view override;
621 
625  void exec(bot& bot, transport_client& client, const document& args) override;
626 };
627 
628 // }}}
629 
630 // {{{ server_mode_command
631 
644 public:
648  auto get_name() const noexcept -> std::string_view override;
649 
653  void exec(bot& bot, transport_client& client, const document& args) override;
654 };
655 
656 // }}}
657 
658 // {{{ server_nick_command
659 
671 public:
675  auto get_name() const noexcept -> std::string_view override;
676 
680  void exec(bot& bot, transport_client& client, const document& args) override;
681 };
682 
683 // }}}
684 
685 // {{{ server_notice_command
686 
698 public:
702  auto get_name() const noexcept -> std::string_view override;
703 
707  void exec(bot& bot, transport_client& client, const document& args) override;
708 };
709 
710 // }}}
711 
712 // {{{ server_part_command
713 
725 public:
729  auto get_name() const noexcept -> std::string_view override;
730 
734  void exec(bot& bot, transport_client& client, const document& args) override;
735 };
736 
737 // }}}
738 
739 // {{{ server_reconnect_command
740 
751 public:
755  auto get_name() const noexcept -> std::string_view override;
756 
760  void exec(bot& bot, transport_client& client, const document& args) override;
761 };
762 
763 // }}}
764 
765 // {{{ server_topic_command
766 
778 public:
782  auto get_name() const noexcept -> std::string_view override;
783 
787  void exec(bot& bot, transport_client& client, const document& args) override;
788 };
789 
790 // }}}
791 
792 } // !irccd::daemon
793 
794 #endif // !IRCCD_DAEMON_COMMAND_HPP
irccd::daemon::server_join_command::get_name
auto get_name() const noexcept -> std::string_view override
irccd::daemon::server_list_command::get_name
auto get_name() const noexcept -> std::string_view override
irccd::daemon::plugin_load_command::get_name
auto get_name() const noexcept -> std::string_view override
irccd::daemon::server_nick_command
Implementation of server-nick transport command.
Definition: transport_command.hpp:670
irccd::daemon::server_connect_command::get_name
auto get_name() const noexcept -> std::string_view override
irccd::daemon::transport_client
Abstract transport client class.
Definition: transport_client.hpp:45
irccd::daemon::server_message_command
Implementation of server-message transport command.
Definition: transport_command.hpp:615
irccd::daemon::server_mode_command::get_name
auto get_name() const noexcept -> std::string_view override
irccd::daemon::server_part_command::get_name
auto get_name() const noexcept -> std::string_view override
irccd::daemon::server_me_command
Implementation of server-me transport command.
Definition: transport_command.hpp:588
irccd::daemon::server_mode_command
Implementation of server-mode transport command.
Definition: transport_command.hpp:643
irccd::daemon::rule_move_command::get_name
auto get_name() const noexcept -> std::string_view override
irccd::daemon::plugin_reload_command::get_name
auto get_name() const noexcept -> std::string_view override
irccd::daemon::server_invite_command
Implementation of server-invite transport command.
Definition: transport_command.hpp:485
irccd::daemon::transport_command
Server side remote command.
Definition: transport_command.hpp:47
irccd::daemon::server_disconnect_command
Implementation of server-disconnect transport command.
Definition: transport_command.hpp:431
irccd::daemon::rule_list_command
Implementation of rule-list transport command.
Definition: transport_command.hpp:326
irccd::daemon::transport_command::exec
virtual void exec(bot &bot, transport_client &client, const document &args)=0
irccd::daemon::server_me_command::get_name
auto get_name() const noexcept -> std::string_view override
irccd::daemon::rule_info_command::get_name
auto get_name() const noexcept -> std::string_view override
irccd::daemon::server_part_command
Implementation of server-part transport command.
Definition: transport_command.hpp:724
irccd::daemon::server_message_command::get_name
auto get_name() const noexcept -> std::string_view override
irccd::daemon::rule_move_command
Implementation of rule-move transport command.
Definition: transport_command.hpp:351
irccd::daemon::plugin_unload_command
Implementation of plugin-unload transport command.
Definition: transport_command.hpp:229
irccd::daemon::server_info_command
Implementation of server-info transport command.
Definition: transport_command.hpp:457
irccd::daemon::transport_command::constructor
std::function< std::unique_ptr< transport_command >()> constructor
Command constructor factory.
Definition: transport_command.hpp:57
irccd::daemon::server_notice_command
Implementation of server-notice transport command.
Definition: transport_command.hpp:697
irccd::daemon::plugin_config_command::get_name
auto get_name() const noexcept -> std::string_view override
irccd::daemon::server_list_command
Implementation of server-list transport command.
Definition: transport_command.hpp:561
irccd::daemon::rule_remove_command
Implementation of rule-remove transport command.
Definition: transport_command.hpp:376
irccd::daemon::plugin_config_command
Implementation of plugin-config transport command.
Definition: transport_command.hpp:104
irccd::daemon::server_kick_command
Implementation of server-kick transport command.
Definition: transport_command.hpp:540
irccd::daemon::bot
Irccd main instance.
Definition: bot.hpp:58
irccd::daemon::server_notice_command::get_name
auto get_name() const noexcept -> std::string_view override
irccd::daemon::plugin_unload_command::get_name
auto get_name() const noexcept -> std::string_view override
irccd::daemon::server_disconnect_command::get_name
auto get_name() const noexcept -> std::string_view override
irccd::json_util::deserializer
Convenient JSON object parser.
Definition: json_util.hpp:225
irccd::daemon::server_reconnect_command
Implementation of server-reconnect transport command.
Definition: transport_command.hpp:750
irccd::daemon::server_join_command
Implementation of server-join transport command.
Definition: transport_command.hpp:512
irccd::daemon::plugin_list_command
Implementation of plugin-list transport command.
Definition: transport_command.hpp:150
irccd::daemon::server_connect_command
Implementation of server-connect transport command.
Definition: transport_command.hpp:405
irccd::daemon::rule_add_command
Implementation of rule-add transport command.
Definition: transport_command.hpp:254
irccd::daemon::rule_edit_command
Implementation of rule-edit transport command.
Definition: transport_command.hpp:280
std
Definition: bot.hpp:253
irccd::daemon::plugin_load_command
Implementation of plugin-load transport command.
Definition: transport_command.hpp:177
irccd::daemon::plugin_reload_command
Implementation of plugin-reload transport command.
Definition: transport_command.hpp:203
irccd::daemon::server_nick_command::get_name
auto get_name() const noexcept -> std::string_view override
irccd::daemon
Main irccd namespace.
Definition: bot.hpp:41
irccd::daemon::rule_list_command::get_name
auto get_name() const noexcept -> std::string_view override
irccd::daemon::transport_command::get_name
virtual auto get_name() const noexcept -> std::string_view=0
irccd::daemon::plugin_info_command
Implementation of plugin-info transport command.
Definition: transport_command.hpp:129
irccd::daemon::server_reconnect_command::get_name
auto get_name() const noexcept -> std::string_view override
irccd::daemon::rule_info_command
Implementation of rule-info transport command.
Definition: transport_command.hpp:305
irccd::daemon::plugin_info_command::get_name
auto get_name() const noexcept -> std::string_view override
irccd::daemon::server_info_command::get_name
auto get_name() const noexcept -> std::string_view override
irccd::daemon::rule_remove_command::get_name
auto get_name() const noexcept -> std::string_view override
irccd::daemon::rule_edit_command::get_name
auto get_name() const noexcept -> std::string_view override
irccd::daemon::plugin_list_command::get_name
auto get_name() const noexcept -> std::string_view override
irccd::daemon::server_invite_command::get_name
auto get_name() const noexcept -> std::string_view override
irccd::daemon::server_topic_command
Implementation of server-topic transport command.
Definition: transport_command.hpp:777
irccd::daemon::rule_add_command::get_name
auto get_name() const noexcept -> std::string_view override
irccd::daemon::transport_command::registry
static auto registry() noexcept -> const std::vector< constructor > &
Registry of all commands.
irccd::daemon::server_topic_command::get_name
auto get_name() const noexcept -> std::string_view override
irccd::daemon::server_kick_command::get_name
auto get_name() const noexcept -> std::string_view override