TTW_Bot/randomresponses.cpp

104 lines
2.9 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.

#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();
}