root/trunk/src/game/IRCCmd.cpp @ 42

Revision 39, 27.0 kB (checked in by yumileroy, 17 years ago)

[svn] * Various small changes here and there.
* Implementing MangChat? IRC system.
* Added new config option, MAX_WHO, can be used to set the limit of characters being sent in a /who request from client.

Original author: XTZGZoReX
Date: 2008-10-12 14:03:38-05:00

Line 
1/*
2 * MangChat By |Death| And Cybrax
3 *
4 * This Program Is Free Software; You Can Redistribute It And/Or Modify It Under The Terms
5 * Of The GNU General Public License
6 * Written and Developed by Cybrax. cybraxvd@gmail.com
7 * |Death| <death@hell360.net>, Lice <lice@yeuxverts.net>, Dj_baby & Sanaell, Tase
8 * With Help And Support From The MaNGOS Project Community.
9 * PLEASE RETAIN THE COPYRIGHT OF THE AUTHORS.
10 */
11#include "IRCCmd.h"
12#include "IRCClient.h"
13#include "Database/DatabaseEnv.h"
14#include "ObjectMgr.h"
15#include "MapManager.h"
16// Constructor
17IRCCmd::IRCCmd(){}
18// Destructor
19IRCCmd::~IRCCmd(){}
20
21std::string IRCCmd::MakeUpper(std::string Channel)
22{
23    std::string tmpchan = Channel;
24    std::transform(tmpchan.begin(), tmpchan.end(), tmpchan.begin(), towupper);
25    return tmpchan;
26}
27bool IRCCmd::ParamsValid(_CDATA *CD, int pCnt)
28{
29    CD->PCOUNT = pCnt;
30    if(CD->PARAMS.size() == 0)
31        return false;
32    return ValidParams(CD->PARAMS, pCnt);
33}
34
35int IRCCmd::ParamsValid(_CDATA *CD, int pCnt, int rLev)
36{
37    //CD->PCOUNT = pCnt;
38    if(!CanUse(CD->USER, rLev))
39        return E_AUTH;
40    else if(pCnt == 0)
41        return E_OK;
42    else if(CD->PARAMS.size() == 0)
43        return E_SIZE;
44    else if(!ValidParams(CD->PARAMS, pCnt))
45        return E_SIZE;
46    return E_OK;
47}
48
49// This function checks if chat from irc is a command or not
50// return true on yes and false on no
51bool IRCCmd::IsValid(std::string USER, std::string FROM, std::string CHAT, std::string TYPE)
52{
53    // If the first line of our chat is the command prefix we have a command
54    if(CHAT.substr(0, 1) == sIRC._cmd_prefx && CHAT.size() > 1 )
55    {
56        _CDATA CDATA;
57        bool cValid    = false;
58        bool AuthValid = true;
59        bool dontlog   = true;
60        std::string* _PARAMS = getArray(CHAT, 2);
61        CDATA.USER      = USER;
62        CDATA.FROM      = FROM;
63        CDATA.TYPE      = TYPE;
64        CDATA.PCOUNT    = 0;
65        CDATA.CMD       = MakeUpper(_PARAMS[0].substr(1, _PARAMS[0].size() - 1));
66        CDATA.PARAMS    = _PARAMS[1];   
67        if(CDATA.CMD == "LOGIN")
68        {
69            if(FROM == sIRC._Nick)
70            {             
71                if(ParamsValid(&CDATA, 2)) 
72                    Handle_Login(&CDATA);
73                else
74                    sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"login <Player> <Password> )", true, "ERROR");
75            }
76            else
77                sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Please Send A PM To Login!", true, "ERROR");
78            if(GetLevel(USER) >= sIRC.gmlog)
79                dontlog = false;
80            cValid = true;
81        }
82        else if(CDATA.CMD == "LOGOUT")
83        {
84            if(FROM == sIRC._Nick)
85            {
86                Handle_Logout(&CDATA);
87            }
88            else
89                sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Please Send A PM To Logout!", true, "ERROR");
90            cValid = true;
91        }
92        else if(CDATA.CMD == "ACCT")
93        {
94            switch(ParamsValid(&CDATA, 2, sIRC.CACCT))
95            {
96                case E_OK:
97                    Account_Player(&CDATA);
98                    break;
99                case E_SIZE:
100                    sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"acct <Player> <(un)lock/mail/pass/rename> )", true, "ERROR");
101                    break;
102                case E_AUTH:
103                    AuthValid = false;
104                    break;
105            }
106            cValid = true;
107        }
108        else if(CDATA.CMD == "BAN")
109        {
110            switch(ParamsValid(&CDATA, 2, sIRC.CBAN))
111            {
112                case E_OK:
113                    Ban_Player(&CDATA);
114                    break;
115                case E_SIZE:
116                    sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"ban <Player> <acct/ip> )", true, "ERROR");
117                    break;
118                case E_AUTH:
119                    AuthValid = false;
120                    break;
121            }
122            cValid = true;
123        }
124        else if(CDATA.CMD == "CHAN")
125        {
126            switch(ParamsValid(&CDATA, 1, sIRC.CCHAN))
127            {
128                case E_OK:
129                    Chan_Control(&CDATA);
130                    break;
131                case E_SIZE:
132                    sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"chan <op> <IRC User> )", true, "ERROR");
133                    break;
134                case E_AUTH:
135                    AuthValid = false;
136                    break;
137            }
138            cValid = true;
139        }
140        else if(CDATA.CMD == "CHAR")
141        {
142            switch(ParamsValid(&CDATA, 2, sIRC.CCHAR))
143            {
144                case E_OK:
145                    Char_Player(&CDATA);
146                    break;
147                case E_SIZE:
148                    sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"char <Player> <mailcheat/taxicheat/maxskill/setskill> )", true, "ERROR");
149                    break;
150                case E_AUTH:
151                    AuthValid = false;
152                    break;
153            }
154            cValid = true;
155        }
156        else if(CDATA.CMD == "FUN")
157        {
158            switch(ParamsValid(&CDATA, 2, sIRC.CFUN))
159            {
160                case E_OK:
161                    Fun_Player(&CDATA);
162                    break;
163                case E_SIZE:
164                    sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"fun <Player> <Sound/Say> )", true, "ERROR");
165                    break;
166                case E_AUTH:
167                    AuthValid = false;
168                    break;
169            }
170            cValid = true;
171        }
172        else if(CDATA.CMD == "HELP")
173        {
174            switch(ParamsValid(&CDATA, 0, sIRC.CHELP))
175            {
176                case E_OK:
177                    Help_IRC(&CDATA);
178                    break;
179                case E_SIZE:
180                    sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"help <Command> )", true, "ERROR");
181                    break;
182                case E_AUTH:
183                    AuthValid = false;
184                    break;
185            }
186            cValid = true;
187        }
188        else if(CDATA.CMD == "INCHAN")
189        {
190            switch(ParamsValid(&CDATA, 1, sIRC.CINCHAN))
191            {
192                case E_OK:
193                    Inchan_Server(&CDATA);
194                    break;
195                case E_SIZE:
196                    sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"inchan <Channel> )", true, "ERROR");
197                    break;
198                case E_AUTH:
199                    AuthValid = false;
200                    break;
201            }
202            cValid = true;
203        }
204        else if(CDATA.CMD == "INFO")
205        {
206            switch(ParamsValid(&CDATA, 0, sIRC.CINFO))
207            {
208                case E_OK:
209                    Info_Server(&CDATA);
210                    break;
211                case E_SIZE:
212                    sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"info )", true, "ERROR");
213                    break;
214                case E_AUTH:
215                    AuthValid = false;
216                    break;
217            }
218            cValid = true;
219        }
220        else if(CDATA.CMD == "ITEM")
221        {
222            CDATA.PCOUNT = 3;
223            switch(ParamsValid(&CDATA, 2, sIRC.CITEM))
224            {
225                case E_OK:
226                    Item_Player(&CDATA);
227                    break;
228                case E_SIZE:
229                    sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"item <Player> <add> <ItemID/[ItemName]> <Amount> )", true, "ERROR");
230                    break;
231                case E_AUTH:
232                    AuthValid = false;
233                    break;
234            }
235            cValid = true;
236        }
237        else if(CDATA.CMD == "JAIL")
238        {
239            CDATA.PCOUNT = 3;
240            switch(ParamsValid(&CDATA, 1, sIRC.CJAIL))
241            {
242                case E_OK:
243                    Jail_Player(&CDATA);
244                    break;
245                case E_SIZE:
246                    sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"jail <Player> <release/Reason>)", true, "ERROR");
247                    break;
248                case E_AUTH:
249                    AuthValid = false;
250                    break;
251            }
252            cValid = true;
253        }
254        else if(CDATA.CMD == "KICK")
255        {
256            CDATA.PCOUNT = 2;
257            switch(ParamsValid(&CDATA, 1, sIRC.CKICK))
258            {
259                case E_OK:
260                    Kick_Player(&CDATA);
261                    break;
262                case E_SIZE:
263                    sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"kick <Player> <Reason> )", true, "ERROR");
264                    break;
265                case E_AUTH:
266                    AuthValid = false;
267                    break;
268            }
269            cValid = true;
270        }
271        else if(CDATA.CMD == "KILL")
272        {
273            CDATA.PCOUNT = 2;
274            switch(ParamsValid(&CDATA, 1, sIRC._KILL))
275            {
276                case E_OK:
277                    Kill_Player(&CDATA);
278                    break;
279                case E_SIZE:
280                    sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"kill <Player> <Reason> )", true, "ERROR");
281                    break;
282                case E_AUTH:
283                    AuthValid = false;
284                    break;
285            }
286            cValid = true;
287        }
288        else if(CDATA.CMD == "LEVEL")
289        {
290            CDATA.PCOUNT = 2;
291            switch(ParamsValid(&CDATA, 2, sIRC.CLEVEL))
292            {
293                case E_OK:
294                    Level_Player(&CDATA);
295                    break;
296                case E_SIZE:
297                    sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"level <Player> <NewLevel> )", true, "ERROR");
298                    break;
299                case E_AUTH:
300                    AuthValid = false;
301                    break;
302            }
303            cValid = true;
304        }
305        else if(CDATA.CMD == "LOOKUP")
306        {
307            CDATA.PCOUNT = 2;
308            switch(ParamsValid(&CDATA, 2, sIRC.CLOOKUP))
309            {
310                case E_OK:
311                    Lookup_Player(&CDATA);
312                    break;
313                case E_SIZE:
314                    sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"lookup <acct/char/creature/faction/go/item/quest/skill/spell/tele> <ID/Name> )", true, "ERROR");
315                    break;
316                case E_AUTH:
317                    AuthValid = false;
318                    break;
319            }
320            cValid = true;
321        }
322        else if(CDATA.CMD == "MONEY")
323        {
324            CDATA.PCOUNT = 2;
325            switch(ParamsValid(&CDATA, 2, sIRC.CMONEY))
326            {
327                case E_OK:
328                    Money_Player(&CDATA);
329                    break;
330                case E_SIZE:
331                    sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"money <Player> <(-)Money> )", true, "ERROR");
332                    break;
333                case E_AUTH:
334                    AuthValid = false;
335                    break;
336            }
337            cValid = true;
338        }
339        else if(CDATA.CMD == "MUTE")
340        {
341            switch(ParamsValid(&CDATA, 2, sIRC.CMUTE))
342            {
343                case E_OK:
344                    Mute_Player(&CDATA);
345                    break;
346                case E_SIZE:
347                    sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"mute <Player> <release/TimeInMins> <Reason> )", true, "ERROR");
348                    break;
349                case E_AUTH:
350                    AuthValid = false;
351                    break;
352            }
353            cValid = true;
354        }
355        else if(CDATA.CMD == "ONLINE")
356        {
357            switch(ParamsValid(&CDATA, 0, sIRC.CONLINE))
358            {
359                case E_OK:
360                    Online_Players(&CDATA);
361                    break;
362                case E_SIZE:
363                    sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"online )", true, "ERROR");
364                    break;
365                case E_AUTH:
366                    AuthValid = false;
367                    break;
368            }
369            cValid = true;
370        }
371        else if(CDATA.CMD == "PM")
372        {
373            switch(ParamsValid(&CDATA, 2, sIRC.CPM))
374            {
375                case E_OK:
376                    PM_Player(&CDATA);
377                    break;
378                case E_SIZE:
379                    sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"pm <Player> <Message> )", true, "ERROR");
380                    break;
381                case E_AUTH:
382                    AuthValid = false;
383                    break;
384            }
385            cValid = true;
386        }
387        else if(CDATA.CMD == "RELOAD")
388        {
389            switch(ParamsValid(&CDATA, 0, sIRC.CRESTART))
390            {
391                case E_OK:
392                    sIRC.Send_IRC_Channels("Reloading MangChat Config Options. (Command Disabled)");
393                    //sIRC.LoadConfig();
394                    break;
395                case E_AUTH:
396                    AuthValid = false;
397                    break;
398            }
399            cValid = true;
400        }
401        else if(CDATA.CMD == "RESTART")
402        {
403            switch(ParamsValid(&CDATA, 0, sIRC.CRESTART))
404            {
405                case E_OK:
406                    sIRC.Send_IRC_Channels(sIRC.RstMsg);
407                    sIRC.ResetIRC();
408                    break;
409                case E_AUTH:
410                    AuthValid = false;
411                    break;
412            }
413            cValid = true;
414        }
415        else if(CDATA.CMD == "REVIVE")
416        {
417            CDATA.PCOUNT = 2;
418            switch(ParamsValid(&CDATA, 1, sIRC.CREVIVE))
419            {
420                case E_OK:
421                    Revive_Player(&CDATA);
422                    break;
423                case E_SIZE:
424                    sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"revive <Player> )", true, "ERROR");
425                    break;
426                case E_AUTH:
427                    AuthValid = false;
428                    break;
429            }
430            cValid = true;
431        }
432        else if(CDATA.CMD == "SAVEALL")
433        {
434            switch(ParamsValid(&CDATA, 0, sIRC.CSAVEALL))
435            {
436                case E_OK:
437                    Saveall_Player(&CDATA);
438                    break;
439                case E_AUTH:
440                    AuthValid = false;
441                    break;
442            }
443            cValid = true;
444        }
445        else if(CDATA.CMD == "SHUTDOWN")
446        {
447            switch(ParamsValid(&CDATA, 1, sIRC.CSHUTDOWN))
448            {
449                case E_OK:
450                    Shutdown_Mangos(&CDATA);
451                    break;
452                case E_SIZE:
453                    sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"shutdown <TimeInSeconds> )", true, "ERROR");
454                    break;
455                case E_AUTH:
456                    AuthValid = false;
457                    break;
458            }
459            cValid = true;
460        }
461        else if(CDATA.CMD == "SPELL")
462        {
463            switch(ParamsValid(&CDATA, 2, sIRC.CSPELL))
464            {
465                case E_OK:
466                    Spell_Player(&CDATA);
467                    break;
468                case E_SIZE:
469                    sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"spell <Player> <Cast/Learn/UnLearn> <SpellID> )", true, "ERROR");
470                    break;
471                case E_AUTH:
472                    AuthValid = false;
473                    break;
474            }
475            cValid = true;
476        }
477        else if(CDATA.CMD == "SYSMSG")
478        {
479            CDATA.PCOUNT = 2;
480            switch(ParamsValid(&CDATA, 2, sIRC.CSYSMSG))
481            {
482                case E_OK:
483                    Sysmsg_Server(&CDATA);
484                    break;
485                case E_SIZE:
486                    sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"sysmsg <a/e/n/add/del/list> <Message> )", true, "ERROR");
487                    break;
488                case E_AUTH:
489                    AuthValid = false;
490                    break;
491            }
492            cValid = true;
493        }
494        else if(CDATA.CMD == "TELE")
495        {
496            switch(ParamsValid(&CDATA, 2, sIRC.CTELE))
497            {
498                case E_OK:
499                    Tele_Player(&CDATA);
500                    break;
501                case E_SIZE:
502                    sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"tele <Player> <l/c/r/to> <Loc.Name/MAPID X Y Z/Recall/Player> )", true, "ERROR");
503                    break;
504                case E_AUTH:
505                    AuthValid = false;
506                    break;
507            }
508            cValid = true;
509        }
510        else if(CDATA.CMD == "TOP")
511        {
512            CDATA.PCOUNT = 1;
513            switch(ParamsValid(&CDATA, 1, sIRC.CTOP))
514            {
515                case E_OK:
516                    Top_Player(&CDATA);
517                    break;
518                case E_SIZE:
519                    sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"top <accttime/chartime/money> <limit> )", true, "ERROR");
520                    break;
521                case E_AUTH:
522                    AuthValid = false;
523                    break;
524            }
525            cValid = true;
526        }
527        else if(CDATA.CMD == "WHO")
528        {
529            switch(ParamsValid(&CDATA, 0, sIRC.CWHO))
530            {
531                case E_OK:
532                    Who_Logged(&CDATA);
533                    break;
534                case E_AUTH:
535                    AuthValid = false;
536                    break;
537            }
538            cValid = true;
539        }
540        if(!AuthValid && IsLoggedIn(USER))
541            sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Access Denied! Your Security Level Is Too Low To Use This Command!", true, "ERROR");
542        if(cValid == false && (sIRC.BOTMASK & 4) != 0)
543            sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Unknown Command!", true, "ERROR");
544        if(cValid && dontlog)
545        {
546            sIRC.iLog.WriteLog(" %s : [ %s(%d) ] Used Command: [ %s ] With Parameters: [ %s ]", sIRC.iLog.GetLogDateTimeStr().c_str(), CDATA.USER.c_str(), GetLevel(USER), CDATA.CMD.c_str(), CDATA.PARAMS.c_str());
547        }
548        return cValid;
549    }
550    return false;
551}
552
553bool IRCCmd::CanUse(std::string USER, int nLevel)
554{
555    if(IsLoggedIn(USER))
556    {
557        if(GetLevel(USER) >= nLevel)
558            return true;
559        else
560            return false;
561    }
562    else if(nLevel == 0)
563    {
564        return true;
565    }
566    else
567        sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : You Are Not Logged In!", true, "ERROR");
568    return false;
569}
570
571std::string IRCCmd::ChanOrPM(_CDATA *CD)
572{
573    if(CD->FROM == sIRC._Nick)
574        return CD->USER;
575    else
576        return CD->FROM;
577}
578
579Player *IRCCmd::GetPlayer(std::string WHO)
580{
581    normalizePlayerName(WHO);
582    return ObjectAccessor::Instance().FindPlayerByName(WHO.c_str());
583}
584
585_client *IRCCmd::GetClient(std::string cname)
586{
587    for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
588    {
589        if((*i)->Name == cname)
590            return (*i);
591    }
592    return (NULL);
593}
594
595bool IRCCmd::IsLoggedIn(std::string USER)
596{
597    for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
598    {
599        if((*i)->Name == USER)
600            return true;
601    }
602    return false;
603}
604
605bool IRCCmd::AcctIsLoggedIn(std::string USER)
606{
607    for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
608    {
609        if(MakeUpper((*i)->UName) == MakeUpper(USER))
610            return true;
611    }
612    return false;
613}
614
615std::string IRCCmd::AcctIsBanned(std::string ACCT)
616{
617    uint32 acctid = objmgr.GetAccountByAccountName(ACCT);
618    std::string banned = "NOTBANNED";
619    QueryResult *result = loginDatabase.PQuery("SELECT banreason FROM ip_banned WHERE ip=(SELECT last_ip FROM account WHERE id = '%i')", acctid);
620    if(result)
621    {
622        banned = (*result)[0].GetCppString();
623        delete result; 
624        return "IP Banned. Reason:" + banned;   
625    }
626    QueryResult *result2 = loginDatabase.PQuery("SELECT banreason FROM account_banned WHERE id='%i'", acctid); 
627    if(result2)
628    {
629        banned = (*result2)[0].GetCppString();
630        delete result2; 
631        return "Account Banned. Reason:" + banned;
632    }
633    return banned;
634}
635
636int IRCCmd::GetLevel(std::string sName)
637{
638    for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
639    {
640        if((*i)->Name == sName)
641            return (*i)->GMLevel;
642    }
643    return 0;
644}
645
646int IRCCmd::AcctLevel(std::string plnme)
647{
648    uint64 guid = objmgr.GetPlayerGUIDByName(plnme);
649    uint32 account_id = 0;
650    uint32 security = 0;
651    account_id = objmgr.GetPlayerAccountIdByGUID(guid);
652    security = objmgr.GetSecurityByAccount(account_id);
653    return security;
654}
655
656std::string IRCCmd::GetAccName(std::string sName)
657{
658    for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
659    {
660        if((*i)->Name == sName)
661            return (*i)->UName;
662    }
663    return "";
664}
665
666std::string IRCCmd::GetNameFromAcct(std::string sName)
667{
668    for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
669    {
670        if((*i)->UName == sName)
671            return (*i)->Name;
672    }
673    return "";
674}
675
676int IRCCmd::GetAcctIDFromName(std::string sName)
677{
678    for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
679    {
680        if((*i)->Name == sName)
681        {
682            uint32 acct_id = 0;
683            acct_id = objmgr.GetAccountByAccountName((*i)->UName.c_str());
684            return acct_id;
685        }
686    }
687    return 0;
688}
689
690std::string IRCCmd::GetAcctNameFromID(uint32 acctid)
691{
692    QueryResult *result = loginDatabase.PQuery("SELECT username FROM account WHERE id = '%d'", acctid);
693    if(result)
694    {
695        std::string name = (*result)[0].GetCppString();
696        delete result;
697        return name;
698    }
699
700    return "";
701}
702
703std::string IRCCmd::GetIPFromPlayer(std::string player)
704{
705    QueryResult *result = CharacterDatabase.PQuery("SELECT account FROM characters WHERE name = '%s'", player.c_str());
706    if(result)
707    {
708        std::string acctid = (*result)[0].GetCppString();
709        delete result;
710        QueryResult *result2 = loginDatabase.PQuery("SELECT last_ip FROM account WHERE id = '%s'", acctid.c_str());
711        if(result2)
712        {
713            std::string ip = (*result2)[0].GetCppString();
714            delete result2;
715            return ip;
716        }       
717    }
718
719    return "";
720}
721
722std::string IRCCmd::SecToDay(std::string secons)
723{
724    unsigned int seconds = atoi(secons.c_str());
725    unsigned int days = seconds / 86400;
726    unsigned int hours = seconds / 3600 % 24;
727    unsigned int mins = seconds / 60 % 60;
728    char tottime[1000];
729    sprintf(tottime, "%iDays:%iHours:%iMinutes", days, hours, mins);
730
731    return tottime;
732}
733
734bool IRCCmd::ValidParams(std::string PARAMS, int nCount)
735{
736    if(nCount == 1 && PARAMS.size() == 0)
737        return false;
738    int pcount = 0;
739    size_t p = -1;
740    for(int i = 0;i < nCount;i++)
741    {
742        p = PARAMS.find(" ", p + 1);
743        if(p == -1)
744            break;
745        else
746            pcount++;
747    }
748    nCount--;
749    if(pcount >= nCount)
750        return true;
751    else
752        return false;
753}
754
755std::string* IRCCmd::getArray(std::string PARAMS, int nCount)
756{
757    std::string *array = new std::string[nCount];
758    if(PARAMS.size() > 0)
759    {
760        int pcnt = 0;
761        size_t ps = 0;
762        size_t pc = -1;
763        for(int i = 0;i < nCount;i++)
764        {
765            pc = PARAMS.find(" ", pc + 1);
766            if(i + 1 == nCount && nCount != 1)
767            {
768                if(ps > 0 && pc > 0)
769                    array[i] = PARAMS.substr(ps, PARAMS.size() - ps);
770            }
771            else
772                array[i] = PARAMS.substr(ps, pc - ps);
773            ps = pc + 1;
774        }
775    }
776    return array;
777}
778
779std::string IRCCmd::MakeMsg(const char *sLine, ... )
780{
781    va_list ap;
782    char tmpoutp[1024];
783    va_start(ap, sLine);
784    vsnprintf(tmpoutp, 1024, sLine, ap );
785    va_end(ap);
786    std::string outp = tmpoutp;
787    return outp;
788}
789
790void IRCClient::AHFunc(uint64 itmid, std::string itmnme, std::string plname, uint32 faction)
791{
792    IRCCmd Command;
793    Player* plr = Command.GetPlayer(plname);
794    if(plr)
795    {
796        std::string itemname = itmnme;
797
798        char  temp [7];
799        sprintf(temp, "%u", itmid);
800        std::string itemid = temp;
801
802        std::string wowname = "";
803        std::string ircname = "";
804        switch (plr->GetTeam())
805        {
806            case 67:wowname="|cffff0000"+plname+"|r";ircname="\0034"+plname;break;      //horde
807            case 469:wowname="|cff1589FF"+plname+"|r";ircname="\00312"+plname;break;    //alliance
808        }
809       
810        std::string wowfact = "|cffFF8040[Auction House]:|r";
811        std::string ircfact = "\00304,08\037/!\\\037\017\00307 Auction House \00304,08\037/!\\\037\017";
812        switch(faction)
813        {
814            //neutral
815            case 7:wowfact="|cffff8040[Neutral Auction House]:|r";ircfact="\00304,08\037/!\\\037\017\00307 Neutral Auction House \00304,08\037/!\\\037\017";break;
816            //horde
817            case 6:wowfact="|cffff0000[Horde Auction House]:|r";ircfact="\00304,08\037/!\\\037\017\00304 Horde Auction House \00304,08\037/!\\\037\017";break;
818            //alliance
819            case 2:wowfact="|cff1589FF[Alliance Auction House]:|r";ircfact="\00304,08\037/!\\\037\017\00312 Alliance Auction House \00304,08\037/!\\\037\017";break;   
820        }
821        std::string wowstr = Command.MakeMsg("%s A New Item Has Been Added |cffffffff|Hitem:%s:0:0:0:0:0:0:0|h[%s]|h|r. By: %s",wowfact.c_str(), itemid.c_str(), itemname.c_str(), wowname.c_str());
822        std::string ircstr = Command.MakeMsg("%s A New Item Has Been Added [%s]. By: %s", ircfact.c_str(), itemname.c_str(), ircname.c_str());
823       
824        sIRC.Send_WoW_Channel(sIRC._wow_chan[sIRC.Status].c_str(), wowstr.c_str());
825        sIRC.Send_IRC_Channel(sIRC._irc_chan[sIRC.Status].c_str(), ircstr.c_str());
826    }
827}
Note: See TracBrowser for help on using the browser.