X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_services_account.cpp;h=1ff206ed1427ad4f62c93ead86d1d2d54b04cd10;hb=e7c829af5941c6a8a303ca75ed9ac47570347e41;hp=a11b05ca32852bcb0ae0c3bc6b7059310882b020;hpb=61696290a6ba5a2a862a0fa43508767886da3497;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_services_account.cpp b/src/modules/m_services_account.cpp index a11b05ca3..1ff206ed1 100644 --- a/src/modules/m_services_account.cpp +++ b/src/modules/m_services_account.cpp @@ -24,6 +24,7 @@ #include "inspircd.h" #include "modules/account.h" +#include "modules/exemption.h" /** Channel mode +r - mark a channel as identified */ @@ -46,7 +47,7 @@ class Channel_r : public ModeHandler } else { - source->WriteNumeric(500, ":Only a server may modify the +r channel mode"); + source->WriteNumeric(500, "Only a server may modify the +r channel mode"); } return MODEACTION_DENY; } @@ -72,7 +73,7 @@ class User_r : public ModeHandler } else { - source->WriteNumeric(500, ":Only a server may modify the +r user mode"); + source->WriteNumeric(500, "Only a server may modify the +r user mode"); } return MODEACTION_DENY; } @@ -118,13 +119,17 @@ class AccountExtItemImpl : public AccountExtItem User* user = static_cast(container); StringExtItem::unserialize(format, container, value); + + // If we are being reloaded then don't send the numeric or run the event + if (format == FORMAT_INTERNAL) + return; + if (!value.empty()) { // Logged in if (IS_LOCAL(user)) { - user->WriteNumeric(900, "%s %s :You are now logged in as %s", - user->GetFullHost().c_str(), value.c_str(), value.c_str()); + user->WriteNumeric(900, user->GetFullHost(), value, InspIRCd::Format("You are now logged in as %s", value.c_str())); } } // If value is empty then logged out @@ -135,6 +140,7 @@ class AccountExtItemImpl : public AccountExtItem class ModuleServicesAccount : public Module, public Whois::EventListener { + CheckExemption::EventProvider exemptionprov; AChannel_R m1; AChannel_M m2; AUser_R m3; @@ -145,6 +151,7 @@ class ModuleServicesAccount : public Module, public Whois::EventListener public: ModuleServicesAccount() : Whois::EventListener(this) + , exemptionprov(this) , m1(this), m2(this), m3(this), m4(this), m5(this) , accountname(this) , checking_ban(false) @@ -164,20 +171,20 @@ class ModuleServicesAccount : public Module, public Whois::EventListener if (account) { - whois.SendLine(330, "%s :is logged in as", account->c_str()); + whois.SendLine(330, *account, "is logged in as"); } if (whois.GetTarget()->IsModeSet(m5)) { /* user is registered */ - whois.SendLine(307, ":is a registered nick"); + whois.SendLine(307, "is a registered nick"); } } void OnUserPostNick(User* user, const std::string &oldnick) CXX11_OVERRIDE { /* On nickchange, if they have +r, remove it */ - if (user->IsModeSet(m5) && assign(user->nick) != oldnick) + if ((user->IsModeSet(m5)) && (ServerInstance->FindNickOnly(oldnick) != user)) m5.RemoveMode(user); } @@ -192,12 +199,13 @@ class ModuleServicesAccount : public Module, public Whois::EventListener if (target_type == TYPE_CHANNEL) { Channel* c = (Channel*)dest; - ModResult res = ServerInstance->OnCheckExemption(user,c,"regmoderated"); + ModResult res; + FIRST_MOD_RESULT_CUSTOM(exemptionprov, CheckExemption::EventListener, OnCheckExemption, res, (user, c, "regmoderated")); if (c->IsModeSet(m2) && !is_registered && res != MOD_RES_ALLOW) { // user messaging a +M channel and is not registered - user->WriteNumeric(477, c->name+" :You need to be identified to a registered account to message this channel"); + user->WriteNumeric(477, c->name, "You need to be identified to a registered account to message this channel"); return MOD_RES_DENY; } } @@ -208,7 +216,7 @@ class ModuleServicesAccount : public Module, public Whois::EventListener if (u->IsModeSet(m3) && !is_registered) { // user messaging a +R user and is not registered - user->WriteNumeric(477, u->nick +" :You need to be identified to a registered account to message this user"); + user->WriteNumeric(477, u->nick, "You need to be identified to a registered account to message this user"); return MOD_RES_DENY; } } @@ -263,7 +271,7 @@ class ModuleServicesAccount : public Module, public Whois::EventListener if (!is_registered) { // joining a +R channel and not identified - user->WriteNumeric(477, chan->name + " :You need to be identified to a registered account to join this channel"); + user->WriteNumeric(477, chan->name, "You need to be identified to a registered account to join this channel"); return MOD_RES_DENY; } }