class ModuleShowwhois : public Module
{
-
+ bool ShowWhoisFromOpers;
SeeWhois* sw;
public:
ModuleShowwhois(InspIRCd* Me) : Module(Me)
{
- sw = NULL;
- OnRehash(NULL, "");
- Implementation eventlist[] = { I_OnWhois, I_OnRehash };
- ServerInstance->Modules->Attach(eventlist, this, 2);
+ ConfigReader conf(ServerInstance);
+ bool OpersOnly = conf.ReadFlag("showwhois", "opersonly", "yes", 0);
+ ShowWhoisFromOpers = conf.ReadFlag("showwhois", "showfromopers", "yes", 0);
+
+ sw = new SeeWhois(ServerInstance, OpersOnly);
+ if (!ServerInstance->Modes->AddMode(sw))
+ throw ModuleException("Could not add new modes!");
+ Implementation eventlist[] = { I_OnWhois };
+ ServerInstance->Modules->Attach(eventlist, this, 1);
}
~ModuleShowwhois()
return Version("$Id$",VF_COMMON|VF_VENDOR,API_VERSION);
}
- virtual void OnRehash(User *user, const std::string ¶meter)
- {
- ConfigReader conf(ServerInstance);
- bool OpersOnly = conf.ReadFlag("showwhois", "opersonly", 0, true);
-
- if (sw)
- {
- ServerInstance->Modes->DelMode(sw);
- delete sw;
- }
-
- sw = new SeeWhois(ServerInstance, OpersOnly);
- if (!ServerInstance->Modes->AddMode(sw))
- throw ModuleException("Could not add new modes!");
- }
-
virtual void OnWhois(User* source, User* dest)
{
if ((dest->IsModeSet('W')) && (source != dest))
{
+ if (!ShowWhoisFromOpers && IS_OPER(source))
+ return;
+
std::string wmsg = "*** ";
wmsg += source->nick + "(" + source->ident + "@";