TTW_Bot/ttw_api.h

139 lines
4.3 KiB
C++

#ifndef TTW_API_H
#define TTW_API_H
#include <QObject>
#include <QString>
#include <QDate>
#include <QVector>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include "user.h"
#include "badge.h"
class TCustomReward;
class TCustomRewardEvent;
struct ChatBadge;
class Emote;
class TTwAPI : public QObject
{
Q_OBJECT
public:
explicit TTwAPI(QObject *parent = nullptr);
~TTwAPI();
// Инициализация
void init(const QString &clientId,
const QString &token,
const QString &streamerToken,
const QString &channel,
const QString &botName);
// Основные методы
void getTTWStat(const QString &channel,
int &avgViewers,
int &maxViewers,
int &hoursWatched,
int &followers,
int &followersTotal);
void shoutouts(const QString &id);
void sendNotify(const QString &text);
void banUser(const QString &id);
void banUserTime(const QString &id, int timeMinutes);
void unbanUser(const QString &id);
void warnUser(const QString &id);
void raid(const QString &id);
void unraid();
void setModerator(const QString &id);
void delModerator(const QString &id);
void setVIP(const QString &id);
void delVIP(const QString &id);
// Custom Rewards
void getCustomRewards(QVector<TCustomReward*> &rewards, bool onlyManageable = false);
TCustomReward* createCustomReward(const QString &title,
const QString &cost,
const QString &prompt = "",
bool isUserInput = false);
void updateCustomReward(TCustomReward* reward);
void updateRedemptionStatus(TCustomRewardEvent* event);
bool deleteCustomReward(const QString &id);
// Пользователи
User getUserByLogin(const QString &login);
QDate getFollow(const QString &id);
// Эмоции и бейджи
void getGlobalChatBadges(QVector<ChatBadge> &badges); // Изменено
void getCustomChatBadges(QVector<ChatBadge> &badges); // Изменено
void getChannelEmotes(QVector<Emote*> &emotes);
void getGlobalEmotes(QVector<Emote*> &emotes);
// Валидация токена
bool validateTwitchToken(const QString &tokenName,
const QString &tokenValue,
int &daysValid);
// Вспомогательные методы
QString getRoomId();
QString getRoomAndBot();
void sendAnnouncement(const QString &message);
// Сигналы
void logMessage(int level, const QString &method, const QString &message);
private:
// HTTP методы
QString getTTW(const QString &method,
const QString &clientId,
bool isStreamer = false);
QString deleteTTW(const QString &method,
const QString &clientId,
bool isStreamer = false);
QString postTTW(const QString &method,
const QString &clientId,
const QByteArray &data,
bool isStreamer = false);
QString patchTTW(const QString &method,
const QString &clientId,
const QByteArray &data,
bool isStreamer = false);
// Вспомогательные методы
QString getFollowedAtFromJson(const QString &jsonString);
QString sendRequest(const QString &url,
const QString &method,
const QByteArray &data = QByteArray(),
const QString &token = "");
// Парсинг бейджей
void parseBadgesFromApi(const QString &jsonString, QVector<ChatBadge> &badges);
// Члены данных
QString m_tokenApi;
QString m_tokenApiStreamer;
QString m_clientId;
QString m_channelName;
QString m_botName;
void sendAnnouncementToChat(const QString &message);
QNetworkAccessManager *m_networkManager;
QString getBotId();
// Логгирование
void toLog(int level, const QString &method, const QString &message);
signals:
void apiError(const QString &method, const QString &error);
void tokenExpired(const QString &error);
void rateLimitExceeded();
};
#endif // TTW_API_H