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 std::string GetAcoreString (uint32 entry) const
 
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)
 
void SendGlobalSysMessage (const char *str)
 
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
245: m_session(nullptr), sentErrorMessage(false) {} // for CLI subclass
WorldSession * m_session
Definition Chat.h:248
bool sentErrorMessage
Definition Chat.h:251

◆ ChatHandler() [2/2]

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

◆ IsHumanReadable()

bool AddonChannelCommandHandler::IsHumanReadable ( ) const
inlineoverridevirtual

Reimplemented from ChatHandler.

284{ return humanReadable; }
bool humanReadable
Definition Chat.h:294

◆ ParseCommands()

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

Reimplemented from ChatHandler.

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

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

Referenced by WorldSession::HandleMessagechatOpcode().

◆ Send()

void AddonChannelCommandHandler::Send ( std::string const &  msg)
private
1020{
1021 WorldPacket data;
1023 GetSession()->SendPacket(&data);
1024}
@ 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:265
WorldSession * GetSession()
Definition Chat.h:242
Player * GetPlayer() const
Definition Chat.cpp:36
Definition WorldPacket.h:26
void SendPacket(WorldPacket const *packet)
Send a packet to the client.
Definition WorldSession.cpp:226

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
1027{
1028 ASSERT(echo.size());
1029 std::string ack = "AzerothCore\ta";
1030 ack.resize(18);
1031 memcpy(&ack[13], echo.data(), 4);
1032 ack[17] = '\0';
1033 Send(ack);
1034 hadAck = true;
1035}
#define ASSERT
Definition Errors.h:68
void Send(std::string const &msg)
Definition Chat.cpp:1019

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

Referenced by ParseCommands(), and SendSysMessage().

◆ SendFailed()

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

References ASSERT, echo, and Send().

Referenced by ParseCommands().

◆ SendOK()

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

References ASSERT, echo, and Send().

Referenced by ParseCommands().

◆ SendSysMessage() [1/3]

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

Reimplemented from ChatHandler.

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

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.

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

References ChatHandler::BuildChatPacket(), CHAT_MSG_SYSTEM, LANG_UNIVERSAL, ChatHandler::m_session, and WorldSession::SendPacket().

Member Data Documentation

◆ echo

std::string AddonChannelCommandHandler::echo
private

◆ hadAck

bool AddonChannelCommandHandler::hadAck = false
private

◆ humanReadable

bool AddonChannelCommandHandler::humanReadable = false
private

Referenced by ParseCommands().


The documentation for this class was generated from the following files: