changeset 206:11808e98218f

Irccd: add more properties
author David Demelier <markand@malikania.fr>
date Tue, 21 Jun 2016 12:36:46 +0200
parents eb5b0f480d63
children 6635b9187d71
files lib/irccd/cmd-plugin-unload.cpp lib/irccd/cmd-plugin-unload.hpp lib/irccd/cmd-server-cmode.cpp lib/irccd/cmd-server-cmode.hpp lib/irccd/cmd-server-cnotice.cpp lib/irccd/cmd-server-cnotice.hpp lib/irccd/cmd-server-connect.cpp lib/irccd/cmd-server-connect.hpp lib/irccd/cmd-server-info.cpp lib/irccd/cmd-server-info.hpp lib/irccd/cmd-server-invite.cpp lib/irccd/cmd-server-invite.hpp lib/irccd/cmd-server-join.cpp lib/irccd/cmd-server-join.hpp lib/irccd/cmd-server-kick.cpp lib/irccd/cmd-server-kick.hpp lib/irccd/cmd-server-me.cpp lib/irccd/cmd-server-me.hpp lib/irccd/cmd-server-message.cpp lib/irccd/cmd-server-message.hpp lib/irccd/cmd-server-mode.cpp lib/irccd/cmd-server-mode.hpp lib/irccd/cmd-server-nick.cpp lib/irccd/cmd-server-nick.hpp lib/irccd/cmd-server-notice.cpp lib/irccd/cmd-server-notice.hpp lib/irccd/cmd-server-part.cpp lib/irccd/cmd-server-part.hpp lib/irccd/cmd-server-topic.cpp lib/irccd/cmd-server-topic.hpp
diffstat 30 files changed, 237 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/lib/irccd/cmd-plugin-unload.cpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-plugin-unload.cpp	Tue Jun 21 12:36:46 2016 +0200
@@ -40,11 +40,18 @@
 	return {{ "plugin", true }};
 }
 
+std::vector<Command::Property> PluginUnload::properties() const
+{
+	return {{ "plugin", { json::Type::String }}};
+}
+
 json::Value PluginUnload::exec(Irccd &irccd, const json::Value &request) const
 {
+	Command::exec(irccd, request);
+
 	irccd.pluginService().unload(request.at("plugin").toString());
 
-	return Command::exec(irccd, request);
+	return json::object();
 }
 
 } // !command
--- a/lib/irccd/cmd-plugin-unload.hpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-plugin-unload.hpp	Tue Jun 21 12:36:46 2016 +0200
@@ -52,6 +52,11 @@
 	IRCCD_EXPORT std::vector<Arg> args() const override;
 
 	/**
+	 * \copydoc Command::properties
+	 */
+	IRCCD_EXPORT std::vector<Property> properties() const override;
+
+	/**
 	 * \copydoc Command::exec
 	 */
 	IRCCD_EXPORT json::Value exec(Irccd &irccd, const json::Value &request) const override;
--- a/lib/irccd/cmd-server-cmode.cpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-cmode.cpp	Tue Jun 21 12:36:46 2016 +0200
@@ -44,14 +44,25 @@
 	};
 }
 
+std::vector<Command::Property> ServerChannelMode::properties() const
+{
+	return {
+		{ "server",	{ json::Type::String }},
+		{ "channel",	{ json::Type::String }},
+		{ "mode",	{ json::Type::String }}
+	};
+}
+
 json::Value ServerChannelMode::exec(Irccd &irccd, const json::Value &request) const
 {
+	Command::exec(irccd, request);
+
 	irccd.serverService().require(request.at("server").toString())->cmode(
 		request.at("channel").toString(),
 		request.at("mode").toString()
 	);
 
-	return Command::exec(irccd, request);
+	return json::object();
 }
 
 } // !command
