добавил обработку счетчиков

This commit is contained in:
2026-02-14 11:26:45 +03:00
parent 5f53bdcf96
commit 63b7fa4ea1
12 changed files with 796 additions and 131 deletions
+51
View File
@@ -4,6 +4,8 @@
#include <QJsonArray>
#include <QJsonObject>
#include <QJsonValue>
#include <QRegularExpression>
#include <QSet>
// EmoteProvider implementation
EmoteProvider::EmoteProvider(QObject *parent)
@@ -416,3 +418,52 @@ void SevenTVProvider::parseCustomResponse(const QByteArray &data, const QString
QString("Loaded %1 custom emotes for user %2").arg(m_emotes.size()).arg(userId),
LOG_INFO);
}
QString BTTVProvider::cleanMessage(const QString& message) const
{
if (m_emotes.isEmpty())
return message;
// Собираем все коды эмоций в множество для быстрого поиска
QSet<QString> codes;
for (const BTTVEmote& emote : m_emotes) {
codes.insert(emote.code);
}
// Разбиваем сообщение на токены (слова и не-слова)
QRegularExpression wordSplitter("(\\w+|[^\\w]+)");
QRegularExpressionMatchIterator it = wordSplitter.globalMatch(message);
QStringList parts;
while (it.hasNext()) {
QRegularExpressionMatch match = it.next();
QString token = match.captured(0);
// Если токен состоит только из букв/цифр и является кодом эмоции – пропускаем
if (token[0].isLetterOrNumber() && codes.contains(token))
continue;
parts.append(token);
}
return parts.join("");
}
QString SevenTVProvider::cleanMessage(const QString& message) const
{
if (m_emotes.isEmpty())
return message;
QSet<QString> codes;
for (const SevenTVEmote& emote : m_emotes) {
codes.insert(emote.code);
}
QRegularExpression wordSplitter("(\\w+|[^\\w]+)");
QRegularExpressionMatchIterator it = wordSplitter.globalMatch(message);
QStringList parts;
while (it.hasNext()) {
QRegularExpressionMatch match = it.next();
QString token = match.captured(0);
if (token[0].isLetterOrNumber() && codes.contains(token))
continue;
parts.append(token);
}
return parts.join("");
}