]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_check.cpp
AMD64 warning 'fix' which tested fine when I added it seems to now...stop things...
[user/henk/code/inspircd.git] / src / modules / m_check.cpp
index 15db15de54788794187e22ae1570d721fa6bc0d1..564bfa399614439f378465758b905fff9409ac70 100644 (file)
@@ -19,6 +19,9 @@ using namespace std;
 #include "users.h"
 #include "channels.h"
 #include "modules.h"
+#include "message.h"
+#include "commands.h"
+#include "inspircd.h"
 
 /* $ModDesc: Provides the /check command to retrieve information on a user, channel, or IP address */
 
@@ -34,7 +37,64 @@ class cmd_check : public command_t
 
        void Handle (char **parameters, int pcnt, userrec *user)
        {
+               userrec *targuser;
+               chanrec *targchan;
+               std::string checkstr;
+               std::string chliststr;
 
+               checkstr = "304 " + std::string(user->nick) + " :CHECK";
+
+               targuser = Srv->FindNick(std::string(parameters[0]));
+               targchan = Srv->FindChannel(std::string(parameters[0]));
+
+               /*
+                * Syntax of a /check reply:
+                *  :server.name 304 target :CHECK START <target>
+                *  :server.name 304 target :CHECK <field> <value>
+                *  :server.name 304 target :CHECK END
+                */
+
+               Srv->SendTo(NULL, user, checkstr + " START " + std::string(parameters[0]));
+
+               if (targuser)
+               {
+                       /* /check on a user */
+                       Srv->SendTo(NULL, user, checkstr + " nuh " + std::string(targuser->GetFullHost()));
+                       Srv->SendTo(NULL, user, checkstr + " realnuh " + std::string(targuser->GetFullRealHost()));
+                       Srv->SendTo(NULL, user, checkstr + " realname " + std::string(targuser->fullname));
+                       Srv->SendTo(NULL, user, checkstr + " modes +" + std::string(targuser->modes));
+                       Srv->SendTo(NULL, user, checkstr + " server " + std::string(targuser->server));
+                       if (targuser->awaymsg[0] != 0)
+                       {
+                               /* user is away */
+                               Srv->SendTo(NULL, user, checkstr + " awaymsg " + std::string(targuser->awaymsg));
+                       }
+                       if (targuser->oper[0] != 0)
+                       {
+                               /* user is an oper of type ____ */
+                               Srv->SendTo(NULL, user, checkstr + " opertype " + std::string(targuser->oper));
+                       }
+                       if (IS_LOCAL(targuser))
+                       {
+                               /* port information is only held for a local user! */
+                               Srv->SendTo(NULL, user, checkstr + " onport " + ConvToStr(targuser->port));
+                       }
+
+                       chliststr = chlist(targuser, targuser);
+                       std::stringstream dump(chliststr);
+                       /* XXX - This doent suck so much */
+                       Srv->DumpText(user,checkstr + " onchans ", dump);
+               }
+               else if (targchan)
+               {
+                       /* /check on a channel */
+               }
+               else
+               {
+                       /*  /check on an IP address, or something that doesn't exist */
+               }
+
+               Srv->SendTo(NULL, user, checkstr + " END " + std::string(parameters[0]));
        }
 };