--- a/lib/irccd/cmd-server-cmode.hpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-cmode.hpp	Tue Jun 21 12:36:46 2016 +0200
@@ -52,6 +52,11 @@
 	IRCCD_EXPORT std::vector<Arg> args() const override;
 
 	/**
+	 * \copydoc Command::properties
+	 */
+	IRCCD_EXPORT std::vector<Property> properties() const override;
+
+	/**
 	 * \copydoc Command::exec
 	 */
 	IRCCD_EXPORT json::Value exec(Irccd &irccd, const json::Value &request) const override;
--- a/lib/irccd/cmd-server-cnotice.cpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-cnotice.cpp	Tue Jun 21 12:36:46 2016 +0200
@@ -44,14 +44,25 @@
 	};
 }
 
+std::vector<Command::Property> ServerChannelNotice::properties() const
+{
+	return {
+		{ "server",	{ json::Type::String }},
+		{ "channel",	{ json::Type::String }},
+		{ "message",	{ json::Type::String }}
+	};
+}
+
 json::Value ServerChannelNotice::exec(Irccd &irccd, const json::Value &request) const
 {
+	Command::exec(irccd, request);
+
 	irccd.serverService().require(request.at("server").toString())->cnotice(
 		request.at("channel").toString(),
 		request.at("message").toString()
 	);
 
-	return Command::exec(irccd, request);
+	return json::object();
 }
 
 } // !command
--- a/lib/irccd/cmd-server-cnotice.hpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-cnotice.hpp	Tue Jun 21 12:36:46 2016 +0200
@@ -61,6 +61,11 @@
 	IRCCD_EXPORT std::vector<Arg> args() const override;
 
 	/**
+	 * \copydoc Command::properties
+	 */
+	IRCCD_EXPORT std::vector<Property> properties() const override;
+
+	/**
 	 * \copydoc Command::exec
 	 */
 	IRCCD_EXPORT json::Value exec(Irccd &irccd, const json::Value &request) const override;
--- a/lib/irccd/cmd-server-connect.cpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-connect.cpp	Tue Jun 21 12:36:46 2016 +0200
@@ -146,6 +146,12 @@
 	};
 }
 
+std::vector<Command::Property> ServerConnect::properties() const
+{
+	// TODO
+	return {};
+}
+
 json::Value ServerConnect::exec(Irccd &irccd, const json::Value &request) const
 {
 	auto server = std::make_shared<Server>(readInfoName(request), readInfo(request), readIdentity(request), readSettings(request));
--- a/lib/irccd/cmd-server-connect.hpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-connect.hpp	Tue Jun 21 12:36:46 2016 +0200
@@ -57,6 +57,11 @@
 	IRCCD_EXPORT std::vector<Arg> args() const override;
 
 	/**
+	 * \copydoc Command::properties
+	 */
+	IRCCD_EXPORT std::vector<Property> properties() const override;
+
+	/**
 	 * \copydoc Command::exec
 	 */
 	IRCCD_EXPORT json::Value exec(Irccd &irccd, const json::Value &request) const override;
--- a/lib/irccd/cmd-server-info.cpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-info.cpp	Tue Jun 21 12:36:46 2016 +0200
@@ -42,6 +42,11 @@
 	return {{ "server", true }};
 }
 
