Check for ignored phrases/users in channel point redemptions (#3102)

This commit is contained in:
pajlada
2021-08-01 15:44:04 +02:00
committed by GitHub
parent 77f683577f
commit 784fdd28b2
9 changed files with 108 additions and 56 deletions
@@ -0,0 +1,63 @@
#include "controllers/ignores/IgnoreController.hpp"
#include "common/QLogging.hpp"
#include "controllers/ignores/IgnorePhrase.hpp"
#include "singletons/Settings.hpp"
namespace chatterino {
bool isIgnoredMessage(IgnoredMessageParameters &&params)
{
if (!params.message.isEmpty())
{
// TODO(pajlada): Do we need to check if the phrase is valid first?
auto phrases = getCSettings().ignoredMessages.readOnly();
for (const auto &phrase : *phrases)
{
if (phrase.isBlock() && phrase.isMatch(params.message))
{
qCDebug(chatterinoMessage)
<< "Blocking message because it contains ignored phrase"
<< phrase.getPattern();
return true;
}
}
}
if (!params.twitchUserID.isEmpty() &&
getSettings()->enableTwitchBlockedUsers)
{
auto sourceUserID = params.twitchUserID;
auto blocks =
getApp()->accounts->twitch.getCurrent()->accessBlockedUserIds();
if (auto it = blocks->find(sourceUserID); it != blocks->end())
{
switch (static_cast<ShowIgnoredUsersMessages>(
getSettings()->showBlockedUsersMessages.getValue()))
{
case ShowIgnoredUsersMessages::IfModerator:
if (params.isMod || params.isBroadcaster)
{
return false;
}
break;
case ShowIgnoredUsersMessages::IfBroadcaster:
if (params.isBroadcaster)
{
return false;
}
break;
case ShowIgnoredUsersMessages::Never:
break;
}
return true;
}
}
return false;
}
} // namespace chatterino
@@ -1,7 +1,19 @@
#pragma once
#include <QString>
namespace chatterino {
enum class ShowIgnoredUsersMessages { Never, IfModerator, IfBroadcaster };
struct IgnoredMessageParameters {
QString message;
QString twitchUserID;
bool isMod;
bool isBroadcaster;
};
bool isIgnoredMessage(IgnoredMessageParameters &&params);
} // namespace chatterino