518 lines
20 KiB
C++
518 lines
20 KiB
C++
#ifndef UGENERAL_H
|
||
#define UGENERAL_H
|
||
|
||
// ============================================================================
|
||
// ВКЛЮЧЕНИЕ ЗАГОЛОВОЧНЫХ ФАЙЛОВ
|
||
// ============================================================================
|
||
#include <QMainWindow>
|
||
#include <tauth.h>
|
||
#include <ulink.h>
|
||
#include <udatabase.h>
|
||
#include <soundmanager.h>
|
||
#include "commandprocessor.h"
|
||
#include "countermanager.h"
|
||
#include "fcreatechat.h"
|
||
#include "fcreatenotify.h"
|
||
#include "logmanager.h"
|
||
#include "neuralnetworkmanager.h"
|
||
#include "ttw_api.h"
|
||
#include "user_manager.h"
|
||
#include "webserverchat.h"
|
||
#include "webservernotify.h"
|
||
#include "websocketclient.h"
|
||
#include "userwidget.h"
|
||
#include <QTimer>
|
||
#include "emoteprovider.h"
|
||
#include "timerinfo.h"
|
||
|
||
QT_BEGIN_NAMESPACE
|
||
namespace Ui { class uGeneral; }
|
||
QT_END_NAMESPACE
|
||
|
||
// Структура для отправки сообщений
|
||
struct MessageData {
|
||
QString nickname;
|
||
QString content;
|
||
QString eventType; // Для уведомлений
|
||
QVariantMap styleSettings; // Настройки стилей
|
||
};
|
||
|
||
// ============================================================================
|
||
// КЛАСС UGeneral - ГЛАВНОЕ ОКНО ПРИЛОЖЕНИЯ
|
||
// ============================================================================
|
||
class uGeneral : public QMainWindow
|
||
{
|
||
Q_OBJECT
|
||
|
||
protected:
|
||
// Переопределение обработчика закрытия окна
|
||
void closeEvent(QCloseEvent *event) override;
|
||
|
||
public:
|
||
// Конструктор и деструктор
|
||
uGeneral(QWidget *parent = nullptr);
|
||
~uGeneral();
|
||
|
||
// ========================================================================
|
||
// СТРУКТУРЫ ДАННЫХ
|
||
// ========================================================================
|
||
|
||
// Данные для авторизации Twitch
|
||
struct TTTVAuth {
|
||
QString botName;
|
||
QString botToken;
|
||
QString strimerToken;
|
||
QString ClientID;
|
||
QString channelName;
|
||
};
|
||
|
||
// Структура для хранения пар команд (вопрос-ответ)
|
||
struct RListCommands {
|
||
QString R1;
|
||
QString R2;
|
||
RListCommands() = default;
|
||
RListCommands(const QString &r1, const QString &r2) : R1(r1), R2(r2) {}
|
||
};
|
||
|
||
|
||
// ========================================================================
|
||
// ПУБЛИЧНЫЕ ЧЛЕНЫ КЛАССА
|
||
// ========================================================================
|
||
QList<RListCommands> TCommends; // Список команд
|
||
BTTVProvider bttvProvider;
|
||
SevenTVProvider sevenTVProvider;
|
||
uDataBase *db; // Указатель на базу данных
|
||
SoundManager *soundManager; // Менеджер звуков
|
||
UserManager* getUserManager(); // Получение менеджера пользователей
|
||
TTwAPI *twitchAPI; // API для работы с Twitch
|
||
|
||
// Методы логирования и работы с командами
|
||
|
||
void toCommands(QString command, QString response);
|
||
|
||
private slots:
|
||
// ========================================================================
|
||
// СЛОТЫ ДЛЯ РАБОТЫ С ТАЙМЕРАМИ
|
||
// ========================================================================
|
||
void on_btnTimerAdd_clicked();
|
||
void on_btnTimerEdit_clicked();
|
||
void on_btnTimerDelete_clicked();
|
||
void on_btnTimerTest_clicked();
|
||
void on_sgTimers_cellClicked(int row, int column);
|
||
void on_sgTimers_cellDoubleClicked(int row, int column);
|
||
void onTimerTimeout(int timerId);
|
||
|
||
// ========================================================================
|
||
// СЛОТЫ ДЛЯ АВТОРИЗАЦИИ И НАСТРОЕК
|
||
// ========================================================================
|
||
void on_btnGetTockenBot_clicked(); // Получение токена бота
|
||
void on_btnOpenFolderSettings_clicked(); // Открытие папки настроек
|
||
void on_btnGetTokenStreamer_clicked(); // Получение токена стримера
|
||
void on_btnDAGetCode_clicked(); // Получение кода DA
|
||
|
||
// Обработчики получения токенов
|
||
void onTokenReceived(const QString &token);
|
||
void onTokenReceived2(const QString &token);
|
||
void onTokenReceived3(const QString &token);
|
||
void onAuthError(const QString &error); // Ошибка авторизации
|
||
|
||
// Работа с настройками
|
||
void loadSettings(); // Загрузка настроек
|
||
void on_btnImportSettings_clicked(); // Импорт настроек
|
||
void on_btnExportSettings_clicked(); // Экспорт настроек
|
||
|
||
// ========================================================================
|
||
// СЛОТЫ ДЛЯ РАБОТЫ С УВЕДОМЛЕНИЯМИ
|
||
// ========================================================================
|
||
void on_btnNotifyCheck_clicked(); // Проверка обычных уведомлений
|
||
void on_btnNotifyCheckMod_clicked(); // Проверка уведомлений для модераторов
|
||
void on_btnNotifyCheckVip_clicked(); // Проверка уведомлений для VIP
|
||
void on_btnNotifyCheckSub_clicked(); // Проверка уведомлений для подписчиков
|
||
|
||
void on_btnNotifyOpen_clicked(); // Открытие обычных уведомлений
|
||
void on_btnNotifyOpenMod_clicked(); // Открытие уведомлений для модераторов
|
||
void on_btnNotifyOpenVip_clicked(); // Открытие уведомлений для VIP
|
||
void on_btnNotifyOpenSub_clicked(); // Открытие уведомлений для подписчиков
|
||
|
||
// ========================================================================
|
||
// СЛОТЫ ДЛЯ РАБОТЫ С WEBSOCKET (TWITCH)
|
||
// ========================================================================
|
||
void handleNewMessage(const QString &message);
|
||
void handleError(const QString &errorMessage);
|
||
void handleConnected();
|
||
void handleDisconnected();
|
||
|
||
|
||
// ========================================================================
|
||
// СЛОТЫ ДЛЯ РАБОТЫ С ИСКУССТВЕННЫМ ИНТЕЛЛЕКТОМ
|
||
// ========================================================================
|
||
void onAIResponseReceived(const QString &response);
|
||
void onAIErrorOccurred(const QString &error);
|
||
void sendRequestToAI(const QString &q);
|
||
|
||
// ========================================================================
|
||
// СЛОТЫ ДЛЯ РАБОТЫ С TWITCH API
|
||
// ========================================================================
|
||
void onApiError(const QString &method, const QString &error);
|
||
void onTokenExpired(const QString &error);
|
||
void onRateLimit();
|
||
void initTwitchAPI();
|
||
|
||
// ========================================================================
|
||
// СЛОТЫ ДЛЯ РАБОТЫ С ИНТЕРФЕЙСОМ
|
||
// ========================================================================
|
||
// Радиокнопки выбора режима
|
||
void on_RBCustom_pressed();
|
||
void on_rbGC_clicked();
|
||
void on_rbDS_clicked();
|
||
void on_rbCG_clicked();
|
||
|
||
// Кнопки управления
|
||
void on_pushButton_2_clicked();
|
||
void on_pushButton_clicked();
|
||
|
||
// ========================================================================
|
||
// СЛОТЫ ДЛЯ РАБОТЫ С ЛОГАМИ
|
||
// ========================================================================
|
||
void onLogEntryAdded(const LogEntry& entry);
|
||
void onLogCleared();
|
||
|
||
// Добавляем методы для фильтрации
|
||
void addLogToTable(const LogEntry &entry, int row);
|
||
void applyLogFilter();
|
||
bool shouldShowLogEntry(LogLevel level); // Изменяем тип параметра
|
||
|
||
// ========================================================================
|
||
// СЛОТЫ ДЛЯ РАБОТЫ С ТАБЛИЦАМИ И ГРИДАМИ
|
||
// ========================================================================
|
||
void on_sgCommands_cellDoubleClicked(int row, int column);
|
||
void onSoundGridDoubleClicked();
|
||
void onFilesGridDoubleClicked();
|
||
void onNeiroGridDoubleClicked();
|
||
|
||
// ========================================================================
|
||
// СЛОТЫ ДЛЯ РАБОТЫ С РАНДОМНЫМИ ОТВЕТАМИ
|
||
// ========================================================================
|
||
void on_lbRandomGroup_itemClicked(QListWidgetItem *item);
|
||
void on_lbRandomGroup_doubleClicked(const QModelIndex &index);
|
||
void on_lbRandomRespons_itemDoubleClicked(QListWidgetItem *item);
|
||
|
||
void on_btnRandAdd_clicked();
|
||
void on_btnRandDel_clicked();
|
||
void on_btnRandomAdd_clicked();
|
||
void on_btnRandomDel_clicked();
|
||
void on_btnRmGroup_clicked();
|
||
|
||
void on_sgRandomInt_cellClicked(int row, int column);
|
||
void on_sgRandomInt_cellDoubleClicked(int row, int column);
|
||
|
||
// ========================================================================
|
||
// СЛОТЫ ДЛЯ РАБОТЫ С ПОЛЬЗОВАТЕЛЯМИ
|
||
// ========================================================================
|
||
void on_btnGetDateFollow_clicked();
|
||
void on_btnGetAgeAccaunt_clicked();
|
||
void on_btnRandomUserName_clicked();
|
||
|
||
// ========================================================================
|
||
// СЛОТЫ ДЛЯ РАБОТЫ С КОМАНДАМИ ЧАТА
|
||
// ========================================================================
|
||
void on_btnAddCommand_clicked();
|
||
void on_btnRmCommand_clicked();
|
||
void on_btnEdtCommand_clicked();
|
||
|
||
// ========================================================================
|
||
// СЛОТЫ ДЛЯ РАБОТЫ С КАНАЛОМ И ДОП. ФУНКЦИЯМИ
|
||
// ========================================================================
|
||
void on_btnGetChannelStat_clicked();
|
||
void on_btnGPT_clicked();
|
||
void on_btnAIPic_clicked();
|
||
|
||
// ========================================================================
|
||
// СЛОТЫ ДЛЯ РАБОТЫ С ТЕМАМИ
|
||
// ========================================================================
|
||
void on_cbTheme_currentIndexChanged(int index);
|
||
|
||
|
||
// ========================================================================
|
||
// СЛОТЫ ДЛЯ РАБОТЫ С ВЕБ СЕРВЕРАМИ
|
||
// ========================================================================
|
||
void on_btnWSCreateChat_clicked();
|
||
void on_btnWSCreateNotify_clicked();
|
||
|
||
void onChatServerUpdated(HttpServerChat *server, const QString &name);
|
||
void on_sgWebServers_cellDoubleClicked(int row, int column);
|
||
|
||
void onChatServerCreated(HttpServerChat *server, const QString &name);
|
||
void onNotifyServerCreated(HttpServer *server, const QString &name);
|
||
|
||
// Методы для внешнего добавления уведомлений и сообщений
|
||
void addNotification(const QString &nickname = "", double amount = 0, const QString &type = "donation");
|
||
QString processTwitchMessage(const TwitchMessage &msg);
|
||
QString replaceTwitchEmotes(const QString &emotesData, const QString &message);
|
||
QString replaceCustomEmotes(const QString &message);
|
||
|
||
|
||
void sendMessageToServer(HttpServerChat *server, const QString &nickname,
|
||
const QString &message);
|
||
|
||
// Обновленный метод addChatMessage
|
||
void addChatMessage(const QString &nickname,
|
||
const QString &message);
|
||
|
||
void on_www_currentChanged(int index);
|
||
|
||
void on_edtBotName_selectionChanged();
|
||
|
||
void on_edtBotName_editingFinished();
|
||
|
||
void on_edtBotToken_textEdited(const QString &arg1);
|
||
|
||
void on_edtBotToken_editingFinished();
|
||
|
||
void on_edtBotTokenStreamer_editingFinished();
|
||
|
||
void on_edtBotClientID_editingFinished();
|
||
|
||
void on_edtChannel_editingFinished();
|
||
|
||
void on_edtDAClientID_editingFinished();
|
||
|
||
void on_edtDAClientSecret_editingFinished();
|
||
|
||
void on_edtDARedirectURL_editingFinished();
|
||
|
||
void on_edtDACode_editingFinished();
|
||
|
||
void on_cbDAAutoLogin_stateChanged(int arg1);
|
||
|
||
void on_edtGPTPrefix_editingFinished();
|
||
|
||
void on_edtAIP1_editingFinished();
|
||
|
||
void on_edtAIP2_editingFinished();
|
||
|
||
void on_edtAIP3_editingFinished();
|
||
|
||
void on_edtKandiKey_editingFinished();
|
||
|
||
void on_edtKandiSecret_editingFinished();
|
||
|
||
void on_cbOllama_stateChanged(int arg1);
|
||
|
||
void on_tbNotifyVolume_valueChanged(int value);
|
||
|
||
void on_edtNotifyFileName_editingFinished();
|
||
|
||
void on_edtNotifyFileNameMod_editingFinished();
|
||
|
||
void on_edtNotifyFileNameVip_editingFinished();
|
||
|
||
void on_edtNotifyFileNameSub_editingFinished();
|
||
|
||
void on_chEnNotify_stateChanged(int arg1);
|
||
|
||
void on_chEnNotifyMod_stateChanged(int arg1);
|
||
|
||
void on_chEnNotifyVip_stateChanged(int arg1);
|
||
|
||
void on_chEnNotifySub_stateChanged(int arg1);
|
||
|
||
void on_tbNotifyVolume_sliderPressed();
|
||
|
||
void on_tbNotifyVolume_sliderReleased();
|
||
|
||
void on_tbNotifyVolumeMod_sliderReleased();
|
||
|
||
void on_tbNotifyVolumeVip_sliderReleased();
|
||
|
||
void on_tbNotifyVolumeSub_sliderReleased();
|
||
|
||
void on_cbNotifyFileAgain1_stateChanged(int arg1);
|
||
|
||
void on_cbNotifyFileAgain2_stateChanged(int arg1);
|
||
|
||
void on_cbNotifyFileAgain3_stateChanged(int arg1);
|
||
|
||
void on_btnThemesFolder_clicked();
|
||
|
||
void onNotifyServerUpdated(HttpServer *server, const QString &name);
|
||
void on_btnOpenStream_clicked();
|
||
|
||
void on_btnAUserName_clicked();
|
||
|
||
void on_btnRmWebService_clicked();
|
||
|
||
void on_sgCounters_cellClicked(int row, int column);
|
||
|
||
void on_sgCounters_cellDoubleClicked(int row, int column);
|
||
|
||
void on_btnCounterAdd_clicked();
|
||
|
||
void on_btnCounterDelete_clicked();
|
||
|
||
void on_btnCounterEdit_clicked();
|
||
|
||
void on_btnCounterAtoText_clicked();
|
||
|
||
void on_btnCRGet_clicked();
|
||
|
||
void on_sgCustomRewards_cellClicked(int row, int column);
|
||
|
||
void on_sgCustomRewards_cellDoubleClicked(int row, int column);
|
||
|
||
void on_btnCRAdd_clicked();
|
||
|
||
void on_btnCREdit_clicked();
|
||
|
||
void on_btnCRDelete_clicked();
|
||
|
||
void on_cbActions_currentIndexChanged(int index);
|
||
|
||
void on_btnOpenAudioFile_clicked();
|
||
|
||
void on_btnActionPicOpen_clicked();
|
||
|
||
void on_btnActionAudioOpen_clicked();
|
||
|
||
public slots:
|
||
// Установка статуса подключения к Twitch
|
||
void setTwitchConnected(bool connected);
|
||
|
||
private:
|
||
// ========================================================================
|
||
// ПРИВАТНЫЕ ЧЛЕНЫ КЛАССА
|
||
// ========================================================================
|
||
Ui::uGeneral *ui; // Указатель на интерфейс
|
||
// Объекты для авторизации
|
||
TAuth *m_authBot; // Авторизация бота
|
||
TAuth *m_authStreamer; // Авторизация стримера
|
||
TAuth *m_authDA; // Авторизация DA
|
||
RandomResponses *m_randomResponses;
|
||
uLink *fLinkForm; // Форма ссылок
|
||
TTTVAuth *TTVAuth; // Данные авторизации Twitch
|
||
UserManager *m_userManager; // Менеджер пользователей
|
||
CounterManager *m_counterManager;
|
||
CommandProcessor* m_commandProcessor; // Процессор команд
|
||
WebSocketClient *m_twitchClient; // WebSocket клиент для Twitch
|
||
UserWidget* m_userWidget; // Виджет пользователя
|
||
NeuralNetworkManager *nnManager; // Менеджер нейронных сетей
|
||
RandomManager *m_randomManager;
|
||
MediaFileManager *m_SoundFiles;
|
||
MediaFileManager *m_TextFiles;
|
||
NeuralTemplateManager *m_neuralTemplateManager;
|
||
QList<TimerInfo> m_timers; // Список таймеров
|
||
int m_nextTimerId = 1; // Следующий ID таймера
|
||
bool m_isTwitchConnected = false; // Статус подключения к Twitch
|
||
QVector<TCustomReward*> m_rewards;
|
||
// Менеджеры веб-серверов
|
||
QList<HttpServer*> m_notificationServers;
|
||
QList<HttpServerChat*> m_chatServers;
|
||
|
||
// Для связи с окнами создания
|
||
FCreateNotify *m_createNotifyDialog;
|
||
FCreateChat *m_createChatDialog;
|
||
QVector<ChatBadge> m_chatBadges;
|
||
// Методы для обработки бейджей и форматирования ника
|
||
QString formatNicknameWithBadges(const TwitchMessage &msg);
|
||
QString getBadgesHTML(const TwitchMessage &msg);
|
||
QString getBadgeUrl(const QString &setId, int versionId);
|
||
QVector<QIcon> tabIcons;
|
||
// Структура для замены эмодзи
|
||
struct EmoteReplacement {
|
||
int start;
|
||
int length;
|
||
QString html;
|
||
};
|
||
|
||
// Добавление серверов в списки и таблицу
|
||
void addNotificationServer(HttpServer *server, const QString &name);
|
||
void addChatServer(HttpServerChat *server, const QString &name);
|
||
void addServerToTable(const QString &name, const QString &type, quint16 port,
|
||
const QString &url, QObject *serverObj);
|
||
|
||
// Вспомогательные методы
|
||
int findNotificationServerRow(HttpServer *server);
|
||
int findChatServerRow(HttpServerChat *server);
|
||
QString generateServerId() const;
|
||
void setupCountersTable();
|
||
void updateCountersTable();
|
||
// Текущие настройки для формы
|
||
QVariantMap m_currentSettings;
|
||
|
||
// ========================================================================
|
||
// ПРИВАТНЫЕ МЕТОДЫ
|
||
// ========================================================================
|
||
|
||
// Метод для загрузки списка QSS файлов
|
||
void loadQssFiles();
|
||
// Метод для применения QSS темы
|
||
void applyStyleSheet(const QString &filename);
|
||
|
||
|
||
QString getUserDataPath() const;
|
||
QString getSystemPath() const;
|
||
void setupButtonIcons();
|
||
void loadStylesFromDirectory(const QDir &stylesDir, const QString &category);
|
||
void copyDefaultFiles();
|
||
void initializeAppDataStructure();
|
||
|
||
// Настройка OAuth для Twitch
|
||
void setupTwitchOAuth();
|
||
|
||
// Инициализация конфигурации ИИ
|
||
void initAIConfig();
|
||
void updateAIConfig();
|
||
QString processAITag(const QString &input, const QString &sender);
|
||
|
||
// Работа с таймерами
|
||
void updateTimerTable();
|
||
void startTimer(TimerInfo& timerInfo);
|
||
void stopTimer(TimerInfo& timerInfo);
|
||
void sendTimedMessage(const TimerInfo& timerInfo);
|
||
|
||
// Воспроизведение уведомлений
|
||
void playNotify(const bool &isMod, const bool &isVip, const bool &isSub);
|
||
|
||
void loadCommandsFromTableWidget();
|
||
void loadRandomRangesFromTableWidget();
|
||
void loadRandomResponseGroupsFromDatabase();
|
||
void loadSoundsFromDatabase();
|
||
void loadTextFromDatabase();
|
||
void loadTemplatesFromDatabase();
|
||
void initializeDatabase();
|
||
// Настройка пользовательского интерфейса
|
||
void setupUI();
|
||
// Настройка таблиц интерфейса
|
||
void setupTables();
|
||
// Инициализация менеджеров
|
||
void initializeManagers();
|
||
// Настройка компонентов Twitch
|
||
void setupTwitchComponents();
|
||
// Настройка виджета пользователей
|
||
void setupUserWidget();
|
||
// Настройка обработчиков авторизации
|
||
void setupAuthHandlers();
|
||
// Загрузка эмодзи
|
||
void loadEmoties();
|
||
void loadChatBadges();
|
||
void disconnectFromTwitch();
|
||
void connectToTwitch();
|
||
/**
|
||
* @brief Инициализирует звуковые уведомления
|
||
*/
|
||
void initializeNotificationSounds();
|
||
|
||
// Обработка эмодзи
|
||
void processEmotes(QString &message);
|
||
|
||
void loadSavedChats();
|
||
void loadSavedNotifications();
|
||
void loadNeuralTemplatesFromTableWidget();
|
||
void processUserCommand(const QString &username, const QString &commandText);
|
||
void sendChatResponse(const QString &response);
|
||
|
||
QString cleanMessageFromAllEmotes(const QString& message) const;
|
||
};
|
||
|
||
#endif // UGENERAL_H
|