Files
chatterino2/src/messages/search/MessageFlagsPredicate.cpp
iProdigy 693d4f401d feat: add badges, emotes, and filters for suspicious messages (#5060)
* feat: show chat badges on suspicious user messages

* feat: display emotes in suspicious user messages

* feat: add search filters for suspicious messages

* chore: update changelog

* refactor: resolve initial nits

* fix: finish adding new filter identifier

* Comment the new message flags

* Add a list of known issues to low trust update messages

* fix: Keep shared-pointerness of the channel

Without this change, we would have the possibility of using the
TwitchChannel after the Channel itself has gone out of scope, albeit not
realistically since we just post this to a thread and parse it - there's
no networking or big delays involved. but this shows the intent better

---------

Co-authored-by: Rasmus Karlsson <rasmus.karlsson@pajlada.com>
2024-01-06 13:22:00 +00:00

79 lines
2.3 KiB
C++

#include "messages/search/MessageFlagsPredicate.hpp"
#include "util/Qt.hpp"
namespace chatterino {
MessageFlagsPredicate::MessageFlagsPredicate(const QString &flags, bool negate)
: MessagePredicate(negate)
, flags_()
{
// Check if any comma-seperated values were passed and transform those
for (const auto &flag : flags.split(',', Qt::SkipEmptyParts))
{
if (flag == "deleted" || flag == "disabled")
{
this->flags_.set(MessageFlag::Disabled);
}
else if (flag == "sub" || flag == "subscription")
{
this->flags_.set(MessageFlag::Subscription);
}
else if (flag == "timeout" || flag == "ban")
{
this->flags_.set(MessageFlag::Timeout);
}
else if (flag == "highlighted")
{
this->flags_.set(MessageFlag::Highlighted);
}
else if (flag == "system")
{
this->flags_.set(MessageFlag::System);
}
else if (flag == "first-msg")
{
this->flags_.set(MessageFlag::FirstMessage);
}
else if (flag == "elevated-msg" || flag == "hype-chat")
{
this->flags_.set(MessageFlag::ElevatedMessage);
}
else if (flag == "cheer-msg")
{
this->flags_.set(MessageFlag::CheerMessage);
}
else if (flag == "redemption")
{
this->flags_.set(MessageFlag::RedeemedChannelPointReward);
this->flags_.set(MessageFlag::RedeemedHighlight);
}
else if (flag == "reply")
{
this->flags_.set(MessageFlag::ReplyMessage);
}
else if (flag == "restricted")
{
this->flags_.set(MessageFlag::RestrictedMessage);
}
else if (flag == "monitored")
{
this->flags_.set(MessageFlag::MonitoredMessage);
}
}
}
bool MessageFlagsPredicate::appliesToImpl(const Message &message)
{
// Exclude timeout messages from system flag when timeout flag isn't present
if (this->flags_.has(MessageFlag::System) &&
!this->flags_.has(MessageFlag::Timeout))
{
return message.flags.hasAny(flags_) &&
!message.flags.has(MessageFlag::Timeout);
}
return message.flags.hasAny(flags_);
}
} // namespace chatterino