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
 
bool HasPermission (uint32 permissionId) 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
39: 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.

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

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
1028{
1029 WorldPacket data;
1031 GetSession()->SendPacket(&data);
1032}
@ CHAT_MSG_WHISPER
Definition SharedDefines.h:3392
@ LANG_ADDON
Definition SharedDefines.h:741
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:273
WorldSession * GetSession()
Definition Chat.h:242
Player * GetPlayer() const
Definition Chat.cpp:37
Definition WorldPacket.h:26
void SendPacket(WorldPacket const *packet)
Send a packet to the client.
Definition WorldSession.cpp:287

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
1035{
1036 ASSERT(echo.size());
1037 std::string ack = "AzerothCore\ta";
1038 ack.resize(18);
1039 memcpy(&ack[13], echo.data(), 4);
1040 ack[17] = '\0';
1041 Send(ack);
1042 hadAck = true;
1043}
#define ASSERT
Definition Errors.h:68
void Send(std::string const &msg)
Definition Chat.cpp:1027

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

Referenced by ParseCommands(), and SendSysMessage().

◆ SendFailed()

void AddonChannelCommandHandler::SendFailed ( )
private
1056{
1057 ASSERT(echo.size());
1058 std::string fail = "AzerothCore\tf";
1059 fail.resize(18);
1060 memcpy(&fail[13], echo.data(), 4);
1061 fail[17] = '\0';
1062 Send(fail);
1063}

References ASSERT, echo, and Send().

Referenced by ParseCommands().

◆ SendOK()

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

References ASSERT, echo, and Send().

Referenced by ParseCommands().

◆ SendSysMessage() [1/3]

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

Reimplemented from ChatHandler.

1067{
1068 ASSERT(echo.size());
1069 if (!hadAck)
1070 SendAck();
1071
1072 std::string msg = "AzerothCore\tm";
1073 msg.append(echo.data(), 4);
1074 std::string body(str);
1075 if (escapeCharacters)
1076 boost::replace_all(body, "|", "||");
1077 std::size_t pos, lastpos;
1078 for (lastpos = 0, pos = body.find('\n', lastpos); pos != std::string::npos; lastpos = pos + 1, pos = body.find('\n', lastpos))
1079 {
1080 std::string line(msg);
1081 line.append(body, lastpos, pos - lastpos);
1082 Send(line);
1083 }
1084 msg.append(body, lastpos, pos - lastpos);
1085 Send(msg);
1086}

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.

169{
170 std::string msg{ str };
171
172 // Replace every "|" with "||" in msg
173 if (escapeCharacters && msg.find('|') != std::string::npos)
174 {
175 std::vector<std::string_view> tokens = Acore::Tokenize(msg, '|', true);
176 std::ostringstream stream;
177
178 for (std::size_t i = 0; i < tokens.size() - 1; ++i)
179 stream << tokens[i] << "||";
180
181 stream << tokens[tokens.size() - 1];
182
183 msg = stream.str();
184 }
185
186 WorldPacket data;
187 for (std::string_view line : Acore::Tokenize(str, '\n', true))
188 {
189 BuildChatPacket(data, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, line);
190 m_session->SendPacket(&data);
191 }
192}
@ CHAT_MSG_SYSTEM
Definition SharedDefines.h:3385
@ LANG_UNIVERSAL
Definition SharedDefines.h:723
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)
215{
217}
virtual std::string GetAcoreString(uint32 entry) const
Definition Chat.cpp:42

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: