1 /* +------------------------------------+
2 * | Inspire Internet Relay Chat Daemon |
3 * +------------------------------------+
5 * InspIRCd: (C) 2002-2009 InspIRCd Development Team
6 * See: http://wiki.inspircd.org/Credits
8 * This program is free but copyrighted software; see
9 * the file COPYING for details.
11 * ---------------------------------------------------
16 /* $ModDesc: Provides support for hiding oper status with user mode +H */
18 /** Handles user mode +H
20 class HideOper : public ModeHandler
23 HideOper(Module* Creator) : ModeHandler(Creator, 'H', PARAM_NONE, MODETYPE_USER)
28 ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string ¶meter, bool adding)
32 if (!dest->IsModeSet('H'))
34 dest->SetMode('H',true);
35 return MODEACTION_ALLOW;
40 if (dest->IsModeSet('H'))
42 dest->SetMode('H',false);
43 return MODEACTION_ALLOW;
47 return MODEACTION_DENY;
51 class ModuleHideOper : public Module
59 if (!ServerInstance->Modes->AddMode(&hm))
60 throw ModuleException("Could not add new modes!");
61 Implementation eventlist[] = { I_OnWhoisLine };
62 ServerInstance->Modules->Attach(eventlist, this, 1);
66 virtual ~ModuleHideOper()
70 virtual Version GetVersion()
72 return Version("Provides support for hiding oper status with user mode +H", VF_COMMON | VF_VENDOR, API_VERSION);
75 ModResult OnWhoisLine(User* user, User* dest, int &numeric, std::string &text)
77 /* Dont display numeric 313 (RPL_WHOISOPER) if they have +H set and the
78 * person doing the WHOIS is not an oper
81 return MOD_RES_PASSTHRU;
83 if (!dest->IsModeSet('H'))
84 return MOD_RES_PASSTHRU;
86 if (!user->HasPrivPermission("users/auspex"))
89 return MOD_RES_PASSTHRU;
92 void OnSendWhoLine(User* source, User* user, Channel* channel, std::string& line)
94 if (user->IsModeSet('H') && !source->HasPrivPermission("users/auspex"))
96 // hide the "*" that marks the user as an oper from the /WHO line
97 std::string::size_type pos = line.find("* ");
98 if (pos != std::string::npos)
105 MODULE_INIT(ModuleHideOper)