* ---------------------------------------------------
*/
-using namespace std;
-
-/*
- * DEVOICE module for InspIRCd
- * Syntax: /DEVOICE <#chan>
- */
-
/* $ModDesc: Provides an extended version of /WHO for opers */
-#include "inspircd_config.h"
-#include "inspircd.h"
-#include "inspircd_io.h"
-#include <time.h>
#include <string>
-#ifdef GCC3
-#include <ext/hash_map>
-#else
-#include <hash_map>
-#endif
-#include <map>
-#include <sstream>
#include <vector>
-#include <deque>
+#include "inspircd_config.h"
#include "users.h"
-#include "globals.h"
#include "modules.h"
#include "helperfuncs.h"
-#include "hashcomp.h"
-#include "typedefs.h"
+#include "message.h"
-extern ServerConfig* Config;
-extern InspIRCd* ServerInstance;
extern user_hash clientlist;
-extern chan_hash chanlist;
extern std::vector<userrec*> all_opers;
-extern std::vector<userrec*> local_users;
class ModuleOperWho : public Module
{
List[I_OnPreCommand] = 1;
}
- virtual int OnPreCommand(std::string command, char **parameters, int pcnt, userrec *user, bool validated)
+ virtual int OnPreCommand(const std::string &command, const char** parameters, int pcnt, userrec *user, bool validated)
{
- if (!*user->oper)
+ if ((!*user->oper) || (command != "WHO"))
return 0;
chanrec* Ptr = NULL;
for (user_hash::const_iterator i = clientlist.begin(); i != clientlist.end(); i++)
{
*tmp = 0;
- Ptr = i->second->chans[0].channel;
+ Ptr = ((ucrec*)*(i->second->chans.begin()))->channel;
if (*i->second->awaymsg) {
strlcat(tmp, "G", 9);
} else {
{
if ((!strcmp(parameters[0],"0")) || (!strcmp(parameters[0],"*")))
{
- if ((user->chans.size()) && (user->chans[0].channel))
+ if ((user->chans.size()) && (((ucrec*)*(user->chans.begin()))->channel))
{
- int n_list = 0;
for (user_hash::const_iterator i = clientlist.begin(); i != clientlist.end(); i++)
{
- Ptr = i->second->chans[0].channel;
+ Ptr = ((ucrec*)*(i->second->chans.begin()))->channel;
// suggested by phidjit and FCS
if ((!common_channels(user,i->second)) && (isnick(i->second->nick)))
{
Ptr = FindChan(parameters[0]);
if (Ptr)
{
- int n_list = 0;
for (user_hash::const_iterator i = clientlist.begin(); i != clientlist.end(); i++)
{
- if ((has_channel(i->second,Ptr)) && (isnick(i->second->nick)))
+ if ((Ptr->HasUser(i->second)) && (isnick(i->second->nick)))
{
// Fix Bug #29 - Part 2..
*tmp = 0;
{
WriteServ(user->fd,"401 %s %s :No such nick/channel",user->nick, parameters[0]);
}
+ return 1;
}
else
{
strlcat(tmp, "H" ,9);
}
if (*u->oper) { strlcat(tmp, "*" ,9); }
- WriteServ(user->fd,"352 %s %s %s %s %s %s %s :0 %s",user->nick, u->chans.size() && u->chans[0].channel ? u->chans[0].channel->name
- : "*", u->ident, u->dhost, u->server, u->nick, tmp, u->fullname);
+ WriteServ(user->fd,"352 %s %s %s %s %s %s %s :0 %s",user->nick, u->chans.size() && ((ucrec*)*(u->chans.begin()))->channel ? ((ucrec*)*(u->chans.begin()))->channel->name
+ : "*", u->ident, u->dhost, u->server, u->nick, tmp, u->fullname);
}
WriteServ(user->fd,"315 %s %s :End of /WHO list.",user->nick, parameters[0]);
+ return 1;
}
}
if (pcnt == 2)
{
- if ((!strcmp(parameters[0],"0")) || (!strcmp(parameters[0],"*")) && (!strcmp(parameters[1],"o")))
- {
+ if ((!strcmp(parameters[0],"0")) || (!strcmp(parameters[0],"*")) && (!strcmp(parameters[1],"o")))
+ {
for (std::vector<userrec*>::iterator i = all_opers.begin(); i != all_opers.end(); i++)
- {
+ {
// If i were a rich man.. I wouldn't need to me making these bugfixes..
// But i'm a poor bastard with nothing better to do.
userrec* oper = *i;
} else {
strlcat(tmp, "H" ,9);
}
- WriteServ(user->fd,"352 %s %s %s %s %s %s %s* :0 %s", user->nick, oper->chans.size() && oper->chans[0].channel ? oper->chans[0].channel->name
- : "*", oper->ident, oper->host, oper->server, oper->nick, tmp, oper->fullname);
- }
- WriteServ(user->fd,"315 %s %s :End of /WHO list.",user->nick, parameters[0]);
- return 1;
- }
+ WriteServ(user->fd,"352 %s %s %s %s %s %s %s* :0 %s", user->nick, oper->chans.size() && ((ucrec*)*(oper->chans.begin()))->channel ?
+ ((ucrec*)*(oper->chans.begin()))->channel->name : "*", oper->ident, oper->host, oper->server, oper->nick, tmp, oper->fullname);
+ }
+ WriteServ(user->fd,"315 %s %s :End of /WHO list.",user->nick, parameters[0]);
+ return 1;
+ }
}
+ return 0;
}
virtual ~ModuleOperWho()