summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/modules.h3
-rw-r--r--src/commands/cmd_who.cpp24
-rw-r--r--src/modules.cpp2
-rw-r--r--src/modules/m_auditorium.cpp3
-rw-r--r--src/modules/m_hideoper.cpp2
-rw-r--r--src/modules/m_invisible.cpp42
6 files changed, 17 insertions, 59 deletions
diff --git a/include/modules.h b/include/modules.h
index d889d734d..102ed180b 100644
--- a/include/modules.h
+++ b/include/modules.h
@@ -1275,10 +1275,9 @@ class CoreExport Module : public classbase, public usecountbase
* @param source The user running the /WHO query
* @param params The parameters to 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, const std::vector<std::string>& params, User* user, Channel* channel, std::string& line);
+ virtual void OnSendWhoLine(User* source, const std::vector<std::string>& params, User* user, std::string& line);
};
diff --git a/src/commands/cmd_who.cpp b/src/commands/cmd_who.cpp
index 8afb3d6e7..5f4f08717 100644
--- a/src/commands/cmd_who.cpp
+++ b/src/commands/cmd_who.cpp
@@ -51,19 +51,16 @@ class CommandWho : public Command
};
-static const std::string star = "*";
-
-static const std::string& get_first_visible_channel(User *u)
+static Channel* get_first_visible_channel(User *u)
{
UCListIter i = u->chans.begin();
while (i != u->chans.end())
{
Channel* c = *i++;
if (!c->IsModeSet('s'))
- return c->name;
+ return c;
}
-
- return star;
+ return NULL;
}
bool CommandWho::whomatch(User* cuser, User* user, const char* matchtext)
@@ -162,8 +159,6 @@ bool CommandWho::whomatch(User* cuser, User* user, const char* matchtext)
}
}
-
-
bool CommandWho::CanView(Channel* chan, User* user)
{
if (!user || !chan)
@@ -186,9 +181,10 @@ bool CommandWho::CanView(Channel* chan, User* user)
void CommandWho::SendWhoLine(User* user, const std::vector<std::string>& parms, const std::string &initial, Channel* ch, User* u, std::vector<std::string> &whoresults)
{
- const std::string& lcn = get_first_visible_channel(u);
+ if (!ch)
+ ch = get_first_visible_channel(u);
- std::string wholine = initial + (ch ? ch->name : lcn) + " " + u->ident + " " +
+ std::string wholine = initial + (ch ? ch->name : "*") + " " + u->ident + " " +
(opt_showrealhost ? u->host : u->dhost) + " ";
if (!ServerInstance->Config->HideWhoisServer.empty() && !user->HasPrivPermission("servers/auspex"))
wholine.append(ServerInstance->Config->HideWhoisServer);
@@ -215,16 +211,10 @@ void CommandWho::SendWhoLine(User* user, const std::vector<std::string>& parms,
if (ch)
wholine.append(ch->GetPrefixChar(u));
- else
- {
- Channel* lch = ServerInstance->FindChan(lcn);
- if (lch)
- wholine.append(lch->GetPrefixChar(u));
- }
wholine.append(" :0 " + u->fullname);
- FOREACH_MOD(I_OnSendWhoLine, OnSendWhoLine(user, parms, u, ch, wholine));
+ FOREACH_MOD(I_OnSendWhoLine, OnSendWhoLine(user, parms, u, wholine));
if (!wholine.empty())
whoresults.push_back(wholine);
diff --git a/src/modules.cpp b/src/modules.cpp
index a111eaa92..f2ce6d372 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -171,7 +171,7 @@ void Module::OnNamesListItem(User*, Membership*, std::string&, std::string&) {
ModResult Module::OnNumeric(User*, unsigned int, const std::string&) { return MOD_RES_PASSTHRU; }
void Module::OnHookIO(StreamSocket*, ListenSocket*) { }
ModResult Module::OnAcceptConnection(int, ListenSocket*, irc::sockets::sockaddrs*, irc::sockets::sockaddrs*) { return MOD_RES_PASSTHRU; }
-void Module::OnSendWhoLine(User*, const std::vector<std::string>&, User*, Channel*, std::string&) { }
+void Module::OnSendWhoLine(User*, const std::vector<std::string>&, User*, std::string&) { }
ModuleManager::ModuleManager() : ModCount(0)
{
diff --git a/src/modules/m_auditorium.cpp b/src/modules/m_auditorium.cpp
index 4be1feb5c..2aebc88da 100644
--- a/src/modules/m_auditorium.cpp
+++ b/src/modules/m_auditorium.cpp
@@ -168,8 +168,9 @@ class ModuleAuditorium : public Module
}
}
- void OnSendWhoLine(User* source, const std::vector<std::string>&, User* user, Channel* channel, std::string& line)
+ void OnSendWhoLine(User* source, const std::vector<std::string>& params, User* user, std::string& line)
{
+ Channel* channel = ServerInstance->FindChan(params[0]);
if (!channel)
return;
Membership* memb = channel->GetUser(user);
diff --git a/src/modules/m_hideoper.cpp b/src/modules/m_hideoper.cpp
index 360dae014..7e919fcc6 100644
--- a/src/modules/m_hideoper.cpp
+++ b/src/modules/m_hideoper.cpp
@@ -88,7 +88,7 @@ class ModuleHideOper : public Module
return MOD_RES_PASSTHRU;
}
- void OnSendWhoLine(User* source, const std::vector<std::string>& params, User* user, Channel* channel, std::string& line)
+ void OnSendWhoLine(User* source, const std::vector<std::string>& params, User* user, std::string& line)
{
if (user->IsModeSet('H') && !source->HasPrivPermission("users/auspex"))
{
diff --git a/src/modules/m_invisible.cpp b/src/modules/m_invisible.cpp
index 56390bdb4..49114fa28 100644
--- a/src/modules/m_invisible.cpp
+++ b/src/modules/m_invisible.cpp
@@ -77,39 +77,16 @@ class InvisibleMode : public ModeHandler
}
};
-class InvisibleDeOper : public ModeWatcher
-{
- public:
- InvisibleDeOper(Module* parent) : ModeWatcher(parent, 'o', MODETYPE_USER)
- {
- }
-
- bool BeforeMode(User* source, User* dest, Channel* channel, std::string &param, bool adding, ModeType type)
- {
- /* Users who are opers and have +Q get their +Q removed when they deoper */
- if ((!adding) && (dest->IsModeSet('Q')))
- {
- std::vector<std::string> newmodes;
- newmodes.push_back(dest->nick);
- newmodes.push_back("-Q");
- ServerInstance->Modes->Process(newmodes, source);
- }
- return true;
- }
-};
-
-
class ModuleInvisible : public Module
{
private:
InvisibleMode qm;
- InvisibleDeOper ido;
bool hidejoin;
bool hidelist;
bool hidewho;
bool hidemsg;
public:
- ModuleInvisible() : qm(this), ido(this)
+ ModuleInvisible() : qm(this)
{
}
@@ -117,8 +94,6 @@ class ModuleInvisible : public Module
{
if (!ServerInstance->Modes->AddMode(&qm))
throw ModuleException("Could not add new modes!");
- if (!ServerInstance->Modes->AddModeWatcher(&ido))
- throw ModuleException("Could not add new mode watcher on usermode +o!");
/* 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");
@@ -129,14 +104,7 @@ class ModuleInvisible : public Module
};
ServerInstance->Modules->Attach(eventlist, this, 7);
OnRehash(NULL);
- };
-
- ~ModuleInvisible()
- {
- /* XXX is this the best place to do this? */
- if (!ServerInstance->Modes->DelModeWatcher(&ido))
- ServerInstance->Logs->Log("m_banredirect.so", DEBUG, "Failed to delete modewatcher!");
- };
+ }
void OnRehash(User*)
{
@@ -151,7 +119,7 @@ class ModuleInvisible : public Module
void OnBuildNeighborList(User* source, UserChanList &include, std::map<User*,bool> &exceptions);
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 OnSendWhoLine(User* source, const std::vector<std::string>&, User* user, Channel* channel, std::string& line);
+ void OnSendWhoLine(User* source, const std::vector<std::string>&, User* user, std::string& line);
void OnNamesListItem(User* issuer, Membership* memb, std::string &prefixes, std::string &nick);
};
@@ -208,9 +176,9 @@ ModResult ModuleInvisible::OnUserPreMessage(User* user,void* dest,int target_typ
return OnUserPreNotice(user, dest, target_type, text, status, exempt_list);
}
-void ModuleInvisible::OnSendWhoLine(User* source, const std::vector<std::string>& params, User* user, Channel* channel, std::string& line)
+void ModuleInvisible::OnSendWhoLine(User* source, const std::vector<std::string>& params, User* user, std::string& line)
{
- if ((channel ? hidelist : hidewho) && user->IsModeSet('Q') && !IS_OPER(source))
+ if (hidewho && user->IsModeSet('Q') && !IS_OPER(source))
line.clear();
}