AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
AddonChannelCommandHandler Class Reference

#include "Chat.h"

Inheritance diagram for AddonChannelCommandHandler:
ChatHandler

Public Member Functions

bool ParseCommands (std::string_view str) override
 
void SendSysMessage (std::string_view str, bool escapeCharacters) override
 
bool IsHumanReadable () const override
 
 ChatHandler (WorldSession *session)
 
 ChatHandler ()
 
virtual void SendSysMessage (std::string_view str, bool escapeCharacters=false)
 
void SendSysMessage (uint32 entry)
 
- Public Member Functions inherited from ChatHandler
 ChatHandler (WorldSession *session)
 
virtual ~ChatHandler ()
 
void SendNotification (std::string_view str)
 
template<typename... Args>
void SendNotification (uint32 strId, Args &&... args)
 
template<typename... Args>
void SendNotification (char const *fmt, Args &&... args)
 
void SendGMText (std::string_view str)
 
template<typename... Args>
void SendGMText (uint32 strId, Args &&... args)
 
template<typename... Args>
void SendGMText (char const *fmt, Args &&... args)
 
void SendWorldText (std::string_view str)
 
template<typename... Args>
void SendWorldText (uint32 strId, Args &&... args)
 
template<typename... Args>
void SendWorldText (char const *fmt, Args &&... args)
 
void SendWorldTextOptional (std::string_view str, uint32 flag)
 
template<typename... Args>
void SendWorldTextOptional (uint32 strId, uint32 flag, Args &&... args)
 
template<typename... Args>
void SendWorldTextOptional (char const *fmt, uint32 flag, Args &&... args)
 
virtual char const * GetAcoreString (uint32 entry) const
 
virtual void SendSysMessage (std::string_view str, bool escapeCharacters=false)
 
void SendSysMessage (uint32 entry)
 
void PSendSysMessage (std::string_view str, bool escapeCharacters=false)
 
template<typename... Args>
void PSendSysMessage (char const *fmt, Args &&... args)
 
template<typename... Args>
void PSendSysMessage (uint32 entry, Args &&... args)
 
template<typename... Args>
std::string PGetParseString (uint32 entry, Args &&... args) const
 
std::string const * GetModuleString (std::string module, uint32 id) const
 
template<typename... Args>
void PSendModuleSysMessage (std::string module, uint32 id, Args &&... args)
 
template<typename... Args>
std::string PGetParseModuleString (std::string module, uint32 id, Args &&... args) const
 
void SendErrorMessage (uint32 entry)
 
void SendErrorMessage (std::string_view str, bool escapeCharacters)
 
template<typename... Args>
void SendErrorMessage (char const *fmt, Args &&... args)
 
template<typename... Args>
void SendErrorMessage (uint32 entry, Args &&... args)
 
bool _ParseCommands (std::string_view text)
 
virtual bool ParseCommands (std::string_view text)
 
void SendGlobalSysMessage (const char *str)
 
virtual bool IsHumanReadable () const
 
virtual std::string GetNameLink () const
 
virtual bool needReportToTarget (Player *chr) const
 
virtual LocaleConstant GetSessionDbcLocale () const
 
virtual int GetSessionDbLocaleIndex () const
 
bool HasLowerSecurity (Player *target, ObjectGuid guid=ObjectGuid::Empty, bool strong=false)
 
bool HasLowerSecurityAccount (WorldSession *target, uint32 account, bool strong=false)
 
void SendGlobalGMSysMessage (const char *str)
 
PlayergetSelectedPlayer () const
 
CreaturegetSelectedCreature () const
 
UnitgetSelectedUnit () const
 
WorldObjectgetSelectedObject () const
 
PlayergetSelectedPlayerOrSelf () const
 
virtual bool HasSession () const
 
void DoForAllValidSessions (std::function< void(Player *)> exec)
 
char * extractKeyFromLink (char *text, char const *linkType, char **something1=nullptr)
 
char * extractKeyFromLink (char *text, char const *const *linkTypes, int *found_idx, char **something1=nullptr)
 
char * extractQuotedArg (char *args)
 
uint32 extractSpellIdFromLink (char *text)
 
ObjectGuid::LowType extractLowGuidFromLink (char *text, HighGuid &guidHigh)
 
bool GetPlayerGroupAndGUIDByName (const char *cname, Player *&player, Group *&group, ObjectGuid &guid, bool offline=false)
 
std::string extractPlayerNameFromLink (char *text)
 
bool extractPlayerTarget (char *args, Player **player, ObjectGuid *player_guid=nullptr, std::string *player_name=nullptr)
 
std::string playerLink (std::string const &name) const
 
std::string GetNameLink (Player *chr) const
 
GameObjectGetNearbyGameObject () const
 
GameObjectGetObjectFromPlayerMapByDbGuid (ObjectGuid::LowType lowguid)
 
