From 1d3131ea8ce4ef55209845808fe4058ac02e2344 Mon Sep 17 00:00:00 2001 From: PTyTb Date: Wed, 11 Feb 2026 07:00:15 +0300 Subject: [PATCH] =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B2=D0=B5=D0=B1=20=D1=81=D0=B5=D1=80=D0=B2=D0=B8?= =?UTF-8?q?=D1=81=D0=BE=D0=B2,=20=D0=B0=D0=B2=D1=82=D0=BE=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F,=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B6=D0=B0=D0=BD=D0=B8=D0=B5=20=D1=81=D1=80=D0=BE=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=B6=D0=B8=D0=B7=D0=BD=D0=B8=20=D1=82=D0=BE=D0=BA?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ugeneral.cpp | 184 ++++++++++++++++++++++++++++++++++++++++++++++----- ugeneral.h | 5 +- ugeneral.ui | 55 ++++++++++++++- 3 files changed, 225 insertions(+), 19 deletions(-) diff --git a/ugeneral.cpp b/ugeneral.cpp index 12f8bbd..1910e5d 100644 --- a/ugeneral.cpp +++ b/ugeneral.cpp @@ -1584,7 +1584,7 @@ void uGeneral::on_btnGetTockenBot_clicked() fLinkForm = new uLink(this); } - // Устанавливаем ссылку в окно (предполагается, что в uLink есть метод setLink) + // Устанавливаем ссылку в окно fLinkForm->setLinkText(authUrl); fLinkForm->show(); @@ -1604,7 +1604,6 @@ void uGeneral::on_btnOpenFolderSettings_clicked() void uGeneral::on_btnGetTokenStreamer_clicked() { -//ykui0quht3tvr06vfqhdj5idmhginn QString clientId = ui->edtBotClientID->text(); if (clientId.isEmpty()) { QMessageBox::warning(this, "Ошибка", "Введите Client ID"); @@ -1630,24 +1629,36 @@ void uGeneral::on_btnGetTokenStreamer_clicked() // Запускаем сервер с открытием браузера (true) m_authStreamer->startServer(authUrl, true); - } // Обработчик получения токена void uGeneral::onTokenReceived(const QString &token) { ui->edtBotToken->setText(token); + + // Закрываем окно с ссылкой, если оно открыто + if (fLinkForm && fLinkForm->isVisible()) { + fLinkForm->close(); + } + + // Сохраняем настройки + db->writeSetting(ui->edtBotToken->objectName(), ui->edtBotToken->text()); } void uGeneral::onTokenReceived2(const QString &token) { ui->edtBotTokenStreamer->setText(token); - fLinkForm->close(); + + // Сохраняем настройки + db->writeSetting(ui->edtBotTokenStreamer->objectName(), ui->edtBotTokenStreamer->text()); } void uGeneral::onTokenReceived3(const QString &token) { ui->edtDACode->setText(token); + + // Сохраняем настройки + db->writeSetting(ui->edtDACode->objectName(), ui->edtDACode->text()); } void uGeneral::onAuthError(const QString &error) @@ -2199,22 +2210,59 @@ QString uGeneral::replaceCustomEmotes(const QString &message) void uGeneral::on_pushButton_2_clicked() { - if (ui->pushButton_2->text() != "Отключиться") + // Если кнопка в состоянии "Отключиться" + if (ui->pushButton_2->text() == "Отключиться") { - QString oauthToken = "oauth:" + ui->edtBotToken->text(); - QString nickname = ui->edtBotName->text(); - QString channel = ui->edtChannel->text(); - m_twitchClient->connectToTwitchChat(oauthToken, nickname, channel); - ui->pushButton_2->setText("Отключиться"); - } - else - { - m_twitchClient->disconnectFromServer(); - m_userManager->clear(); - ui->pushButton_2->setText("Подключиться"); - setTwitchConnected(false); + disconnectFromTwitch(); + return; } + // Попытка подключения + connectToTwitch(); +} + +void uGeneral::connectToTwitch() +{ + int botTokenDays = 0; + int streamerTokenDays = 0; + + QString botToken = ui->edtBotToken->text(); + QString streamerToken = ui->edtBotTokenStreamer->text(); + + // Проверка токенов + if (!twitchAPI->validateTwitchToken("Бот", botToken, botTokenDays)) + { + + return; + } + + if (!twitchAPI->validateTwitchToken("Стример", streamerToken, streamerTokenDays)) + { + + return; + } + + // Подключение к чату Twitch + QString oauthToken = "oauth:" + botToken; + QString nickname = ui->edtBotName->text(); + QString channel = ui->edtChannel->text(); + + if (m_twitchClient->connectToTwitchChat(oauthToken, nickname, channel)) + { + // Успешное подключение + ui->pushButton_2->setText("Отключиться"); + ui->lbBotDays->setText(QString::number(botTokenDays)); + ui->lbStreamerDays->setText(QString::number(streamerTokenDays)); + setTwitchConnected(true); + } +} + +void uGeneral::disconnectFromTwitch() +{ + m_twitchClient->disconnectFromServer(); + m_userManager->clear(); + ui->pushButton_2->setText("Подключиться"); + setTwitchConnected(false); } @@ -3372,3 +3420,105 @@ void uGeneral::on_btnAUserName_clicked() cursor.insertText("[USERNAME]"); } + +void uGeneral::on_btnRmWebService_clicked() +{ + // Проверяем, выбрана ли строка в таблице + int currentRow = ui->sgWebServers->currentRow(); + if (currentRow < 0) { + QMessageBox::warning(this, "Ошибка", "Выберите веб-сервис для удаления!"); + return; + } + + // Получаем данные из таблицы + QTableWidgetItem *nameItem = ui->sgWebServers->item(currentRow, 0); + QTableWidgetItem *typeItem = ui->sgWebServers->item(currentRow, 1); + QTableWidgetItem *portItem = ui->sgWebServers->item(currentRow, 2); + + if (!nameItem || !typeItem || !portItem) { + QMessageBox::warning(this, "Ошибка", "Не удалось получить данные о сервисе!"); + return; + } + + QString serviceName = nameItem->text(); + QString serviceType = typeItem->text(); + quint16 port = portItem->text().toUShort(); + + // Подтверждение удаления + int result = QMessageBox::question(this, "Подтверждение удаления", + QString("Вы уверены, что хотите удалить сервис '%1'?\n" + "Тип: %2\n" + "Порт: %3").arg(serviceName, serviceType, QString::number(port)), + QMessageBox::Yes | QMessageBox::No); + + if (result != QMessageBox::Yes) { + return; + } + + // Получаем объект сервера из userData + QObject *serverObj = nameItem->data(Qt::UserRole).value(); + + bool deletedFromDB = false; + + // Удаляем сервер в зависимости от типа + if (serviceType.toLower() == "чат" || serviceType.toLower() == "chat") { + // Обрабатываем чат-сервер + HttpServerChat *chatServer = qobject_cast(serverObj); + if (chatServer) { + // Останавливаем сервер + chatServer->stop(); + + // Удаляем из списка + int chatIndex = m_chatServers.indexOf(chatServer); + if (chatIndex >= 0) { + m_chatServers.removeAt(chatIndex); + } + + // Удаляем из базы данных + deletedFromDB = db->deleteChat(port); + + // Удаляем объект + delete chatServer; + } + } + else if (serviceType.toLower() == "уведомления" || serviceType.toLower() == "notification") { + // Обрабатываем сервер уведомлений + HttpServer *notifyServer = qobject_cast(serverObj); + if (notifyServer) { + // Останавливаем сервер + notifyServer->stop(); + + // Удаляем из списка + int notifyIndex = m_notificationServers.indexOf(notifyServer); + if (notifyIndex >= 0) { + m_notificationServers.removeAt(notifyIndex); + } + + // Удаляем из базы данных + deletedFromDB = db->deleteNotification(port); + + // Удаляем объект + delete notifyServer; + } + } + + // Удаляем строку из таблицы + ui->sgWebServers->removeRow(currentRow); + + // Логируем результат + if (deletedFromDB) { + LogManager::instance()->info("uGeneral", "on_btnRmWebService_clicked", + QString("Удален веб-сервис: %1 (тип: %2, порт: %3)") + .arg(serviceName, serviceType, QString::number(port))); + QMessageBox::information(this, "Успех", + QString("Сервис '%1' успешно удален!").arg(serviceName)); + } else { + LogManager::instance()->warning("uGeneral", "on_btnRmWebService_clicked", + QString("Сервис удален из интерфейса, но возникли проблемы с БД: %1") + .arg(serviceName)); + QMessageBox::warning(this, "Внимание", + QString("Сервис '%1' удален из интерфейса, но не удалось удалить его из базы данных!") + .arg(serviceName)); + } +} + diff --git a/ugeneral.h b/ugeneral.h index 702dbff..6fcca96 100644 --- a/ugeneral.h +++ b/ugeneral.h @@ -344,6 +344,8 @@ private slots: void on_btnAUserName_clicked(); + void on_btnRmWebService_clicked(); + public slots: // Установка статуса подключения к Twitch void setTwitchConnected(bool connected); @@ -464,7 +466,8 @@ private: // Загрузка эмодзи void loadEmoties(); void loadChatBadges(); - + void disconnectFromTwitch(); + void connectToTwitch(); /** * @brief Инициализирует звуковые уведомления */ diff --git a/ugeneral.ui b/ugeneral.ui index 752a4b2..0482d7e 100644 --- a/ugeneral.ui +++ b/ugeneral.ui @@ -36,7 +36,7 @@ Qt::LeftToRight - 2 + 4 false @@ -1273,6 +1273,19 @@ + + + + 10 + 350 + 101 + 24 + + + + Удалить + + @@ -1833,6 +1846,46 @@ ... + + + + 770 + 730 + 231 + 61 + + + + + + + Осталось дней токена стримера + + + + + + + Осталось дней токена бота + + + + + + + 0 + + + + + + + 0 + + + + +