mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-09 18:49:03 -04:00
Add OnSendWhoLine hook, and use it in the oper hiding modules
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11650 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
parent
0155dd1e97
commit
1b3dabf0ba
@ -428,7 +428,7 @@ enum Implementation
|
||||
I_OnPostOper, I_OnSyncNetwork, I_OnSetAway, I_OnUserList, I_OnPostCommand, I_OnPostJoin,
|
||||
I_OnWhoisLine, I_OnBuildExemptList, I_OnRawSocketConnect, I_OnGarbageCollect, I_OnBufferFlushed,
|
||||
I_OnText, I_OnPassCompare, I_OnRunTestSuite, I_OnNamesListItem, I_OnNumeric, I_OnHookIO,
|
||||
I_OnHostCycle, I_OnPreRehash, I_OnModuleRehash,
|
||||
I_OnHostCycle, I_OnPreRehash, I_OnModuleRehash, I_OnSendWhoLine,
|
||||
I_END
|
||||
};
|
||||
|
||||
@ -1413,6 +1413,14 @@ class CoreExport Module : public Extensible
|
||||
* even if it is enabled.
|
||||
*/
|
||||
virtual ModResult OnHostCycle(User* user);
|
||||
|
||||
/** Called whenever a result from /WHO is about to be returned
|
||||
* @param source The user running the /WHO query
|
||||
* @param user The user that this line of the query is about
|
||||
* @param channel The channel being queried (or NULL if not a channel query)
|
||||
* @param line The raw line to send; modifiable, if empty no line will be returned.
|
||||
*/
|
||||
virtual void OnSendWhoLine(User* source, User* user, Channel* channel, std::string& line);
|
||||
};
|
||||
|
||||
|
||||
|
@ -171,7 +171,11 @@ void CommandWho::SendWhoLine(User* user, const std::string &initial, Channel* ch
|
||||
}
|
||||
|
||||
wholine = wholine + (ch ? ch->GetPrefixChar(u) : (chlast ? chlast->GetPrefixChar(u) : "")) + " :0 " + u->fullname;
|
||||
whoresults.push_back(wholine);
|
||||
|
||||
FOREACH_MOD(I_OnSendWhoLine, OnSendWhoLine(user, u, ch, wholine));
|
||||
|
||||
if (!wholine.empty())
|
||||
whoresults.push_back(wholine);
|
||||
}
|
||||
|
||||
CmdResult CommandWho::Handle (const std::vector<std::string>& parameters, User *user)
|
||||
|
@ -198,6 +198,7 @@ void Module::OnNamesListItem(User*, User*, Channel*, std::string&, std::string&
|
||||
ModResult Module::OnNumeric(User*, unsigned int, const std::string&) { return MOD_RES_PASSTHRU; }
|
||||
void Module::OnHookIO(EventHandler*, ListenSocketBase*) { }
|
||||
ModResult Module::OnHostCycle(User*) { return MOD_RES_PASSTHRU; }
|
||||
void Module::OnSendWhoLine(User*, User*, Channel*, std::string&) { }
|
||||
|
||||
ModuleManager::ModuleManager(InspIRCd* Ins) : ModCount(0), Instance(Ins)
|
||||
{
|
||||
|
@ -86,6 +86,17 @@ class ModuleHideOper : public Module
|
||||
|
||||
return MOD_RES_PASSTHRU;
|
||||
}
|
||||
|
||||
void OnSendWhoLine(User* source, User* user, Channel* channel, std::string& line)
|
||||
{
|
||||
if (user->IsModeSet('H') && !source->HasPrivPermission("users/auspex"))
|
||||
{
|
||||
// hide the "*" that marks the user as an oper from the /WHO line
|
||||
std::string::size_type pos = line.find("* ");
|
||||
if (pos != std::string::npos)
|
||||
line.erase(pos);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
@ -117,8 +117,11 @@ class ModuleInvisible : public Module
|
||||
|
||||
/* Yeah i know people can take this out. I'm not about to obfuscate code just to be a pain in the ass. */
|
||||
ServerInstance->Users->ServerNoticeAll("*** m_invisible.so has just been loaded on this network. For more information, please visit http://inspircd.org/wiki/Modules/invisible");
|
||||
Implementation eventlist[] = { I_OnUserPreMessage, I_OnUserPreNotice, I_OnUserJoin, I_OnUserPart, I_OnUserQuit, I_OnRehash, I_OnHostCycle };
|
||||
ServerInstance->Modules->Attach(eventlist, this, 7);
|
||||
Implementation eventlist[] = {
|
||||
I_OnUserPreMessage, I_OnUserPreNotice, I_OnUserJoin, I_OnUserPart, I_OnUserQuit,
|
||||
I_OnRehash, I_OnHostCycle, I_OnSendWhoLine
|
||||
};
|
||||
ServerInstance->Modules->Attach(eventlist, this, 8);
|
||||
};
|
||||
|
||||
virtual ~ModuleInvisible()
|
||||
@ -128,17 +131,16 @@ class ModuleInvisible : public Module
|
||||
delete conf;
|
||||
};
|
||||
|
||||
virtual Version GetVersion();
|
||||
virtual void OnUserJoin(User* user, Channel* channel, bool sync, bool &silent, bool created);
|
||||
virtual void OnRehash(User* user);
|
||||
Version GetVersion();
|
||||
void OnUserJoin(User* user, Channel* channel, bool sync, bool &silent, bool created);
|
||||
void OnRehash(User* user);
|
||||
void OnUserPart(User* user, Channel* channel, std::string &partmessage, bool &silent);
|
||||
void OnUserQuit(User* user, const std::string &reason, const std::string &oper_message);
|
||||
ModResult OnHostCycle(User* user);
|
||||
/* No privmsg response when hiding - submitted by Eric at neowin */
|
||||
virtual ModResult OnUserPreNotice(User* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list);
|
||||
virtual ModResult OnUserPreMessage(User* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list);
|
||||
/* Fix by Eric @ neowin.net, thanks :) -- Brain */
|
||||
ModResult OnUserPreNotice(User* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list);
|
||||
ModResult OnUserPreMessage(User* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list);
|
||||
void WriteCommonFrom(User *user, Channel* channel, const char* text, ...) CUSTOM_PRINTF(4, 5);
|
||||
void OnSendWhoLine(User* source, User* user, Channel* channel, std::string& line);
|
||||
};
|
||||
|
||||
Version ModuleInvisible::GetVersion()
|
||||
@ -246,4 +248,10 @@ void ModuleInvisible::WriteCommonFrom(User *user, Channel* channel, const char*
|
||||
}
|
||||
}
|
||||
|
||||
void ModuleInvisible::OnSendWhoLine(User* source, User* user, Channel* channel, std::string& line)
|
||||
{
|
||||
if (user->IsModeSet('Q') && !IS_OPER(source))
|
||||
line.clear();
|
||||
}
|
||||
|
||||
MODULE_INIT(ModuleInvisible)
|
||||
|
Loading…
x
Reference in New Issue
Block a user