CreatureGetCreatureFromPlayerMapByDbGuid (ObjectGuid::LowType lowguid)
 
bool HasSentErrorMessage () const
 
void SetSentErrorMessage (bool val)
 
bool IsConsole () const
 
PlayerGetPlayer () const
 
WorldSessionGetSession ()
 
bool IsAvailable (uint32 securityLevel) const
 

Private Member Functions

void Send (std::string const &msg)
 
void SendAck ()
 
void SendOK ()
 
void SendFailed ()
 

Private Attributes

std::string echo
 
bool hadAck = false
 
bool humanReadable = false
 

Additional Inherited Members

- Static Public Member Functions inherited from ChatHandler
static std::size_t BuildChatPacket (WorldPacket &data, ChatMsg chatType, Language language, ObjectGuid senderGUID, ObjectGuid receiverGUID, std::string_view message, uint8 chatTag, std::string const &senderName="", std::string const &receiverName="", uint32 achievementId=0, bool gmMessage=false, std::string const &channelName="")
 
static std::size_t BuildChatPacket (WorldPacket &data, ChatMsg chatType, Language language, WorldObject const *sender, WorldObject const *receiver, std::string_view message, uint32 achievementId=0, std::string const &channelName="", LocaleConstant locale=DEFAULT_LOCALE)
 
static char * LineFromMessage (char *&pos)
 
- Protected Member Functions inherited from ChatHandler
 ChatHandler ()
 

Detailed Description

Member Function Documentation

◆ ChatHandler() [1/2]

ChatHandler::ChatHandler ( )
inlineexplicit
246: m_session(nullptr), sentErrorMessage(false) {} // for CLI subclass
WorldSession * m_session
Definition: Chat.h:249
bool sentErrorMessage
Definition: Chat.h:252

◆ ChatHandler() [2/2]

ChatHandler::ChatHandler ( WorldSession session)
inlineexplicit
40: m_session(session), sentErrorMessage(false) {}

◆ IsHumanReadable()

bool AddonChannelCommandHandler::IsHumanReadable ( ) const
inlineoverridevirtual

Reimplemented from ChatHandler.

285{ return humanReadable; }
bool humanReadable
Definition: Chat.h:295

◆ ParseCommands()

bool AddonChannelCommandHandler::ParseCommands ( std::string_view  str)
overridevirtual

Reimplemented from ChatHandler.

978{
979 if (memcmp(str.data(), "AzerothCore\t", 12))
980 return false;
981 char opcode = str[12];
982 if (!opcode) // str[12] is opcode
983 return false;
984 if (!str[13] || !str[14] || !str[15] || !str[16]) // str[13] through str[16] is 4-character command counter
985 return false;
986 echo = str.substr(13);
987
988 switch (opcode)
989 {
990 case 'p': // p Ping
991 SendAck();
992 return true;
993 case 'h': // h Issue human-readable command
994 case 'i': // i Issue command
995 if (!str[17])
996 return false;
997 humanReadable = (opcode == 'h');
998 if (_ParseCommands(str.substr(17))) // actual command starts at str[17]
999 {
1000 if (!hadAck)
1001 SendAck();
1002 if (HasSentErrorMessage())
1003 SendFailed();
1004 else
1005 SendOK();
1006 }
1007 else
1008 {
1010 SendFailed();
1011 }
1012 return true;
1013 default:
1014 return false;
1015 }
1016}
@ LANG_CMD_INVALID
Definition: Language.h:38
bool HasSentErrorMessage() const
Definition: Chat.h:238
bool _ParseCommands(std::string_view text)
Definition: Chat.cpp:227
void SendAck()
Definition: Chat.cpp:1025
void SendSysMessage(std::string_view str, bool escapeCharacters) override
Definition: Chat.cpp:1057
bool hadAck
Definition: Chat.h:294
void SendOK()
Definition: Chat.cpp:1036
std::string echo
Definition: Chat.h:293
void SendFailed()
Definition: Chat.cpp:1046

References ChatHandler::_ParseCommands(), echo, hadAck, ChatHandler::HasSentErrorMessage(), humanReadable, LANG_CMD_INVALID, SendAck(), SendFailed(), SendOK(), and SendSysMessage().

◆ Send()

void AddonChannelCommandHandler::Send ( std::string const &  msg)
private
1019{
1020 WorldPacket data;
1022 GetSession()->SendPacket(&data);
1023}
@ CHAT_MSG_WHISPER
Definition: SharedDefines.h:3159
@ LANG_ADDON
Definition: SharedDefines.h:753
static std::size_t BuildChatPacket(WorldPacket &data, ChatMsg chatType, Language language, ObjectGuid senderGUID, ObjectGuid receiverGUID, std::string_view message, uint8 chatTag, std::string const &senderName="", std::string const &receiverName="", uint32 achievementId=0, bool gmMessage=false, std::string const &channelName="")
Definition: Chat.cpp:264
WorldSession * GetSession()
Definition: Chat.h:243
Player * GetPlayer() const
Definition: Chat.cpp:35
Definition: WorldPacket.h:27
void SendPacket(WorldPacket const *packet)
Send a packet to the client.
Definition: WorldSession.cpp:214