+std::vector<Command::Property> ServerInfo::properties() const
+{
+	return {{ "server", { json::Type::String }}};
+}
+
 json::Value ServerInfo::request(Irccdctl &, const CommandRequest &args) const
 {
 	return json::object({
@@ -53,10 +58,10 @@
 
 json::Value ServerInfo::exec(Irccd &irccd, const json::Value &request) const
 {
+	auto response = Command::exec(irccd, request);
 	auto server = irccd.serverService().require(request.at("server").toString());
-	auto response = Command::exec(irccd, request);
 
-	/* General stuff */
+	// General stuff.
 	response.insert("name", server->name());
 	response.insert("host", server->info().host);
 	response.insert("port", server->info().port);
--- a/lib/irccd/cmd-server-info.hpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-info.hpp	Tue Jun 21 12:36:46 2016 +0200
@@ -52,6 +52,11 @@
 	IRCCD_EXPORT std::vector<Arg> args() const override;
 
 	/**
+	 * \copydoc Command::properties
+	 */
+	IRCCD_EXPORT std::vector<Property> properties() const override;
+
+	/**
 	 * \copydoc Command::request
 	 */
 	IRCCD_EXPORT json::Value request(Irccdctl &irccdctl, const CommandRequest &args) const override;
--- a/lib/irccd/cmd-server-invite.cpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-invite.cpp	Tue Jun 21 12:36:46 2016 +0200
@@ -44,6 +44,15 @@
 	};
 }
 
+std::vector<Command::Property> ServerInvite::properties() const
+{
+	return {
+		{ "server",	{ json::Type::String }},
+		{ "target",	{ json::Type::String }},
+		{ "channel",	{ json::Type::String }}
+	};
+}
+
 json::Value ServerInvite::request(Irccdctl &, const CommandRequest &args) const
 {
 	return json::object({
@@ -55,13 +64,15 @@
 
 json::Value ServerInvite::exec(Irccd &irccd, const json::Value &request) const
 {
+	Command::exec(irccd, request);
+
 	irccd.serverService().require(
 		request.at("server").toString())->invite(
 		request.at("target").toString(),
 		request.at("channel").toString()
 	);
 
-	return Command::exec(irccd, request);
+	return json::object();
 }
 
 } // !command
--- a/lib/irccd/cmd-server-invite.hpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-invite.hpp	Tue Jun 21 12:36:46 2016 +0200
@@ -52,6 +52,11 @@
 	IRCCD_EXPORT std::vector<Arg> args() const override;
 
 	/**
+	 * \copydoc Command::properties
+	 */
+	IRCCD_EXPORT std::vector<Property> properties() const override;
+
+	/**
 	 * \copydoc Command::request
 	 */
 	IRCCD_EXPORT json::Value request(Irccdctl &irccdctl, const CommandRequest &args) const override;
--- a/lib/irccd/cmd-server-join.cpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-join.cpp	Tue Jun 21 12:36:46 2016 +0200
@@ -44,6 +44,15 @@
 	};
 }
 
+std::vector<Command::Property> ServerJoin::properties() const
+{
+	return {
+		{ "server",	{ json::Type::String }},
+		{ "channel",	{ json::Type::String }},
+		{ "password",	{ json::Type::String }}
+	};
+}
+
 json::Value ServerJoin::request(Irccdctl &, const CommandRequest &args) const
 {
 	auto req = json::object({
@@ -59,13 +68,15 @@
 
 json::Value ServerJoin::exec(Irccd &irccd, const json::Value &request) const
 {
+	Command::exec(irccd, request);
+
 	irccd.serverService().require(
 		request.at("server").toString())->join(
 		request.at("channel").toString(),
 		request.valueOr("password", json::Type::String, "").toString()
 	);
 
-	return Command::exec(irccd, request);
+	return json::object();
 }
 
 } // !command
--- a/lib/irccd/cmd-server-join.hpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-join.hpp	Tue Jun 21 12:36:46 2016 +0200
@@ -52,6 +52,11 @@
 	IRCCD_EXPORT std::vector<Arg> args() const override;
 
 	/**
+	 * \copydoc Command::properties
+	 */
+	IRCCD_EXPORT std::vector<Property> properties() const override;
+
+	/**
 	 * \copydoc Command::request
 	 */
 	IRCCD_EXPORT json::Value request(Irccdctl &irccdctl, const CommandRequest &args) const override;
--- a/lib/irccd/cmd-server-kick.cpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-kick.cpp	Tue Jun 21 12:36:46 2016 +0200
@@ -45,6 +45,15 @@
 	};
 }
 
+std::vector<Command::Property> ServerKick::properties() const
+{
+	return {
+		{ "server",	{ json::Type::String }},
+		{ "target",	{ json::Type::String }},
+		{ "channel",	{ json::Type::String }}
+	};
+}
+
 json::Value ServerKick::request(Irccdctl &, const CommandRequest &args) const
 {
 	auto req = json::object({
@@ -61,13 +70,15 @@
 
 json::Value ServerKick::exec(Irccd &irccd, const json::Value &request) const
 {
+	Command::exec(irccd, request);
+
 	irccd.serverService().require(request.at("server").toString())->kick(
 		request.at("target").toString(),
 		request.at("channel").toString(),
 		request.valueOr("reason", json::Type::String, "").toString()
 	);
 
-	return Command::exec(irccd, request);
+	return json::object();
 }
 
 } // !command
--- a/lib/irccd/cmd-server-kick.hpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-kick.hpp	Tue Jun 21 12:36:46 2016 +0200
@@ -52,6 +52,11 @@
 	IRCCD_EXPORT std::vector<Arg> args() const override;
 
 	/**
+	 * \copydoc Command::properties
+	 */
+	IRCCD_EXPORT std::vector<Property> properties() const override;
+
+	/**
 	 * \copydoc Command::request
 	 */
 	IRCCD_EXPORT json::Value request(Irccdctl &irccdctl, const CommandRequest &args) const override;
--- a/lib/irccd/cmd-server-me.cpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-me.cpp	Tue Jun 21 12:36:46 2016 +0200
@@ -44,6 +44,15 @@
 	};
 }
 
+std::vector<Command::Property> ServerMe::properties() const
+{
+	return {
+		{ "server",	{ json::Type::String }},
+		{ "target",	{ json::Type::String }},
+		{ "message",	{ json::Type::String }}
+	};
+}
+
 json::Value ServerMe::request(Irccdctl &, const CommandRequest &args) const
 {
 	return json::object({
@@ -55,12 +64,14 @@
 
 json::Value ServerMe::exec(Irccd &irccd, const json::Value &request) const
 {
+	Command::exec(irccd, request);
+
 	irccd.serverService().require(request.at("server").toString())->me(
 		request.at("target").toString(),
 		request.at("message").toString()
 	);
 
-	return nullptr;
+	return json::object();
 }
 
 } // !command
--- a/lib/irccd/cmd-server-me.hpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-me.hpp	Tue Jun 21 12:36:46 2016 +0200
@@ -52,6 +52,11 @@
 	IRCCD_EXPORT std::vector<Arg> args() const override;
 
 	/**
+	 * \copydoc Command::properties
+	 */
+	IRCCD_EXPORT std::vector<Property> properties() const override;
+
+	/**
 	 * \copydoc Command::request
 	 */
 	IRCCD_EXPORT json::Value request(Irccdctl &irccdctl, const CommandRequest &args) const override;
--- a/lib/irccd/cmd-server-message.cpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-message.cpp	Tue Jun 21 12:36:46 2016 +0200
@@ -44,6 +44,15 @@
 	};
 }
 
+std::vector<Command::Property> ServerMessage::properties() const
+{
+	return {
+		{ "server",	{ json::Type::String }},
+		{ "target",	{ json::Type::String }},
+		{ "message",	{ json::Type::String }}
+	};
+}
+
 json::Value ServerMessage::request(Irccdctl &, const CommandRequest &args) const
 {
 	return json::object({
@@ -55,12 +64,14 @@
 
 json::Value ServerMessage::exec(Irccd &irccd, const json::Value &request) const
 {
+	Command::exec(irccd, request);
+
 	irccd.serverService().require(request.at("server").toString())->me(
 		request.at("target").toString(),
 		request.at("message").toString()
 	);
 
-	return nullptr;
+	return json::object();
 }
 
 } // !command
--- a/lib/irccd/cmd-server-message.hpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-message.hpp	Tue Jun 21 12:36:46 2016 +0200
@@ -52,6 +52,11 @@
 	IRCCD_EXPORT std::vector<Arg> args() const override;
 
 	/**
+	 * \copydoc Command::properties
+	 */
+	IRCCD_EXPORT std::vector<Property> properties() const override;
+
+	/**
 	 * \copydoc Command::request
 	 */
 	IRCCD_EXPORT json::Value request(Irccdctl &irccdctl, const CommandRequest &args) const override;
--- a/lib/irccd/cmd-server-mode.cpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-mode.cpp	Tue Jun 21 12:36:46 2016 +0200
@@ -43,6 +43,14 @@
 	};
 }
 
+std::vector<Command::Property> ServerMode::properties() const
+{
+	return {
+		{ "server",	{ json::Type::String }},
+		{ "mode",	{ json::Type::String }}
+	};
+}
+
 json::Value ServerMode::request(Irccdctl &, const CommandRequest &args) const
 {
 	return json::object({
@@ -53,9 +61,11 @@
 
 json::Value ServerMode::exec(Irccd &irccd, const json::Value &request) const
 {
+	Command::exec(irccd, request);
+
 	irccd.serverService().require(request.at("server").toString())->mode(request.at("mode").toString());
 
-	return nullptr;
+	return json::object();
 }
 
 } // !command
--- a/lib/irccd/cmd-server-mode.hpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-mode.hpp	Tue Jun 21 12:36:46 2016 +0200
@@ -52,6 +52,11 @@
 	IRCCD_EXPORT std::vector<Arg> args() const override;
 
 	/**
+	 * \copydoc Command::properties
+	 */
+	IRCCD_EXPORT std::vector<Property> properties() const override;
+
+	/**
 	 * \copydoc Command::request
 	 */
 	IRCCD_EXPORT json::Value request(Irccdctl &irccdctl, const CommandRequest &args) const override;
--- a/lib/irccd/cmd-server-nick.cpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-nick.cpp	Tue Jun 21 12:36:46 2016 +0200
@@ -43,6 +43,14 @@
 	};
 }
 
+std::vector<Command::Property> ServerNick::properties() const
+{
+	return {
+		{ "server",	{ json::Type::String }},
+		{ "nickname",	{ json::Type::String }}
+	};
+}
+
 json::Value ServerNick::request(Irccdctl &, const CommandRequest &args) const
 {
 	return json::object({
@@ -53,9 +61,11 @@
 
 json::Value ServerNick::exec(Irccd &irccd, const json::Value &object) const
 {
+	Command::exec(irccd, object);
+
 	irccd.serverService().require(object.at("server").toString())->nick(object.at("nickname").toString());
 
-	return nullptr;
+	return json::object();
 }
 
 } // !command
--- a/lib/irccd/cmd-server-nick.hpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-nick.hpp	Tue Jun 21 12:36:46 2016 +0200
@@ -52,6 +52,11 @@
 	IRCCD_EXPORT std::vector<Arg> args() const override;
 
 	/**
+	 * \copydoc Command::properties
+	 */
+	IRCCD_EXPORT std::vector<Property> properties() const override;
+
+	/**
 	 * \copydoc Command::request
 	 */
 	IRCCD_EXPORT json::Value request(Irccdctl &irccdctl, const CommandRequest &args) const override;
--- a/lib/irccd/cmd-server-notice.cpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-notice.cpp	Tue Jun 21 12:36:46 2016 +0200
@@ -44,6 +44,15 @@
 	};
 }
 
+std::vector<Command::Property> ServerNotice::properties() const
+{
+	return {
+		{ "server",	{ json::Type::String }},
+		{ "target",	{ json::Type::String }},
+		{ "message",	{ json::Type::String }}
+	};
+}
+
 json::Value ServerNotice::request(Irccdctl &, const CommandRequest &args) const
 {
 	return json::object({
@@ -55,12 +64,14 @@
 
 json::Value ServerNotice::exec(Irccd &irccd, const json::Value &request) const
 {
+	Command::exec(irccd, request);
+
 	irccd.serverService().require(request.at("server").toString())->notice(
 		request.at("target").toString(),
 		request.at("message").toString()
 	);
 
-	return nullptr;
+	return json::object();
 }
 
 } // !command
--- a/lib/irccd/cmd-server-notice.hpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-notice.hpp	Tue Jun 21 12:36:46 2016 +0200
@@ -52,6 +52,11 @@
 	IRCCD_EXPORT std::vector<Arg> args() const override;
 
 	/**
+	 * \copydoc Command::properties
+	 */
+	IRCCD_EXPORT std::vector<Property> properties() const override;
+
+	/**
 	 * \copydoc Command::request
 	 */
 	IRCCD_EXPORT json::Value request(Irccdctl &irccdctl, const CommandRequest &args) const override;
--- a/lib/irccd/cmd-server-part.cpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-part.cpp	Tue Jun 21 12:36:46 2016 +0200
@@ -44,6 +44,14 @@
 	};
 }
 
+std::vector<Command::Property> ServerPart::properties() const
+{
+	return {
+		{ "server",	{ json::Type::String }},
+		{ "channel",	{ json::Type::String }}
+	};
+}
+
 json::Value ServerPart::request(Irccdctl &, const CommandRequest &args) const
 {
 	auto req = json::object({
@@ -59,12 +67,14 @@
 
 json::Value ServerPart::exec(Irccd &irccd, const json::Value &request) const
 {
+	Command::exec(irccd, request);
+
 	irccd.serverService().require(request.at("server").toString())->part(
 		request.at("channel").toString(),
 		request.valueOr("reason", "").toString()
 	);
 
-	return nullptr;
+	return json::object();
 }
 
 } // !command
--- a/lib/irccd/cmd-server-part.hpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-part.hpp	Tue Jun 21 12:36:46 2016 +0200
@@ -52,6 +52,11 @@
 	IRCCD_EXPORT std::vector<Arg> args() const override;
 
 	/**
+	 * \copydoc Command::properties
+	 */
+	IRCCD_EXPORT std::vector<Property> properties() const override;
+
+	/**
 	 * \copydoc Command::request
 	 */
 	IRCCD_EXPORT json::Value request(Irccdctl &irccdctl, const CommandRequest &args) const override;
--- a/lib/irccd/cmd-server-topic.cpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-topic.cpp	Tue Jun 21 12:36:46 2016 +0200
@@ -44,6 +44,15 @@
 	};
 }
 
+std::vector<Command::Property> ServerTopic::properties() const
+{
+	return {
+		{ "server",	{ json::Type::String }},
+		{ "channel",	{ json::Type::String }},
+		{ "topic",	{ json::Type::String }}
+	};
+}
+
 json::Value ServerTopic::request(Irccdctl &, const CommandRequest &args) const
 {
 	return json::object({
@@ -55,12 +64,14 @@
 
 json::Value ServerTopic::exec(Irccd &irccd, const json::Value &request) const
 {
+	Command::exec(irccd, request);
+
 	irccd.serverService().require(request.at("server").toString())->topic(
 		request.at("channel").toString(),
 		request.at("topic").toString()
 	);
 
-	return nullptr;
+	return json::object();
 }
 
 } // !command
--- a/lib/irccd/cmd-server-topic.hpp	Wed Jun 15 20:59:55 2016 +0200
+++ b/lib/irccd/cmd-server-topic.hpp	Tue Jun 21 12:36:46 2016 +0200
@@ -52,6 +52,11 @@
 	IRCCD_EXPORT std::vector<Arg> args() const override;
 
 	/**
+	 * \copydoc Command::properties
+	 */
+	IRCCD_EXPORT std::vector<Property> properties() const override;
+
+	/**
 	 * \copydoc Command::request
 	 */
 	IRCCD_EXPORT json::Value request(Irccdctl &irccdctl, const CommandRequest &args) const override;