104 lines
2.9 KiB
C++
104 lines
2.9 KiB
C++
#include "RandomResponses.h"
|
|
#include <QDebug>
|
|
|
|
RandomResponses::RandomResponses(QObject *parent)
|
|
: QObject(parent)
|
|
, m_randomGenerator(QRandomGenerator::global()->generate())
|
|
{
|
|
}
|
|
|
|
QString RandomResponses::getResponse(const QString &groupName)
|
|
{
|
|
// Проверяем существование группы
|
|
if (!m_groups.contains(groupName)) {
|
|
qWarning() << "Группа" << groupName << "не найдена";
|
|
return QString();
|
|
}
|
|
|
|
const ResponseGroup &group = m_groups[groupName];
|
|
|
|
// Проверяем наличие ответов в группе
|
|
if (group.responses.isEmpty()) {
|
|
qWarning() << "Группа" << groupName << "не содержит ответов";
|
|
return QString();
|
|
}
|
|
|
|
// Генерируем случайный индекс
|
|
int randomIndex = m_randomGenerator.bounded(group.responses.size());
|
|
|
|
// Возвращаем случайный ответ
|
|
return group.responses.at(randomIndex);
|
|
}
|
|
|
|
bool RandomResponses::addResponse(const QString &groupName, const QString &response)
|
|
{
|
|
if (response.isEmpty()) {
|
|
qWarning() << "Пустой ответ не может быть добавлен";
|
|
return false;
|
|
}
|
|
|
|
// Если группа существует, добавляем ответ в существующую
|
|
if (m_groups.contains(groupName)) {
|
|
m_groups[groupName].responses.append(response);
|
|
}
|
|
// Иначе создаем новую группу
|
|
else {
|
|
ResponseGroup newGroup;
|
|
newGroup.name = groupName;
|
|
newGroup.responses.append(response);
|
|
m_groups.insert(groupName, newGroup);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool RandomResponses::removeResponse(const QString &groupName, const QString &response)
|
|
{
|
|
// Проверяем существование группы
|
|
if (!m_groups.contains(groupName)) {
|
|
qWarning() << "Группа" << groupName << "не найдена";
|
|
return false;
|
|
}
|
|
|
|
ResponseGroup &group = m_groups[groupName];
|
|
|
|
// Удаляем все вхождения ответа
|
|
int removedCount = group.responses.removeAll(response);
|
|
|
|
// Если группа стала пустой, удаляем ее
|
|
if (group.responses.isEmpty()) {
|
|
m_groups.remove(groupName);
|
|
}
|
|
|
|
return removedCount > 0;
|
|
}
|
|
|
|
bool RandomResponses::removeGroup(const QString &groupName)
|
|
{
|
|
return m_groups.remove(groupName) > 0;
|
|
}
|
|
|
|
QStringList RandomResponses::getGroupNames() const
|
|
{
|
|
return m_groups.keys();
|
|
}
|
|
|
|
QStringList RandomResponses::getGroupResponses(const QString &groupName) const
|
|
{
|
|
if (m_groups.contains(groupName)) {
|
|
return m_groups[groupName].responses;
|
|
}
|
|
|
|
return QStringList();
|
|
}
|
|
|
|
bool RandomResponses::hasGroup(const QString &groupName) const
|
|
{
|
|
return m_groups.contains(groupName);
|
|
}
|
|
|
|
void RandomResponses::clear()
|
|
{
|
|
m_groups.clear();
|
|
}
|