References ChatHandler::BuildChatPacket(), CHAT_MSG_WHISPER, ChatHandler::GetPlayer(), ChatHandler::GetSession(), LANG_ADDON, and WorldSession::SendPacket().

Referenced by SendAck(), SendFailed(), SendOK(), and SendSysMessage().

◆ SendAck()

void AddonChannelCommandHandler::SendAck ( )
private
1026{
1027 ASSERT(echo.size());
1028 std::string ack = "AzerothCore\ta";
1029 ack.resize(18);
1030 memcpy(&ack[13], echo.data(), 4);
1031 ack[17] = '\0';
1032 Send(ack);
1033 hadAck = true;
1034}
#define ASSERT
Definition: Errors.h:68
void Send(std::string const &msg)
Definition: Chat.cpp:1018

References ASSERT, echo, hadAck, and Send().

Referenced by ParseCommands(), and SendSysMessage().

◆ SendFailed()

void AddonChannelCommandHandler::SendFailed ( )
private
1047{
1048 ASSERT(echo.size());
1049 std::string fail = "AzerothCore\tf";
1050 fail.resize(18);
1051 memcpy(&fail[13], echo.data(), 4);
1052 fail[17] = '\0';
1053 Send(fail);
1054}

References ASSERT, echo, and Send().

Referenced by ParseCommands().

◆ SendOK()

void AddonChannelCommandHandler::SendOK ( )
private
1037{
1038 ASSERT(echo.size());
1039 std::string ok = "AzerothCore\to";
1040 ok.resize(18);
1041 memcpy(&ok[13], echo.data(), 4);
1042 ok[17] = '\0';
1043 Send(ok);
1044}

References ASSERT, echo, and Send().

Referenced by ParseCommands().

◆ SendSysMessage() [1/3]

void AddonChannelCommandHandler::SendSysMessage ( std::string_view  str,
bool  escapeCharacters 
)
overridevirtual

Reimplemented from ChatHandler.

1058{
1059 ASSERT(echo.size());
1060 if (!hadAck)
1061 SendAck();
1062
1063 std::string msg = "AzerothCore\tm";
1064 msg.append(echo.data(), 4);
1065 std::string body(str);
1066 if (escapeCharacters)
1067 boost::replace_all(body, "|", "||");
1068 std::size_t pos, lastpos;
1069 for (lastpos = 0, pos = body.find('\n', lastpos); pos != std::string::npos; lastpos = pos + 1, pos = body.find('\n', lastpos))
1070 {
1071 std::string line(msg);
1072 line.append(body, lastpos, pos - lastpos);
1073 Send(line);
1074 }
1075 msg.append(body, lastpos, pos - lastpos);
1076 Send(msg);
1077}

References ASSERT, echo, hadAck, Send(), and SendAck().

Referenced by ParseCommands().

◆ SendSysMessage() [2/3]

void ChatHandler::SendSysMessage ( std::string_view  str,
bool  escapeCharacters = false 
)
virtual

Reimplemented from ChatHandler.

160{
161 std::string msg{ str };
162
163 // Replace every "|" with "||" in msg
164 if (escapeCharacters && msg.find('|') != std::string::npos)
165 {
166 std::vector<std::string_view> tokens = Acore::Tokenize(msg, '|', true);
167 std::ostringstream stream;
168
169 for (std::size_t i = 0; i < tokens.size() - 1; ++i)
170 stream << tokens[i] << "||";
171
172 stream << tokens[tokens.size() - 1];
173
174 msg = stream.str();
175 }
176
177 WorldPacket data;
178 for (std::string_view line : Acore::Tokenize(str, '\n', true))
179 {
180 BuildChatPacket(data, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, line);
181 m_session->SendPacket(&data);
182 }
183}
@ CHAT_MSG_SYSTEM
Definition: SharedDefines.h:3152
@ LANG_UNIVERSAL
Definition: SharedDefines.h:735
std::vector< std::string_view > Tokenize(std::string_view str, char sep, bool keepEmpty)
Definition: Tokenize.cpp:20

◆ SendSysMessage() [3/3]

void ChatHandler::SendSysMessage ( uint32  entry)
206{
208}
virtual char const * GetAcoreString(uint32 entry) const
Definition: Chat.cpp:40

Member Data Documentation

◆ echo

std::string AddonChannelCommandHandler::echo
private

◆ hadAck

bool AddonChannelCommandHandler::hadAck = false
private

◆ humanReadable

bool AddonChannelCommandHandler::humanReadable = false
private

Referenced by ParseCommands().