/*
* This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Affero General Public License as published by the
* Free Software Foundation; either version 3 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see .
*/
#include "Channel.h"
#include "Group.h"
#include "Guild.h"
#include "Log.h"
#include "PlayerScript.h"
class ChatLogScript : public PlayerScript
{
public:
ChatLogScript() :
PlayerScript("ChatLogScript",
{
PLAYERHOOK_ON_CHAT,
PLAYERHOOK_ON_CHAT_WITH_GROUP,
PLAYERHOOK_ON_CHAT_WITH_GUILD,
PLAYERHOOK_ON_CHAT_WITH_CHANNEL,
PLAYERHOOK_ON_CHAT_WITH_RECEIVER
})
{
}
void OnPlayerChat(Player* player, uint32 type, uint32 lang, std::string& msg) override
{
std::string logType = "";
std::string chatType = "";
switch (type)
{
case CHAT_MSG_SAY:
logType = "chat.say";
chatType = "says";
break;
case CHAT_MSG_EMOTE:
logType = "chat.emote";
chatType = "emotes";
break;
case CHAT_MSG_YELL:
logType = "chat.yell";
chatType = "yells";
break;
default:
return;
}
LOG_INFO(logType, "Player {} {} (language {}): {}",
player->GetName(), chatType, lang, msg);
}
void OnPlayerChat(Player* player, uint32 /*type*/, uint32 lang, std::string& msg, Player* receiver) override
{
//! NOTE:
//! LANG_ADDON can only be sent by client in "PARTY", "RAID", "GUILD", "BATTLEGROUND", "WHISPER"
std::string logType = (lang != LANG_ADDON) ? "chat." : "chat.addon.";
std::string msgType = "whisper";
LOG_INFO(logType + msgType, "Player {} {} {}: {}",
player->GetName(), msgType, receiver ? receiver->GetName() : "", msg);
}
void OnPlayerChat(Player* player, uint32 type, uint32 lang, std::string& msg, Group* group) override
{
//! NOTE:
//! LANG_ADDON can only be sent by client in "PARTY", "RAID", "GUILD", "BATTLEGROUND", "WHISPER"
std::string logType = (lang != LANG_ADDON) ? "chat." : "chat.addon.";
std::string msgType = "";
switch (type)
{
case CHAT_MSG_PARTY:
case CHAT_MSG_PARTY_LEADER:
msgType = "party";
break;
case CHAT_MSG_RAID:
case CHAT_MSG_RAID_LEADER:
case CHAT_MSG_RAID_WARNING:
msgType = "raid";
break;
case CHAT_MSG_BATTLEGROUND:
case CHAT_MSG_BATTLEGROUND_LEADER:
msgType = "bg";
break;
default:
return;
}
std::string role = (type == CHAT_MSG_PARTY_LEADER || type == CHAT_MSG_RAID_LEADER || type == CHAT_MSG_BATTLEGROUND_LEADER) ? "Leader player" : "Player";
std::string action = (type == CHAT_MSG_RAID_WARNING) ? "sends raid warning" : "tells";
std::string targetGroup = group ? group->GetLeaderName() : "";
LOG_INFO(logType + msgType, "{} {} {} {} with leader {}: {}",
role, player->GetName(), action, msgType, targetGroup, msg);
}
void OnPlayerChat(Player* player, uint32 type, uint32 lang, std::string& msg, Guild* guild) override
{
//! NOTE:
//! LANG_ADDON can only be sent by client in "PARTY", "RAID", "GUILD", "BATTLEGROUND", "WHISPER"
std::string logType = (lang != LANG_ADDON) ? "chat." : "chat.addon.";
std::string msgType = "";
switch (type)
{
case CHAT_MSG_GUILD:
msgType = "guild";
break;
case CHAT_MSG_OFFICER:
msgType = "guild.officer";
break;
default:
return;
}
LOG_INFO(logType + msgType, "Player {} tells {} \"{}\": {}",
player->GetName(), msgType, guild ? guild->GetName() : "", msg);
}
void OnPlayerChat(Player* player, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Channel* channel) override
{
bool isSystem = channel &&
(channel->HasFlag(CHANNEL_FLAG_TRADE) ||
channel->HasFlag(CHANNEL_FLAG_GENERAL) ||
channel->HasFlag(CHANNEL_FLAG_CITY) ||
channel->HasFlag(CHANNEL_FLAG_LFG));
if (isSystem)
{
LOG_INFO("chat.channel", "Player {} tells channel {}: {}",
player->GetName(), channel->GetName(), msg);
}
else
{
// Allow to log custom channels. i.e. world channel
// in that case set config: Logger.channel.world=6,Chat
std::string channelName = channel ? channel->GetName() : "";
LOG_INFO("chat.channel." + channelName, "Player {} tells channel {}: {}",
player->GetName(), channelName, msg);
}
}
};
void AddSC_chat_log()
{
new ChatLogScript();
}