/*
* InspIRCd -- Internet Relay Chat Daemon
*
+ * Copyright (C) 2018-2020 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2015-2016 Attila Molnar <attilamolnar@hush.com>
*
* This file is part of InspIRCd. InspIRCd is free software: you can
namespace Numerics
{
+ class CannotSendTo;
class InvalidModeParameter;
class NoSuchChannel;
class NoSuchNick;
}
+/** Builder for the ERR_CANNOTSENDTOCHAN and ERR_CANTSENDTOUSER numerics. */
+class Numerics::CannotSendTo : public Numeric::Numeric
+{
+ public:
+ CannotSendTo(Channel* chan, const std::string& message)
+ : Numeric(ERR_CANNOTSENDTOCHAN)
+ {
+ push(chan->name);
+ push(message);
+ }
+
+ CannotSendTo(Channel* chan, const std::string& what, ModeHandler* mh)
+ : Numeric(ERR_CANNOTSENDTOCHAN)
+ {
+ push(chan->name);
+ push(InspIRCd::Format("You cannot send %s to this channel whilst the +%c (%s) mode is set.",
+ what.c_str(), mh->GetModeChar(), mh->name.c_str()));
+ }
+
+ CannotSendTo(Channel* chan, const std::string& what, char extban, const std::string& extbandesc)
+ : Numeric(ERR_CANNOTSENDTOCHAN)
+ {
+ push(chan->name);
+ push(InspIRCd::Format("You cannot send %s to this channel whilst %s %c: (%s) extban is set matching you.",
+ what.c_str(), strchr("AEIOUaeiou", extban) ? "an" : "a", extban, extbandesc.c_str()));
+ }
+
+ CannotSendTo(User* user, const std::string& message)
+ : Numeric(ERR_CANTSENDTOUSER)
+ {
+ push(user->registered & REG_NICK ? user->nick : "*");
+ push(message);
+ }
+
+ CannotSendTo(User* user, const std::string& what, ModeHandler* mh, bool self = false)
+ : Numeric(ERR_CANTSENDTOUSER)
+ {
+ push(user->registered & REG_NICK ? user->nick : "*");
+ push(InspIRCd::Format("You cannot send %s to this user whilst %s have the +%c (%s) mode set.",
+ what.c_str(), self ? "you" : "they", mh->GetModeChar(), mh->name.c_str()));
+ }
+};
+
/* Builder for the ERR_INVALIDMODEPARAM numeric. */
class Numerics::InvalidModeParameter : public Numeric::Numeric
{
NoSuchChannel(const std::string& chan)
: Numeric(ERR_NOSUCHCHANNEL)
{
- push(chan);
+ push(chan.empty() ? "*" : chan);
push("No such channel");
}
};
NoSuchNick(const std::string& nick)
: Numeric(ERR_NOSUCHNICK)
{
- push(nick);
+ push(nick.empty() ? "*" : nick);
push("No such nick");
}
};