diff options
author | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2007-08-26 20:43:15 +0000 |
---|---|---|
committer | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2007-08-26 20:43:15 +0000 |
commit | d58d9fb4957168c134ae1e89005ff03154366a2a (patch) | |
tree | d26b3ee3e6d7fe6555d192f6316d60da78721ffd | |
parent | 3a7af31bcd081debd490aa57a1d142bebf430b61 (diff) |
Add option to set invite announcements to nobody, ops only, or all users, based on options:announceinvites. Part of bug #386, should not be backported.
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@7837 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r-- | docs/inspircd.conf.example | 11 | ||||
-rw-r--r-- | include/configreader.h | 7 | ||||
-rw-r--r-- | src/cmd_invite.cpp | 14 | ||||
-rw-r--r-- | src/configreader.cpp | 17 |
4 files changed, 40 insertions, 9 deletions
diff --git a/docs/inspircd.conf.example b/docs/inspircd.conf.example index 33840ac28..ce0432220 100644 --- a/docs/inspircd.conf.example +++ b/docs/inspircd.conf.example @@ -857,10 +857,12 @@ # if set to no, then only the nickname is shown. # # # # announceinvites # -# - If this option is set to yes (the default), then # -# invites are announced to the channel when a user # -# invites annother user. If you consider this to be # -# unnecessary noise, explicitly set this to no. # +# - If this option is set, then invites are announced # +# to the channel when a user invites annother user. # +# If you consider this to be unnecessary noise, # +# set this to 'none'. To announce to all ops, set # +# this to 'ops' and to announce to all users set the # +# value to 'all'. # # # # disablehmac - If you are linking your InspIRCd to older versions # # then you can specify this option and set it to # @@ -948,6 +950,7 @@ serverpingfreq="60" allowhalfop="yes" defaultmodes="nt" + announceinvites="all" moronbanner="You're banned! Email haha@abuse.com with the ERROR line below for help." exemptchanops=""> diff --git a/include/configreader.h b/include/configreader.h index 648b02eb1..703c28414 100644 --- a/include/configreader.h +++ b/include/configreader.h @@ -239,7 +239,10 @@ class CoreExport ServerConfig : public Extensible public: - /* Pointer to function that validates dns server addresses (can be changed depending on platform) */ + /** Used to indicate who we announce invites to on a channel */ + enum InviteAnnounceState { INVITE_ANNOUNCE_NONE, INVITE_ANNOUNCE_ALL, INVITE_ANNOUNCE_OPS }; + + /** Pointer to function that validates dns server addresses (can be changed depending on platform) */ Validator DNSServerValidator; InspIRCd* GetInstance(); @@ -459,7 +462,7 @@ class CoreExport ServerConfig : public Extensible /** Announce invites to the channel with a server notice */ - bool AnnounceInvites; + InviteAnnounceState AnnounceInvites; /** If this is enabled then operators will * see invisible (+i) channels in /whois. diff --git a/src/cmd_invite.cpp b/src/cmd_invite.cpp index f4368071a..a6e82d281 100644 --- a/src/cmd_invite.cpp +++ b/src/cmd_invite.cpp @@ -78,8 +78,18 @@ CmdResult cmd_invite::Handle (const char** parameters, int pcnt, userrec *user) u->InviteTo(c->name); u->WriteFrom(user,"INVITE %s :%s",u->nick,c->name); user->WriteServ("341 %s %s %s",user->nick,u->nick,c->name); - if (ServerInstance->Config->AnnounceInvites) - c->WriteChannelWithServ(ServerInstance->Config->ServerName, "NOTICE %s :*** %s invited %s into the channel", c->name, user->nick, u->nick); + switch (ServerInstance->Config->AnnounceInvites) + { + case ServerConfig::INVITE_ANNOUNCE_ALL: + c->WriteChannelWithServ(ServerInstance->Config->ServerName, "NOTICE %s :*** %s invited %s into the channel", c->name, user->nick, u->nick); + break; + case ServerConfig::INVITE_ANNOUNCE_OPS: + c->WriteAllExceptSender(user, true, '@', "NOTICE %s :*** %s invited %s into the channel", c->name, user->nick, u->nick); + break; + default: + /* Nobody */ + break; + } FOREACH_MOD(I_OnUserInvite,OnUserInvite(user,u,c)); } else diff --git a/src/configreader.cpp b/src/configreader.cpp index e6aa30de3..06a86a775 100644 --- a/src/configreader.cpp +++ b/src/configreader.cpp @@ -353,6 +353,20 @@ bool ValidateExemptChanOps(ServerConfig* conf, const char* tag, const char* valu return true; } +bool ValidateInvite(ServerConfig* conf, const char* tag, const char* value, ValueItem &data) +{ + std::string v = data.GetString(); + + if (v == "ops") + conf->AnnounceInvites = ServerConfig::INVITE_ANNOUNCE_OPS; + else if (v == "all") + conf->AnnounceInvites = ServerConfig::INVITE_ANNOUNCE_ALL; + else + conf->AnnounceInvites = ServerConfig::INVITE_ANNOUNCE_NONE; + + return true; +} + bool ValidateWhoWas(ServerConfig* conf, const char* tag, const char* value, ValueItem &data) { conf->WhoWasMaxKeep = conf->GetInstance()->Duration(data.GetString()); @@ -605,6 +619,7 @@ void ServerConfig::Read(bool bail, userrec* user) static char maxkeep[MAXBUF]; /* Temporary buffer for WhoWasMaxKeep value */ static char hidemodes[MAXBUF]; /* Modes to not allow listing from users below halfop */ static char exemptchanops[MAXBUF]; /* Exempt channel ops from these modes */ + static char announceinvites[MAXBUF]; /* options:announceinvites setting */ int rem = 0, add = 0; /* Number of modules added, number of modules removed */ std::ostringstream errstr; /* String stream containing the error output */ @@ -649,7 +664,7 @@ void ServerConfig::Read(bool bail, userrec* user) {"options", "syntaxhints", "0", new ValueContainerBool (&this->SyntaxHints), DT_BOOLEAN, NoValidation}, {"options", "cyclehosts", "0", new ValueContainerBool (&this->CycleHosts), DT_BOOLEAN, NoValidation}, {"options", "ircumsgprefix","0", new ValueContainerBool (&this->UndernetMsgPrefix), DT_BOOLEAN, NoValidation}, - {"options", "announceinvites", "1", new ValueContainerBool (&this->AnnounceInvites), DT_BOOLEAN, NoValidation}, + {"options", "announceinvites", "1", new ValueContainerChar (announceinvites), DT_CHARPTR, ValidateInvite}, {"options", "hostintopic", "1", new ValueContainerBool (&this->FullHostInTopic), DT_BOOLEAN, NoValidation}, {"options", "hidemodes", "", new ValueContainerChar (hidemodes), DT_CHARPTR, ValidateModeLists}, {"options", "exemptchanops","", new ValueContainerChar (exemptchanops), DT_CHARPTR, ValidateExemptChanOps}, |