X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fmodules%2Fircv3_replies.h;h=a974773681d8ac006439264755dfb84151687e2a;hb=e94b673532f7833aaa4789f834e61d68e0b4fc56;hp=f87b267a2f6870094597b7b5df5698b6586d7cf9;hpb=60d4b6a3a7ffd1d6e5ac9c1c214d2f14acf0e8dd;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/modules/ircv3_replies.h b/include/modules/ircv3_replies.h index f87b267a2..a97477368 100644 --- a/include/modules/ircv3_replies.h +++ b/include/modules/ircv3_replies.h @@ -1,7 +1,7 @@ /* * InspIRCd -- Internet Relay Chat Daemon * - * Copyright (C) 2019 Sadie Powell + * Copyright (C) 2019-2021 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 @@ -25,6 +25,7 @@ namespace IRCv3 { namespace Replies { + class CapReference; class Reply; class Fail; class Note; @@ -32,6 +33,17 @@ namespace IRCv3 } } +/** Reference to the inspircd.org/standard-replies cap. */ +class IRCv3::Replies::CapReference + : public Cap::Reference +{ + public: + CapReference(Module* mod) + : Cap::Reference(mod, "inspircd.org/standard-replies") + { + } +}; + /** Base class for standard replies. */ class IRCv3::Replies::Reply { @@ -52,6 +64,14 @@ class IRCv3::Replies::Reply user->Send(ev); } + void SendNoticeInternal(LocalUser* user, Command* command, const std::string& description) + { + if (command) + user->WriteNotice(InspIRCd::Format("*** %s: %s", command->name.c_str(), description.c_str())); + else + user->WriteNotice(InspIRCd::Format("*** %s", description.c_str())); + } + protected: /** Initializes a new instance of the Reply class. * @param Creator The module which created this instance. @@ -73,8 +93,11 @@ class IRCv3::Replies::Reply */ void Send(LocalUser* user, Command* command, const std::string& code, const std::string& description) { - ClientProtocol::Message msg(cmd.c_str(), ServerInstance->Config->ServerName); - msg.PushParamRef(command->name); + ClientProtocol::Message msg(cmd.c_str(), ServerInstance->Config->GetServerName()); + if (command) + msg.PushParamRef(command->name); + else + msg.PushParam("*"); msg.PushParam(code); msg.PushParam(description); SendInternal(user, msg); @@ -83,8 +106,11 @@ class IRCv3::Replies::Reply template void Send(LocalUser* user, Command* command, const std::string& code, const T1& p1, const std::string& description) { - ClientProtocol::Message msg(cmd.c_str(), ServerInstance->Config->ServerName); - msg.PushParamRef(command->name); + ClientProtocol::Message msg(cmd.c_str(), ServerInstance->Config->GetServerName()); + if (command) + msg.PushParamRef(command->name); + else + msg.PushParam("*"); msg.PushParam(code); msg.PushParam(ConvToStr(p1)); msg.PushParam(description); @@ -95,8 +121,11 @@ class IRCv3::Replies::Reply void Send(LocalUser* user, Command* command, const std::string& code, const T1& p1, const T2& p2, const std::string& description) { - ClientProtocol::Message msg(cmd.c_str(), ServerInstance->Config->ServerName); - msg.PushParamRef(command->name); + ClientProtocol::Message msg(cmd.c_str(), ServerInstance->Config->GetServerName()); + if (command) + msg.PushParamRef(command->name); + else + msg.PushParam("*"); msg.PushParam(code); msg.PushParam(ConvToStr(p1)); msg.PushParam(ConvToStr(p2)); @@ -108,8 +137,11 @@ class IRCv3::Replies::Reply void Send(LocalUser* user, Command* command, const std::string& code, const T1& p1, const T2& p2, const T3& p3, const std::string& description) { - ClientProtocol::Message msg(cmd.c_str(), ServerInstance->Config->ServerName); - msg.PushParamRef(command->name); + ClientProtocol::Message msg(cmd.c_str(), ServerInstance->Config->GetServerName()); + if (command) + msg.PushParamRef(command->name); + else + msg.PushParam("*"); msg.PushParam(code); msg.PushParam(ConvToStr(p1)); msg.PushParam(ConvToStr(p2)); @@ -122,8 +154,11 @@ class IRCv3::Replies::Reply void Send(LocalUser* user, Command* command, const std::string& code, const T1& p1, const T2& p2, const T3& p3, const T4& p4, const std::string& description) { - ClientProtocol::Message msg(cmd.c_str(), ServerInstance->Config->ServerName); - msg.PushParamRef(command->name); + ClientProtocol::Message msg(cmd.c_str(), ServerInstance->Config->GetServerName()); + if (command) + msg.PushParamRef(command->name); + else + msg.PushParam("*"); msg.PushParam(code); msg.PushParam(ConvToStr(p1)); msg.PushParam(ConvToStr(p2)); @@ -137,8 +172,11 @@ class IRCv3::Replies::Reply void Send(LocalUser* user, Command* command, const std::string& code, const T1& p1, const T2& p2, const T3& p3, const T4& p4, const T5& p5, const std::string& description) { - ClientProtocol::Message msg(cmd.c_str(), ServerInstance->Config->ServerName); - msg.PushParamRef(command->name); + ClientProtocol::Message msg(cmd.c_str(), ServerInstance->Config->GetServerName()); + if (command) + msg.PushParamRef(command->name); + else + msg.PushParam("*"); msg.PushParam(code); msg.PushParam(ConvToStr(p1)); msg.PushParam(ConvToStr(p2)); @@ -163,7 +201,57 @@ class IRCv3::Replies::Reply if (cap.get(user)) Send(user, command, code, description); else - user->WriteNotice(InspIRCd::Format("*** %s: %s", command->name.c_str(), description.c_str())); + SendNoticeInternal(user, command, description); + } + + template + void SendIfCap(LocalUser* user, const Cap::Capability& cap, Command* command, const std::string& code, + const T1& p1, const std::string& description) + { + if (cap.get(user)) + Send(user, command, code, p1, description); + else + SendNoticeInternal(user, command, description); + } + + template + void SendIfCap(LocalUser* user, const Cap::Capability& cap, Command* command, const std::string& code, + const T1& p1, const T2& p2, const std::string& description) + { + if (cap.get(user)) + Send(user, command, code, p1, p2, description); + else + SendNoticeInternal(user, command, description); + } + + template + void SendIfCap(LocalUser* user, const Cap::Capability& cap, Command* command, const std::string& code, + const T1& p1, const T2& p2, const T3& p3, const std::string& description) + { + if (cap.get(user)) + Send(user, command, code, p1, p2, p3, description); + else + SendNoticeInternal(user, command, description); + } + + template + void SendIfCap(LocalUser* user, const Cap::Capability& cap, Command* command, const std::string& code, + const T1& p1, const T2& p2, const T3& p3, const T4& p4, const std::string& description) + { + if (cap.get(user)) + Send(user, command, code, p1, p2, p3, p4, description); + else + SendNoticeInternal(user, command, description); + } + + template + void SendIfCap(LocalUser* user, const Cap::Capability& cap, Command* command, const std::string& code, + const T1& p1, const T2& p2, const T3& p3, const T4& p4, const T5& p5, const std::string& description) + { + if (cap.get(user)) + Send(user, command, code, p1, p2, p3, p4, p5, description); + else + SendNoticeInternal(user, command, description); } };