TTW_Bot/user.h

99 lines
2.5 KiB
C

#ifndef USER_H
#define USER_H
#include <QString>
#include <QDate>
#include <QDateTime>
#include <QVector>
struct UserBadge {
QString name;
int version;
UserBadge(const QString &name = "", int version = 0)
: name(name), version(version) {}
};
struct User {
QString id;
QString login;
QString displayName;
QString color;
QDate followAt;
QDate createdAt;
QDateTime lastMessageTime;
QVector<UserBadge> badges;
// Статусы
bool isModerator;
bool isVIP;
bool isSubscriber;
bool isTurbo;
bool returningChatter;
bool firstMsg;
// Статистика
int messageCount;
int warnCount;
User()
: followAt(QDate(1900, 1, 1))
, createdAt(QDate(1900, 1, 1))
, lastMessageTime(QDateTime::fromSecsSinceEpoch(0))
, isModerator(false)
, isVIP(false)
, isSubscriber(false)
, isTurbo(false)
, returningChatter(false)
, firstMsg(false)
, messageCount(0)
, warnCount(0)
{}
// Проверка наличия бейджа
bool hasBadge(const QString &badgeName) const {
for (const auto &badge : badges) {
if (badge.name == badgeName) {
return true;
}
}
return false;
}
// Получение версии бейджа
int badgeVersion(const QString &badgeName) const {
for (const auto &badge : badges) {
if (badge.name == badgeName) {
return badge.version;
}
}
return 0;
}
// Обновление из TwitchMessage
void updateFromTwitchMessage(const class TwitchMessage &msg);
// Строковое представление статусов
QString getStatusString() const {
QStringList statuses;
if (isModerator) statuses << "Модератор";
if (isVIP) statuses << "VIP";
if (isSubscriber) statuses << "Подписчик";
if (returningChatter) statuses << "Возвращающийся";
if (firstMsg) statuses << "Первое сообщение";
return statuses.join(", ");
}
// Полный список бейджей как строка
QString getBadgesString() const {
QStringList badgeStrings;
for (const auto &badge : badges) {
badgeStrings << QString("%1/%2").arg(badge.name).arg(badge.version);
}
return badgeStrings.join(",");
}
};
#endif // USER_H