X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmodules%2Fm_services_account.cpp;h=1ff206ed1427ad4f62c93ead86d1d2d54b04cd10;hb=e7c829af5941c6a8a303ca75ed9ac47570347e41;hp=4ad339fcbca7c43830258dd912b2c25e03c6a9e4;hpb=4711113dff7fc33c96f95f417f2813f28c690e01;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_services_account.cpp b/src/modules/m_services_account.cpp index 4ad339fcb..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 @@ -133,8 +138,9 @@ class AccountExtItemImpl : public AccountExtItem } }; -class ModuleServicesAccount : public Module +class ModuleServicesAccount : public Module, public Whois::EventListener { + CheckExemption::EventProvider exemptionprov; AChannel_R m1; AChannel_M m2; AUser_R m3; @@ -143,8 +149,11 @@ class ModuleServicesAccount : public Module AccountExtItemImpl accountname; bool checking_ban; public: - ModuleServicesAccount() : m1(this), m2(this), m3(this), m4(this), m5(this), - accountname(this) + ModuleServicesAccount() + : Whois::EventListener(this) + , exemptionprov(this) + , m1(this), m2(this), m3(this), m4(this), m5(this) + , accountname(this) , checking_ban(false) { } @@ -162,20 +171,20 @@ class ModuleServicesAccount : public Module 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); } @@ -190,12 +199,13 @@ class ModuleServicesAccount : public Module 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; } } @@ -206,7 +216,7 @@ class ModuleServicesAccount : public Module 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; } } @@ -261,7 +271,7 @@ class ModuleServicesAccount : public Module 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; } }