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
 
virtual 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.

286{ return humanReadable; }
bool humanReadable
Definition Chat.h:296

◆ ParseCommands()

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

Reimplemented from ChatHandler.

992{
993 if (memcmp(str.data(), "AzerothCore\t", 12))
994 return false;
995 char opcode = str[12];
996 if (!opcode) // str[12] is opcode
997 return false;
998 if (!str[13] || !str[14] || !str[15] || !str[16]) // str[13] through str[16] is 4-character command counter
999 return false;
1000 echo = str.substr(13);
1001
1002 switch (opcode)
1003 {
1004 case 'p': // p Ping
1005 SendAck();
1006 return true;
1007 case 'h': // h Issue human-readable command
1008 case 'i': // i Issue command
1009 if (!str[17])
1010 return false;
1011 humanReadable = (opcode == 'h');
1012 if (_ParseCommands(str.substr(17))) // actual command starts at str[17]
1013 {
1014 if (!hadAck)
1015 SendAck();
1016 if (HasSentErrorMessage())
1017 SendFailed();
1018 else
1019 SendOK();
1020 }
1021 else
1022 {
1024 SendFailed();
1025 }
1026 return true;
1027 default:
1028 return false;
1029 }
1030}
@ LANG_CMD_INVALID
Definition Language.h:38
void SendAck()
Definition Chat.cpp:1039
void SendSysMessage(std::string_view str, bool escapeCharacters) override
Definition Chat.cpp:1071
bool hadAck
Definition Chat.h:295
void SendOK()
Definition Chat.cpp:1050
std::string echo
Definition Chat.h:294
void SendFailed()
Definition Chat.cpp:1060
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
1033{
1034 WorldPacket data;
1036 GetSession()->SendPacket(&data);
1037}
@ 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
1040{
1041 ASSERT(echo.size());
1042 std::string ack = "AzerothCore\ta";
1043 ack.resize(18);
1044 memcpy(&ack[13], echo.data(), 4);
1045 ack[17] = '\0';
1046 Send(ack);
1047 hadAck = true;
1048}
#define ASSERT
Definition Errors.h:68
void Send(std::string const &msg)
Definition Chat.cpp:1032

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

Referenced by ParseCommands(), and SendSysMessage().

◆ SendFailed()

void AddonChannelCommandHandler::SendFailed ( )
private
1061{
1062 ASSERT(echo.size());
1063 std::string fail = "AzerothCore\tf";
1064 fail.resize(18);
1065 memcpy(&fail[13], echo.data(), 4);
1066 fail[17] = '\0';
1067 Send(fail);
1068}

References ASSERT, echo, and Send().

Referenced by ParseCommands().

◆ SendOK()

void AddonChannelCommandHandler::SendOK ( )
private
1051{
1052 ASSERT(echo.size());
1053 std::string ok = "AzerothCore\to";
1054 ok.resize(18);
1055 memcpy(&ok[13], echo.data(), 4);
1056 ok[17] = '\0';
1057 Send(ok);
1058}

References ASSERT, echo, and Send().

Referenced by ParseCommands().

◆ SendSysMessage() [1/3]

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

Reimplemented from ChatHandler.

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

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: