CSV chatlog
This commit is contained in:
parent
12066e377c
commit
e7ebfe3e87
@ -15,4 +15,5 @@ extern int count_hits;
|
||||
extern int count_hits_head;
|
||||
|
||||
void Update();
|
||||
|
||||
}
|
||||
|
@ -15,28 +15,28 @@ namespace chatlog
|
||||
{
|
||||
|
||||
CatVar enabled(CV_SWITCH, "chat_log", "0", "Chat log", "Log chat to file");
|
||||
CatVar message_template(CV_STRING, "chat_log_template", "[%t] [U:1:%u] %n: %m",
|
||||
"Log template",
|
||||
"%u - SteamID\n%n - name\n%m - message\n%t - time");
|
||||
CatVar dont_log_spam(CV_SWITCH, "chat_log_nospam", "1", "No Spam",
|
||||
"Don't log your messages if spam is active");
|
||||
CatVar dont_log_ipc(CV_SWITCH, "chat_log_noipc", "1", "No IPC",
|
||||
"Don't log messages sent by bots");
|
||||
|
||||
class RAIILog
|
||||
class csv_stream
|
||||
{
|
||||
public:
|
||||
RAIILog()
|
||||
struct end_t {};
|
||||
static constexpr end_t end{};
|
||||
public:
|
||||
csv_stream()
|
||||
{
|
||||
open();
|
||||
}
|
||||
~RAIILog()
|
||||
~csv_stream()
|
||||
{
|
||||
stream.close();
|
||||
}
|
||||
void open()
|
||||
bool open()
|
||||
{
|
||||
logging::Info("Trying to open log file");
|
||||
logging::Info("csvstream: Trying to open log file");
|
||||
uid_t uid = geteuid();
|
||||
struct passwd *pw = getpwuid(uid);
|
||||
std::string uname = "";
|
||||
@ -44,26 +44,57 @@ public:
|
||||
{
|
||||
uname = std::string(pw->pw_name);
|
||||
}
|
||||
stream.open(DATA_PATH "/chat-" + uname + ".log",
|
||||
stream.open(DATA_PATH "/chat-" + uname + ".csv",
|
||||
std::ios::out | std::ios::app);
|
||||
return stream.good();
|
||||
}
|
||||
void log(const std::string &msg)
|
||||
{
|
||||
if (stream.bad() or not stream.is_open())
|
||||
{
|
||||
logging::Info("[ERROR] RAIILog stream is bad!");
|
||||
open();
|
||||
return;
|
||||
}
|
||||
stream << msg << "\n";
|
||||
stream.flush();
|
||||
}
|
||||
public:
|
||||
int columns{ 0 };
|
||||
std::ofstream stream;
|
||||
};
|
||||
|
||||
RAIILog &logger()
|
||||
csv_stream& operator<<(csv_stream& log, const std::string& string)
|
||||
{
|
||||
static RAIILog object{};
|
||||
if (!log.stream.good())
|
||||
{
|
||||
logging::Info("[ERROR] csvstream is not open!");
|
||||
if (!log.open())
|
||||
return log;
|
||||
}
|
||||
if (log.columns)
|
||||
log.stream << ',';
|
||||
log.stream << '"';
|
||||
for (const auto& i : string)
|
||||
{
|
||||
if (i == '"')
|
||||
{
|
||||
log.stream << '"';
|
||||
}
|
||||
log.stream << i;
|
||||
}
|
||||
log.stream << '"';
|
||||
log.columns++;
|
||||
return log;
|
||||
}
|
||||
|
||||
csv_stream& operator<<(csv_stream& log, const csv_stream::end_t& end)
|
||||
{
|
||||
if (!log.stream.good())
|
||||
{
|
||||
logging::Info("[ERROR] csvstream is not open!");
|
||||
if (!log.open())
|
||||
return log;
|
||||
}
|
||||
log.stream << '\n';
|
||||
log.stream.flush();
|
||||
log.columns = 0;
|
||||
return log;
|
||||
}
|
||||
|
||||
|
||||
csv_stream &logger()
|
||||
{
|
||||
static csv_stream object{};
|
||||
return object;
|
||||
}
|
||||
|
||||
@ -83,6 +114,7 @@ void LogMessage(int eid, std::string message)
|
||||
playerlist::AccessData(info.friendsID).state ==
|
||||
playerlist::k_EState::IPC)
|
||||
return;
|
||||
|
||||
std::string name(info.name);
|
||||
for (auto &x : name)
|
||||
{
|
||||
@ -94,17 +126,12 @@ void LogMessage(int eid, std::string message)
|
||||
if (x == '\n' || x == '\r')
|
||||
x = '*';
|
||||
}
|
||||
time_t current_time;
|
||||
struct tm *time_info;
|
||||
char timeString[9];
|
||||
time(¤t_time);
|
||||
time_info = localtime(¤t_time);
|
||||
strftime(timeString, sizeof(timeString), "%H:%M:%S", time_info);
|
||||
std::string msg(message_template.GetString());
|
||||
ReplaceString(msg, "%t", std::string(timeString));
|
||||
ReplaceString(msg, "%u", std::to_string(info.friendsID));
|
||||
ReplaceString(msg, "%n", name);
|
||||
ReplaceString(msg, "%m", message);
|
||||
logger().log(msg);
|
||||
|
||||
logger()
|
||||
<< std::to_string(time(nullptr))
|
||||
<< std::to_string(info.friendsID)
|
||||
<< name
|
||||
<< message
|
||||
<< csv_stream::end;
|
||||
}
|
||||
}
|
||||
|
@ -44,7 +44,7 @@ CatCommand debug_hitrate("debug_hitrate", "Debug hitrate", []() {
|
||||
}
|
||||
if (count_hits)
|
||||
{
|
||||
p1 = float(count_hits_head) / float(count_hits) * 100.0f;
|
||||
p2 = float(count_hits_head) / float(count_hits) * 100.0f;
|
||||
}
|
||||
logging::Info("%d / %d (%d%%)", count_hits, count_shots, p1);
|
||||
logging::Info("%d / %d (%d%%)", count_hits_head, count_hits, p2);
|
||||
|
@ -585,7 +585,7 @@ void FireGameEvent_hook(void *_this, IGameEvent *event)
|
||||
original(_this, event);
|
||||
}
|
||||
|
||||
static CatVar hitrate_check(CV_SWITCH, "hitrate", "0", "Monitor hitrate");
|
||||
static CatVar hitrate_check(CV_SWITCH, "hitrate", "1", "Monitor hitrate");
|
||||
|
||||
void FrameStageNotify_hook(void *_this, int stage)
|
||||
{
|
||||
|
@ -37,6 +37,10 @@ void queue_start()
|
||||
re::CTFPartyClient::LoadSavedCasualCriteria(client);
|
||||
re::CTFPartyClient::RequestQueueForMatch(client);
|
||||
}
|
||||
else
|
||||
{
|
||||
logging::Info("queue_start: CTFPartyClient == null!");
|
||||
}
|
||||
}
|
||||
|
||||
void abandon()
|
||||
@ -44,5 +48,7 @@ void abandon()
|
||||
re::CTFGCClientSystem *gc = re::CTFGCClientSystem::GTFGCClientSystem();
|
||||
if (gc != nullptr)
|
||||
gc->AbandonCurrentMatch();
|
||||
else
|
||||
logging::Info("abandon: CTFGCClientSystem == null!");
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user