Files
TTW_Bot/ugeneral.h
T
PTyTb 39f0c447c1 добавил обновление списков в реальном времени
исправил поиск пользователя
убрал лишние qDebug
2026-02-09 22:24:24 +03:00

484 lines
20 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#ifndef UGENERAL_H
#define UGENERAL_H
// ============================================================================
// ВКЛЮЧЕНИЕ ЗАГОЛОВОЧНЫХ ФАЙЛОВ
// ============================================================================
#include <QMainWindow>
#include <tauth.h>
#include <ulink.h>
#include <udatabase.h>
#include <soundmanager.h>
#include "commandprocessor.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 execCommand(const QString &sender, const QString &message);
// ========================================================================
// СЛОТЫ ДЛЯ РАБОТЫ С ИСКУССТВЕННЫМ ИНТЕЛЛЕКТОМ
// ========================================================================
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();
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; // Менеджер пользователей
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
// Менеджеры веб-серверов
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;
// Текущие настройки для формы
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();
/**
* @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);
};
#endif // UGENERAL_H