feat: Hide messages from suspicious users in streamer mode (#6042)
This is a setting that's enabled by default and can be disabled under the "Streamer mode" sub-category in the settings dialog
This commit is contained in:
@@ -18,6 +18,7 @@
|
|||||||
- Minor: Overlay windows now inherit the global zoom level and can be zoomed independently. (#6016)
|
- Minor: Overlay windows now inherit the global zoom level and can be zoomed independently. (#6016)
|
||||||
- Minor: The `/watching` channel is now supported on all platforms. (#6031)
|
- Minor: The `/watching` channel is now supported on all platforms. (#6031)
|
||||||
- Minor: The font weight of chat messages can now be changed. (#6037)
|
- Minor: The font weight of chat messages can now be changed. (#6037)
|
||||||
|
- Minor: Messages from suspicious users can now be hidden when in streamer mode. This is enabled by default. (#6042)
|
||||||
- Bugfix: Fixed a potential way to escape the Lua Plugin sandbox. (#5846)
|
- Bugfix: Fixed a potential way to escape the Lua Plugin sandbox. (#5846)
|
||||||
- Bugfix: Fixed a crash relating to Lua HTTP. (#5800)
|
- Bugfix: Fixed a crash relating to Lua HTTP. (#5800)
|
||||||
- Bugfix: Fixed a crash that could occur on Linux and macOS when clicking "Install" from the update prompt. (#5818)
|
- Bugfix: Fixed a crash that could occur on Linux and macOS when clicking "Install" from the update prompt. (#5818)
|
||||||
|
|||||||
@@ -15,6 +15,11 @@ public:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool shouldHideSuspiciousUsers() const override
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void start() override
|
void start() override
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -166,6 +166,17 @@ void MessageLayout::actuallyLayout(const MessageLayoutContext &ctx)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this->message_->flags.hasAny(MessageFlag::RestrictedMessage,
|
||||||
|
MessageFlag::MonitoredMessage))
|
||||||
|
{
|
||||||
|
if (getApp()->getStreamerMode()->shouldHideSuspiciousUsers())
|
||||||
|
{
|
||||||
|
// Message is being hidden because the source is a
|
||||||
|
// restricted or monitored user
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (this->message_->flags.has(MessageFlag::ModerationAction))
|
if (this->message_->flags.has(MessageFlag::ModerationAction))
|
||||||
{
|
{
|
||||||
if (hideModerationActions ||
|
if (hideModerationActions ||
|
||||||
|
|||||||
@@ -704,10 +704,12 @@ MessagePtr makeSuspiciousUserMessageHeader(
|
|||||||
if (event.lowTrustStatus == lib::suspicious_users::Status::Restricted)
|
if (event.lowTrustStatus == lib::suspicious_users::Status::Restricted)
|
||||||
{
|
{
|
||||||
headerMessage = u"Restricted"_s;
|
headerMessage = u"Restricted"_s;
|
||||||
|
builder->flags.set(MessageFlag::RestrictedMessage);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
headerMessage = u"Monitored"_s;
|
headerMessage = u"Monitored"_s;
|
||||||
|
builder->flags.set(MessageFlag::MonitoredMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto hasType = [&](lib::suspicious_users::Type type) {
|
auto hasType = [&](lib::suspicious_users::Type type) {
|
||||||
|
|||||||
@@ -346,6 +346,12 @@ public:
|
|||||||
BoolSetting lowercaseDomains = {"/links/linkLowercase", true};
|
BoolSetting lowercaseDomains = {"/links/linkLowercase", true};
|
||||||
|
|
||||||
/// Streamer Mode
|
/// Streamer Mode
|
||||||
|
// TODO: Should these settings be converted to booleans that live outside of
|
||||||
|
// streamer mode?
|
||||||
|
// Something like:
|
||||||
|
// - "Hide when streamer mode is enabled"
|
||||||
|
// - "Always hide"
|
||||||
|
// - "Don't hide"
|
||||||
EnumSetting<StreamerModeSetting> enableStreamerMode = {
|
EnumSetting<StreamerModeSetting> enableStreamerMode = {
|
||||||
"/streamerMode/enabled", StreamerModeSetting::DetectStreamingSoftware};
|
"/streamerMode/enabled", StreamerModeSetting::DetectStreamingSoftware};
|
||||||
BoolSetting streamerModeHideUsercardAvatars = {
|
BoolSetting streamerModeHideUsercardAvatars = {
|
||||||
@@ -356,6 +362,10 @@ public:
|
|||||||
"/streamerMode/hideViewerCountAndDuration", false};
|
"/streamerMode/hideViewerCountAndDuration", false};
|
||||||
BoolSetting streamerModeHideModActions = {"/streamerMode/hideModActions",
|
BoolSetting streamerModeHideModActions = {"/streamerMode/hideModActions",
|
||||||
true};
|
true};
|
||||||
|
BoolSetting streamerModeHideSuspiciousUsers = {
|
||||||
|
"/streamerMode/hideSuspiciousUsers",
|
||||||
|
true,
|
||||||
|
};
|
||||||
BoolSetting streamerModeMuteMentions = {"/streamerMode/muteMentions", true};
|
BoolSetting streamerModeMuteMentions = {"/streamerMode/muteMentions", true};
|
||||||
BoolSetting streamerModeSuppressLiveNotifications = {
|
BoolSetting streamerModeSuppressLiveNotifications = {
|
||||||
"/streamerMode/supressLiveNotifications", false};
|
"/streamerMode/supressLiveNotifications", false};
|
||||||
|
|||||||
@@ -207,6 +207,11 @@ bool StreamerMode::shouldHideModActions() const
|
|||||||
return getSettings()->streamerModeHideModActions && this->isEnabled();
|
return getSettings()->streamerModeHideModActions && this->isEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool StreamerMode::shouldHideSuspiciousUsers() const
|
||||||
|
{
|
||||||
|
return getSettings()->streamerModeHideSuspiciousUsers && this->isEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
void StreamerMode::start()
|
void StreamerMode::start()
|
||||||
{
|
{
|
||||||
this->private_->start();
|
this->private_->start();
|
||||||
|
|||||||
@@ -23,6 +23,9 @@ public:
|
|||||||
/// Returns true if streamer mode is enabled & the settings to hide mod actions is enabled
|
/// Returns true if streamer mode is enabled & the settings to hide mod actions is enabled
|
||||||
[[nodiscard]] virtual bool shouldHideModActions() const = 0;
|
[[nodiscard]] virtual bool shouldHideModActions() const = 0;
|
||||||
|
|
||||||
|
/// Returns true if streamer mode is enabled & the settings to hide messages from suspicious users is enabled
|
||||||
|
[[nodiscard]] virtual bool shouldHideSuspiciousUsers() const = 0;
|
||||||
|
|
||||||
virtual void start() = 0;
|
virtual void start() = 0;
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
@@ -43,6 +46,7 @@ public:
|
|||||||
bool isEnabled() const override;
|
bool isEnabled() const override;
|
||||||
|
|
||||||
bool shouldHideModActions() const override;
|
bool shouldHideModActions() const override;
|
||||||
|
bool shouldHideSuspiciousUsers() const override;
|
||||||
|
|
||||||
void start() override;
|
void start() override;
|
||||||
|
|
||||||
|
|||||||
@@ -147,6 +147,8 @@ WindowManager::WindowManager(const Paths &paths, Settings &settings,
|
|||||||
this->forceLayoutChannelViewsListener.add(settings.hideModerated);
|
this->forceLayoutChannelViewsListener.add(settings.hideModerated);
|
||||||
this->forceLayoutChannelViewsListener.add(
|
this->forceLayoutChannelViewsListener.add(
|
||||||
settings.streamerModeHideModActions);
|
settings.streamerModeHideModActions);
|
||||||
|
this->forceLayoutChannelViewsListener.add(
|
||||||
|
settings.streamerModeHideSuspiciousUsers);
|
||||||
|
|
||||||
this->layoutChannelViewsListener.add(settings.timestampFormat);
|
this->layoutChannelViewsListener.add(settings.timestampFormat);
|
||||||
this->layoutChannelViewsListener.add(fonts.fontChanged);
|
this->layoutChannelViewsListener.add(fonts.fontChanged);
|
||||||
|
|||||||
@@ -732,6 +732,13 @@ void GeneralPage::initLayout(GeneralPageView &layout)
|
|||||||
layout.addCheckbox(
|
layout.addCheckbox(
|
||||||
"Hide moderation actions", s.streamerModeHideModActions, false,
|
"Hide moderation actions", s.streamerModeHideModActions, false,
|
||||||
"Hide bans, timeouts, and automod messages from appearing in chat.");
|
"Hide bans, timeouts, and automod messages from appearing in chat.");
|
||||||
|
|
||||||
|
SettingWidget::checkbox("Hide messages from suspicious users",
|
||||||
|
s.streamerModeHideSuspiciousUsers)
|
||||||
|
->setTooltip("Suspicious users are users who are marked as either "
|
||||||
|
"restricted or monitored by you or Twitch's AutoMod")
|
||||||
|
->addTo(layout);
|
||||||
|
|
||||||
layout.addCheckbox(
|
layout.addCheckbox(
|
||||||
"Hide blocked terms", s.streamerModeHideBlockedTermText, false,
|
"Hide blocked terms", s.streamerModeHideBlockedTermText, false,
|
||||||
"Hide blocked terms from showing up in places like AutoMod messages. "
|
"Hide blocked terms from showing up in places like AutoMod messages. "
|
||||||
|
|||||||
@@ -88,7 +88,7 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"flags": "LowTrustUsers|EventSub",
|
"flags": "LowTrustUsers|RestrictedMessage|EventSub",
|
||||||
"id": "",
|
"id": "",
|
||||||
"localizedName": "",
|
"localizedName": "",
|
||||||
"loginName": "",
|
"loginName": "",
|
||||||
|
|||||||
@@ -85,7 +85,7 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"flags": "LowTrustUsers|EventSub",
|
"flags": "LowTrustUsers|RestrictedMessage|EventSub",
|
||||||
"id": "",
|
"id": "",
|
||||||
"localizedName": "",
|
"localizedName": "",
|
||||||
"loginName": "",
|
"loginName": "",
|
||||||
|
|||||||
Reference in New Issue
Block a user