Files
Viano-Core/src/game/IRCCmd.cpp
T
XTZGZoReX 054725122f [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.

--HG--
branch : trunk
2008-10-12 14:03:38 -05:00

828 lines
27 KiB
C++

/*
* MangChat By |Death| And Cybrax
*
* This Program Is Free Software; You Can Redistribute It And/Or Modify It Under The Terms
* Of The GNU General Public License
* Written and Developed by Cybrax. cybraxvd@gmail.com
* |Death| <death@hell360.net>, Lice <lice@yeuxverts.net>, Dj_baby & Sanaell, Tase
* With Help And Support From The MaNGOS Project Community.
* PLEASE RETAIN THE COPYRIGHT OF THE AUTHORS.
*/
#include "IRCCmd.h"
#include "IRCClient.h"
#include "Database/DatabaseEnv.h"
#include "ObjectMgr.h"
#include "MapManager.h"
// Constructor
IRCCmd::IRCCmd(){}
// Destructor
IRCCmd::~IRCCmd(){}
std::string IRCCmd::MakeUpper(std::string Channel)
{
std::string tmpchan = Channel;
std::transform(tmpchan.begin(), tmpchan.end(), tmpchan.begin(), towupper);
return tmpchan;
}
bool IRCCmd::ParamsValid(_CDATA *CD, int pCnt)
{
CD->PCOUNT = pCnt;
if(CD->PARAMS.size() == 0)
return false;
return ValidParams(CD->PARAMS, pCnt);
}
int IRCCmd::ParamsValid(_CDATA *CD, int pCnt, int rLev)
{
//CD->PCOUNT = pCnt;
if(!CanUse(CD->USER, rLev))
return E_AUTH;
else if(pCnt == 0)
return E_OK;
else if(CD->PARAMS.size() == 0)
return E_SIZE;
else if(!ValidParams(CD->PARAMS, pCnt))
return E_SIZE;
return E_OK;
}
// This function checks if chat from irc is a command or not
// return true on yes and false on no
bool IRCCmd::IsValid(std::string USER, std::string FROM, std::string CHAT, std::string TYPE)
{
// If the first line of our chat is the command prefix we have a command
if(CHAT.substr(0, 1) == sIRC._cmd_prefx && CHAT.size() > 1 )
{
_CDATA CDATA;
bool cValid = false;
bool AuthValid = true;
bool dontlog = true;
std::string* _PARAMS = getArray(CHAT, 2);
CDATA.USER = USER;
CDATA.FROM = FROM;
CDATA.TYPE = TYPE;
CDATA.PCOUNT = 0;
CDATA.CMD = MakeUpper(_PARAMS[0].substr(1, _PARAMS[0].size() - 1));
CDATA.PARAMS = _PARAMS[1];
if(CDATA.CMD == "LOGIN")
{
if(FROM == sIRC._Nick)
{
if(ParamsValid(&CDATA, 2))
Handle_Login(&CDATA);
else
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"login <Player> <Password> )", true, "ERROR");
}
else
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Please Send A PM To Login!", true, "ERROR");
if(GetLevel(USER) >= sIRC.gmlog)
dontlog = false;
cValid = true;
}
else if(CDATA.CMD == "LOGOUT")
{
if(FROM == sIRC._Nick)
{
Handle_Logout(&CDATA);
}
else
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Please Send A PM To Logout!", true, "ERROR");
cValid = true;
}
else if(CDATA.CMD == "ACCT")
{
switch(ParamsValid(&CDATA, 2, sIRC.CACCT))
{
case E_OK:
Account_Player(&CDATA);
break;
case E_SIZE:
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"acct <Player> <(un)lock/mail/pass/rename> )", true, "ERROR");
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "BAN")
{
switch(ParamsValid(&CDATA, 2, sIRC.CBAN))
{
case E_OK:
Ban_Player(&CDATA);
break;
case E_SIZE:
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"ban <Player> <acct/ip> )", true, "ERROR");
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "CHAN")
{
switch(ParamsValid(&CDATA, 1, sIRC.CCHAN))
{
case E_OK:
Chan_Control(&CDATA);
break;
case E_SIZE:
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"chan <op> <IRC User> )", true, "ERROR");
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "CHAR")
{
switch(ParamsValid(&CDATA, 2, sIRC.CCHAR))
{
case E_OK:
Char_Player(&CDATA);
break;
case E_SIZE:
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"char <Player> <mailcheat/taxicheat/maxskill/setskill> )", true, "ERROR");
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "FUN")
{
switch(ParamsValid(&CDATA, 2, sIRC.CFUN))
{
case E_OK:
Fun_Player(&CDATA);
break;
case E_SIZE:
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"fun <Player> <Sound/Say> )", true, "ERROR");
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "HELP")
{
switch(ParamsValid(&CDATA, 0, sIRC.CHELP))
{
case E_OK:
Help_IRC(&CDATA);
break;
case E_SIZE:
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"help <Command> )", true, "ERROR");
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "INCHAN")
{
switch(ParamsValid(&CDATA, 1, sIRC.CINCHAN))
{
case E_OK:
Inchan_Server(&CDATA);
break;
case E_SIZE:
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"inchan <Channel> )", true, "ERROR");
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "INFO")
{
switch(ParamsValid(&CDATA, 0, sIRC.CINFO))
{
case E_OK:
Info_Server(&CDATA);
break;
case E_SIZE:
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"info )", true, "ERROR");
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "ITEM")
{
CDATA.PCOUNT = 3;
switch(ParamsValid(&CDATA, 2, sIRC.CITEM))
{
case E_OK:
Item_Player(&CDATA);
break;
case E_SIZE:
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"item <Player> <add> <ItemID/[ItemName]> <Amount> )", true, "ERROR");
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "JAIL")
{
CDATA.PCOUNT = 3;
switch(ParamsValid(&CDATA, 1, sIRC.CJAIL))
{
case E_OK:
Jail_Player(&CDATA);
break;
case E_SIZE:
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"jail <Player> <release/Reason>)", true, "ERROR");
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "KICK")
{
CDATA.PCOUNT = 2;
switch(ParamsValid(&CDATA, 1, sIRC.CKICK))
{
case E_OK:
Kick_Player(&CDATA);
break;
case E_SIZE:
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"kick <Player> <Reason> )", true, "ERROR");
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "KILL")
{
CDATA.PCOUNT = 2;
switch(ParamsValid(&CDATA, 1, sIRC._KILL))
{
case E_OK:
Kill_Player(&CDATA);
break;
case E_SIZE:
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"kill <Player> <Reason> )", true, "ERROR");
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "LEVEL")
{
CDATA.PCOUNT = 2;
switch(ParamsValid(&CDATA, 2, sIRC.CLEVEL))
{
case E_OK:
Level_Player(&CDATA);
break;
case E_SIZE:
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"level <Player> <NewLevel> )", true, "ERROR");
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "LOOKUP")
{
CDATA.PCOUNT = 2;
switch(ParamsValid(&CDATA, 2, sIRC.CLOOKUP))
{
case E_OK:
Lookup_Player(&CDATA);
break;
case E_SIZE:
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");
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "MONEY")
{
CDATA.PCOUNT = 2;
switch(ParamsValid(&CDATA, 2, sIRC.CMONEY))
{
case E_OK:
Money_Player(&CDATA);
break;
case E_SIZE:
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"money <Player> <(-)Money> )", true, "ERROR");
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "MUTE")
{
switch(ParamsValid(&CDATA, 2, sIRC.CMUTE))
{
case E_OK:
Mute_Player(&CDATA);
break;
case E_SIZE:
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"mute <Player> <release/TimeInMins> <Reason> )", true, "ERROR");
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "ONLINE")
{
switch(ParamsValid(&CDATA, 0, sIRC.CONLINE))
{
case E_OK:
Online_Players(&CDATA);
break;
case E_SIZE:
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"online )", true, "ERROR");
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "PM")
{
switch(ParamsValid(&CDATA, 2, sIRC.CPM))
{
case E_OK:
PM_Player(&CDATA);
break;
case E_SIZE:
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"pm <Player> <Message> )", true, "ERROR");
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "RELOAD")
{
switch(ParamsValid(&CDATA, 0, sIRC.CRESTART))
{
case E_OK:
sIRC.Send_IRC_Channels("Reloading MangChat Config Options. (Command Disabled)");
//sIRC.LoadConfig();
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "RESTART")
{
switch(ParamsValid(&CDATA, 0, sIRC.CRESTART))
{
case E_OK:
sIRC.Send_IRC_Channels(sIRC.RstMsg);
sIRC.ResetIRC();
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "REVIVE")
{
CDATA.PCOUNT = 2;
switch(ParamsValid(&CDATA, 1, sIRC.CREVIVE))
{
case E_OK:
Revive_Player(&CDATA);
break;
case E_SIZE:
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"revive <Player> )", true, "ERROR");
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "SAVEALL")
{
switch(ParamsValid(&CDATA, 0, sIRC.CSAVEALL))
{
case E_OK:
Saveall_Player(&CDATA);
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "SHUTDOWN")
{
switch(ParamsValid(&CDATA, 1, sIRC.CSHUTDOWN))
{
case E_OK:
Shutdown_Mangos(&CDATA);
break;
case E_SIZE:
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"shutdown <TimeInSeconds> )", true, "ERROR");
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "SPELL")
{
switch(ParamsValid(&CDATA, 2, sIRC.CSPELL))
{
case E_OK:
Spell_Player(&CDATA);
break;
case E_SIZE:
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"spell <Player> <Cast/Learn/UnLearn> <SpellID> )", true, "ERROR");
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "SYSMSG")
{
CDATA.PCOUNT = 2;
switch(ParamsValid(&CDATA, 2, sIRC.CSYSMSG))
{
case E_OK:
Sysmsg_Server(&CDATA);
break;
case E_SIZE:
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"sysmsg <a/e/n/add/del/list> <Message> )", true, "ERROR");
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "TELE")
{
switch(ParamsValid(&CDATA, 2, sIRC.CTELE))
{
case E_OK:
Tele_Player(&CDATA);
break;
case E_SIZE:
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");
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "TOP")
{
CDATA.PCOUNT = 1;
switch(ParamsValid(&CDATA, 1, sIRC.CTOP))
{
case E_OK:
Top_Player(&CDATA);
break;
case E_SIZE:
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"top <accttime/chartime/money> <limit> )", true, "ERROR");
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
else if(CDATA.CMD == "WHO")
{
switch(ParamsValid(&CDATA, 0, sIRC.CWHO))
{
case E_OK:
Who_Logged(&CDATA);
break;
case E_AUTH:
AuthValid = false;
break;
}
cValid = true;
}
if(!AuthValid && IsLoggedIn(USER))
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Access Denied! Your Security Level Is Too Low To Use This Command!", true, "ERROR");
if(cValid == false && (sIRC.BOTMASK & 4) != 0)
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Unknown Command!", true, "ERROR");
if(cValid && dontlog)
{
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());
}
return cValid;
}
return false;
}
bool IRCCmd::CanUse(std::string USER, int nLevel)
{
if(IsLoggedIn(USER))
{
if(GetLevel(USER) >= nLevel)
return true;
else
return false;
}
else if(nLevel == 0)
{
return true;
}
else
sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : You Are Not Logged In!", true, "ERROR");
return false;
}
std::string IRCCmd::ChanOrPM(_CDATA *CD)
{
if(CD->FROM == sIRC._Nick)
return CD->USER;
else
return CD->FROM;
}
Player *IRCCmd::GetPlayer(std::string WHO)
{
normalizePlayerName(WHO);
return ObjectAccessor::Instance().FindPlayerByName(WHO.c_str());
}
_client *IRCCmd::GetClient(std::string cname)
{
for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
{
if((*i)->Name == cname)
return (*i);
}
return (NULL);
}
bool IRCCmd::IsLoggedIn(std::string USER)
{
for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
{
if((*i)->Name == USER)
return true;
}
return false;
}
bool IRCCmd::AcctIsLoggedIn(std::string USER)
{
for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
{
if(MakeUpper((*i)->UName) == MakeUpper(USER))
return true;
}
return false;
}
std::string IRCCmd::AcctIsBanned(std::string ACCT)
{
uint32 acctid = objmgr.GetAccountByAccountName(ACCT);
std::string banned = "NOTBANNED";
QueryResult *result = loginDatabase.PQuery("SELECT banreason FROM ip_banned WHERE ip=(SELECT last_ip FROM account WHERE id = '%i')", acctid);
if(result)
{
banned = (*result)[0].GetCppString();
delete result;
return "IP Banned. Reason:" + banned;
}
QueryResult *result2 = loginDatabase.PQuery("SELECT banreason FROM account_banned WHERE id='%i'", acctid);
if(result2)
{
banned = (*result2)[0].GetCppString();
delete result2;
return "Account Banned. Reason:" + banned;
}
return banned;
}
int IRCCmd::GetLevel(std::string sName)
{
for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
{
if((*i)->Name == sName)
return (*i)->GMLevel;
}
return 0;
}
int IRCCmd::AcctLevel(std::string plnme)
{
uint64 guid = objmgr.GetPlayerGUIDByName(plnme);
uint32 account_id = 0;
uint32 security = 0;
account_id = objmgr.GetPlayerAccountIdByGUID(guid);
security = objmgr.GetSecurityByAccount(account_id);
return security;
}
std::string IRCCmd::GetAccName(std::string sName)
{
for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
{
if((*i)->Name == sName)
return (*i)->UName;
}
return "";
}
std::string IRCCmd::GetNameFromAcct(std::string sName)
{
for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
{
if((*i)->UName == sName)
return (*i)->Name;
}
return "";
}
int IRCCmd::GetAcctIDFromName(std::string sName)
{
for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
{
if((*i)->Name == sName)
{
uint32 acct_id = 0;
acct_id = objmgr.GetAccountByAccountName((*i)->UName.c_str());
return acct_id;
}
}
return 0;
}
std::string IRCCmd::GetAcctNameFromID(uint32 acctid)
{
QueryResult *result = loginDatabase.PQuery("SELECT username FROM account WHERE id = '%d'", acctid);
if(result)
{
std::string name = (*result)[0].GetCppString();
delete result;
return name;
}
return "";
}
std::string IRCCmd::GetIPFromPlayer(std::string player)
{
QueryResult *result = CharacterDatabase.PQuery("SELECT account FROM characters WHERE name = '%s'", player.c_str());
if(result)
{
std::string acctid = (*result)[0].GetCppString();
delete result;
QueryResult *result2 = loginDatabase.PQuery("SELECT last_ip FROM account WHERE id = '%s'", acctid.c_str());
if(result2)
{
std::string ip = (*result2)[0].GetCppString();
delete result2;
return ip;
}
}
return "";
}
std::string IRCCmd::SecToDay(std::string secons)
{
unsigned int seconds = atoi(secons.c_str());
unsigned int days = seconds / 86400;
unsigned int hours = seconds / 3600 % 24;
unsigned int mins = seconds / 60 % 60;
char tottime[1000];
sprintf(tottime, "%iDays:%iHours:%iMinutes", days, hours, mins);
return tottime;
}
bool IRCCmd::ValidParams(std::string PARAMS, int nCount)
{
if(nCount == 1 && PARAMS.size() == 0)
return false;
int pcount = 0;
size_t p = -1;
for(int i = 0;i < nCount;i++)
{
p = PARAMS.find(" ", p + 1);
if(p == -1)
break;
else
pcount++;
}
nCount--;
if(pcount >= nCount)
return true;
else
return false;
}
std::string* IRCCmd::getArray(std::string PARAMS, int nCount)
{
std::string *array = new std::string[nCount];
if(PARAMS.size() > 0)
{
int pcnt = 0;
size_t ps = 0;
size_t pc = -1;
for(int i = 0;i < nCount;i++)
{
pc = PARAMS.find(" ", pc + 1);
if(i + 1 == nCount && nCount != 1)
{
if(ps > 0 && pc > 0)
array[i] = PARAMS.substr(ps, PARAMS.size() - ps);
}
else
array[i] = PARAMS.substr(ps, pc - ps);
ps = pc + 1;
}
}
return array;
}
std::string IRCCmd::MakeMsg(const char *sLine, ... )
{
va_list ap;
char tmpoutp[1024];
va_start(ap, sLine);
vsnprintf(tmpoutp, 1024, sLine, ap );
va_end(ap);
std::string outp = tmpoutp;
return outp;
}
void IRCClient::AHFunc(uint64 itmid, std::string itmnme, std::string plname, uint32 faction)
{
IRCCmd Command;
Player* plr = Command.GetPlayer(plname);
if(plr)
{
std::string itemname = itmnme;
char temp [7];
sprintf(temp, "%u", itmid);
std::string itemid = temp;
std::string wowname = "";
std::string ircname = "";
switch (plr->GetTeam())
{
case 67:wowname="|cffff0000"+plname+"|r";ircname="\0034"+plname;break; //horde
case 469:wowname="|cff1589FF"+plname+"|r";ircname="\00312"+plname;break; //alliance
}
std::string wowfact = "|cffFF8040[Auction House]:|r";
std::string ircfact = "\00304,08\037/!\\\037\017\00307 Auction House \00304,08\037/!\\\037\017";
switch(faction)
{
//neutral
case 7:wowfact="|cffff8040[Neutral Auction House]:|r";ircfact="\00304,08\037/!\\\037\017\00307 Neutral Auction House \00304,08\037/!\\\037\017";break;
//horde
case 6:wowfact="|cffff0000[Horde Auction House]:|r";ircfact="\00304,08\037/!\\\037\017\00304 Horde Auction House \00304,08\037/!\\\037\017";break;
//alliance
case 2:wowfact="|cff1589FF[Alliance Auction House]:|r";ircfact="\00304,08\037/!\\\037\017\00312 Alliance Auction House \00304,08\037/!\\\037\017";break;
}
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());
std::string ircstr = Command.MakeMsg("%s A New Item Has Been Added [%s]. By: %s", ircfact.c_str(), itemname.c_str(), ircname.c_str());
sIRC.Send_WoW_Channel(sIRC._wow_chan[sIRC.Status].c_str(), wowstr.c_str());
sIRC.Send_IRC_Channel(sIRC._irc_chan[sIRC.Status].c_str(), ircstr.c_str());
}
}