the-algorithm/visibilitylib/src/main/scala/com/twitter/visibility/rules/VisibilityPolicy.scala

3819 lines
149 KiB
Scala

package com.twitter.visibility.rules
import com.twitter.visibility.configapi.params.RuleParam
import com.twitter.visibility.configapi.params.RuleParams
import com.twitter.visibility.models.ContentId
import com.twitter.visibility.rules.ConversationControlRules._
import com.twitter.visibility.rules.FollowerRelations.AuthorMutesViewerRule
import com.twitter.visibility.rules.FollowerRelations.ProtectedViewerRule
import com.twitter.visibility.rules.PolicyLevelRuleParams.ruleParams
import com.twitter.visibility.rules.PublicInterestRules._
import com.twitter.visibility.rules.SafeSearchTweetRules._
import com.twitter.visibility.rules.SafeSearchUserRules.SafeSearchNsfwAvatarImageUserLabelRule
import com.twitter.visibility.rules.SafeSearchUserRules._
import com.twitter.visibility.rules.SpaceRules._
import com.twitter.visibility.rules.ToxicityReplyFilterRules.ToxicityReplyFilterDropNotificationRule
import com.twitter.visibility.rules.ToxicityReplyFilterRules.ToxicityReplyFilterRule
import com.twitter.visibility.rules.UnsafeSearchTweetRules._
import com.twitter.visibility.rules.UserUnavailableStateTombstoneRules._
abstract class VisibilityPolicy(
val tweetRules: Seq[Rule] = Nil,
val userRules: Seq[Rule] = Nil,
val cardRules: Seq[Rule] = Nil,
val quotedTweetRules: Seq[Rule] = Nil,
val dmRules: Seq[Rule] = Nil,
val dmConversationRules: Seq[Rule] = Nil,
val dmEventRules: Seq[Rule] = Nil,
val spaceRules: Seq[Rule] = Nil,
val userUnavailableStateRules: Seq[Rule] = Nil,
val twitterArticleRules: Seq[Rule] = Nil,
val deletedTweetRules: Seq[Rule] = Nil,
val mediaRules: Seq[Rule] = Nil,
val communityRules: Seq[Rule] = Nil,
val policyRuleParams: Map[Rule, PolicyLevelRuleParams] = Map.empty) {
def forContentId(contentId: ContentId): Seq[Rule] =
contentId match {
case ContentId.TweetId(_) => tweetRules
case ContentId.UserId(_) => userRules
case ContentId.CardId(_) => cardRules
case ContentId.QuotedTweetRelationship(_, _) => quotedTweetRules
case ContentId.NotificationId(_) => userRules
case ContentId.DmId(_) => dmRules
case ContentId.BlenderTweetId(_) => userRules ++ tweetRules
case ContentId.SpaceId(_) => spaceRules
case ContentId.SpacePlusUserId(_) => spaceRules ++ userRules
case ContentId.DmConversationId(_) => dmConversationRules
case ContentId.DmEventId(_) => dmEventRules
case ContentId.UserUnavailableState(_) => userUnavailableStateRules
case ContentId.TwitterArticleId(_) => twitterArticleRules
case ContentId.DeleteTweetId(_) => deletedTweetRules
case ContentId.MediaId(_) => mediaRules
case ContentId.CommunityId(_) => communityRules
}
private[visibility] def allRules: Seq[Rule] =
(tweetRules ++ userRules ++ cardRules ++ quotedTweetRules ++ dmRules ++ spaceRules ++ dmConversationRules ++ dmEventRules ++ twitterArticleRules ++ deletedTweetRules ++ mediaRules ++ communityRules)
}
object VisibilityPolicy {
val baseTweetRules = Seq(
DropCommunityTweetsRule,
DropCommunityTweetCommunityNotVisibleRule,
DropProtectedCommunityTweetsRule,
DropHiddenCommunityTweetsRule,
DropAuthorRemovedCommunityTweetsRule,
SpamTweetLabelRule,
PdnaTweetLabelRule,
BounceTweetLabelRule,
DropExclusiveTweetContentRule,
DropTrustedFriendsTweetContentRule
)
val baseTweetTombstoneRules = Seq(
TombstoneCommunityTweetsRule,
TombstoneCommunityTweetCommunityNotVisibleRule,
TombstoneProtectedCommunityTweetsRule,
TombstoneHiddenCommunityTweetsRule,
TombstoneAuthorRemovedCommunityTweetsRule,
SpamTweetLabelTombstoneRule,
PdnaTweetLabelTombstoneRule,
BounceTweetLabelTombstoneRule,
TombstoneExclusiveTweetContentRule,
TombstoneTrustedFriendsTweetContentRule,
)
val baseMediaRules = Seq(
)
val baseQuotedTweetTombstoneRules = Seq(
BounceQuotedTweetTombstoneRule
)
def union[T](rules: Seq[Rule]*): Seq[Rule] = {
if (rules.isEmpty) {
Seq.empty[Rule]
} else {
rules.reduce((a, b) => a ++ b.filterNot(a.contains))
}
}
}
case class PolicyLevelRuleParams(
ruleParams: Seq[RuleParam[Boolean]],
force: Boolean = false) {}
object PolicyLevelRuleParams {
def ruleParams(ruleParams: RuleParam[Boolean]*): PolicyLevelRuleParams = {
PolicyLevelRuleParams(ruleParams)
}
def ruleParams(force: Boolean, ruleParams: RuleParam[Boolean]*): PolicyLevelRuleParams = {
PolicyLevelRuleParams(ruleParams, force)
}
}
case object FilterAllPolicy
extends VisibilityPolicy(
tweetRules = Seq(DropAllRule),
userRules = Seq(DropAllRule),
cardRules = Seq(DropAllRule),
quotedTweetRules = Seq(DropAllRule),
dmRules = Seq(DropAllRule),
dmConversationRules = Seq(DropAllRule),
dmEventRules = Seq(DropAllRule),
spaceRules = Seq(DropAllRule),
userUnavailableStateRules = Seq(DropAllRule),
twitterArticleRules = Seq(DropAllRule),
deletedTweetRules = Seq(DropAllRule),
mediaRules = Seq(DropAllRule),
communityRules = Seq(DropAllRule),
)
case object FilterNonePolicy extends VisibilityPolicy()
object ConversationsAdAvoidanceRules {
val tweetRules = Seq(
NsfwHighRecallTweetLabelAvoidRule,
NsfwHighPrecisionTweetLabelAvoidRule,
NsfwTextTweetLabelAvoidRule,
AvoidHighToxicityModelScoreRule,
AvoidReportedTweetModelScoreRule,
NsfwHighPrecisionUserLabelAvoidTweetRule,
TweetNsfwUserAdminAvoidRule,
DoNotAmplifyTweetLabelAvoidRule,
NsfaHighPrecisionTweetLabelAvoidRule,
)
val policyRuleParams = Map[Rule, PolicyLevelRuleParams](
NsfwHighRecallTweetLabelAvoidRule -> ruleParams(
RuleParams.EnableNewAdAvoidanceRulesParam
),
NsfwHighPrecisionTweetLabelAvoidRule -> ruleParams(
RuleParams.EnableNewAdAvoidanceRulesParam
),
NsfwTextTweetLabelAvoidRule -> ruleParams(RuleParams.EnableNewAdAvoidanceRulesParam),
AvoidHighToxicityModelScoreRule -> ruleParams(RuleParams.EnableNewAdAvoidanceRulesParam),
AvoidReportedTweetModelScoreRule -> ruleParams(RuleParams.EnableNewAdAvoidanceRulesParam),
NsfwHighPrecisionUserLabelAvoidTweetRule -> ruleParams(
RuleParams.EnableNewAdAvoidanceRulesParam),
TweetNsfwUserAdminAvoidRule -> ruleParams(RuleParams.EnableNewAdAvoidanceRulesParam),
DoNotAmplifyTweetLabelAvoidRule -> ruleParams(RuleParams.EnableNewAdAvoidanceRulesParam),
NsfaHighPrecisionTweetLabelAvoidRule -> ruleParams(RuleParams.EnableNewAdAvoidanceRulesParam),
)
}
case object FilterDefaultPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++
Seq(
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule
)
)
case object LimitedEngagementBaseRules
extends VisibilityPolicy(
tweetRules = Seq(
StaleTweetLimitedActionsRule,
LimitRepliesByInvitationConversationRule,
LimitRepliesCommunityConversationRule,
LimitRepliesFollowersConversationRule,
CommunityTweetCommunityNotFoundLimitedActionsRule,
CommunityTweetCommunityDeletedLimitedActionsRule,
CommunityTweetCommunitySuspendedLimitedActionsRule,
CommunityTweetMemberRemovedLimitedActionsRule,
CommunityTweetHiddenLimitedActionsRule,
CommunityTweetMemberLimitedActionsRule,
CommunityTweetNonMemberLimitedActionsRule,
DynamicProductAdLimitedEngagementTweetLabelRule,
TrustedFriendsTweetLimitedEngagementsRule
)
)
case object WritePathLimitedActionsEnforcementPolicy
extends VisibilityPolicy(
tweetRules = Seq(
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule
) ++
LimitedEngagementBaseRules.tweetRules
)
case object TestPolicy
extends VisibilityPolicy(
tweetRules = Seq(
TestRule
)
)
case object CardsServicePolicy
extends VisibilityPolicy(
cardRules = Seq(
DropProtectedAuthorPollCardRule,
DropCardUriRootDomainDenylistRule
),
spaceRules = Seq(
SpaceHighToxicityScoreNonFollowerDropRule,
SpaceHatefulHighRecallAllUsersDropRule,
SpaceViolenceHighRecallAllUsersDropRule,
ViewerIsSoftUserDropRule
),
)
case object CardPollVotingPolicy
extends VisibilityPolicy(
cardRules = Seq(
DropProtectedAuthorPollCardRule,
DropCommunityNonMemberPollCardRule
)
)
case object UserTimelineRules {
val UserRules = Seq(
AuthorBlocksViewerDropRule,
ProtectedAuthorDropRule,
SuspendedAuthorRule
)
}
case object TimelineLikedByRules {
val UserRules = Seq(
CompromisedNonFollowerWithUqfRule,
EngagementSpammerNonFollowerWithUqfRule,
LowQualityNonFollowerWithUqfRule,
ReadOnlyNonFollowerWithUqfRule,
SpamHighRecallNonFollowerWithUqfRule
)
}
case object FollowingAndFollowersUserListPolicy
extends VisibilityPolicy(
userRules = UserTimelineRules.UserRules
)
case object FriendsFollowingListPolicy
extends VisibilityPolicy(
userRules = UserTimelineRules.UserRules
)
case object ListOwnershipsPolicy
extends VisibilityPolicy(
userRules = UserTimelineRules.UserRules
)
case object ListRecommendationsPolicy
extends VisibilityPolicy(
userRules = RecommendationsPolicy.userRules ++ Seq(
DropNsfwUserAuthorRule,
NsfwHighRecallRule,
SearchBlacklistRule,
SearchNsfwTextRule,
ViewerBlocksAuthorRule,
ViewerMutesAuthorRule
)
)
case object ListSearchBaseRules {
val NonExperimentalSafeSearchMinimalPolicyUserRules: Seq[Rule] =
SafeSearchMinimalPolicy.userRules.filterNot(_.isExperimental)
val MinimalPolicyUserRules: Seq[Rule] = NonExperimentalSafeSearchMinimalPolicyUserRules
val BlockMutePolicyUserRules = Seq(
ViewerBlocksAuthorViewerOptInBlockingOnSearchRule,
ViewerMutesAuthorViewerOptInBlockingOnSearchRule
)
val StrictPolicyUserRules = Seq(
SafeSearchAbusiveUserLabelRule,
SafeSearchAbusiveHighRecallUserLabelRule,
SafeSearchCompromisedUserLabelRule,
SafeSearchDoNotAmplifyNonFollowersUserLabelRule,
SafeSearchDuplicateContentUserLabelRule,
SafeSearchLowQualityUserLabelRule,
SafeSearchNotGraduatedNonFollowersUserLabelRule,
SafeSearchNsfwHighPrecisionUserLabelRule,
SafeSearchNsfwAvatarImageUserLabelRule,
SafeSearchNsfwBannerImageUserLabelRule,
SafeSearchReadOnlyUserLabelRule,
SafeSearchSearchBlacklistUserLabelRule,
SafeSearchNsfwTextUserLabelRule,
SafeSearchSpamHighRecallUserLabelRule,
SafeSearchDownrankSpamReplyAuthorLabelRule,
SafeSearchNsfwTextAuthorLabelRule,
DropNsfwAdminAuthorViewerOptInFilteringOnSearchRule,
DropNsfwUserAuthorViewerOptInFilteringOnSearchRule,
)
}
object SensitiveMediaSettingsTimelineHomeBaseRules {
val policyRuleParams = Map[Rule, PolicyLevelRuleParams](
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule -> ruleParams(
RuleParams.EnableLegacySensitiveMediaHomeTimelineRulesParam),
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule -> ruleParams(
RuleParams.EnableLegacySensitiveMediaHomeTimelineRulesParam),
NsfwReportedHeuristicsAllUsersTweetLabelRule -> ruleParams(
RuleParams.EnableLegacySensitiveMediaHomeTimelineRulesParam),
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule -> ruleParams(
RuleParams.EnableLegacySensitiveMediaHomeTimelineRulesParam),
NsfwCardImageAllUsersTweetLabelRule -> ruleParams(
RuleParams.EnableLegacySensitiveMediaHomeTimelineRulesParam),
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwHighPrecisionTweetLabelInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsHomeTimelineRulesParam),
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceHighPrecisionInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsHomeTimelineRulesParam),
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwReportedHeuristicsTweetLabelInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsHomeTimelineRulesParam),
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceReportedHeuristicsInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsHomeTimelineRulesParam),
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwCardImageTweetLabelInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsHomeTimelineRulesParam),
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwUserTweetFlagInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsHomeTimelineRulesParam),
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwAdminTweetFlagInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsHomeTimelineRulesParam)
)
}
object SensitiveMediaSettingsConversationBaseRules {
val policyRuleParams = Map[Rule, PolicyLevelRuleParams](
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule -> ruleParams(
RuleParams.EnableLegacySensitiveMediaConversationRulesParam),
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule -> ruleParams(
RuleParams.EnableLegacySensitiveMediaConversationRulesParam),
NsfwReportedHeuristicsAllUsersTweetLabelRule -> ruleParams(
RuleParams.EnableLegacySensitiveMediaConversationRulesParam),
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule -> ruleParams(
RuleParams.EnableLegacySensitiveMediaConversationRulesParam),
NsfwCardImageAllUsersTweetLabelRule -> ruleParams(
RuleParams.EnableLegacySensitiveMediaConversationRulesParam),
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwHighPrecisionTweetLabelInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsConversationRulesParam),
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceHighPrecisionInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsConversationRulesParam),
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwReportedHeuristicsTweetLabelInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsConversationRulesParam),
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceReportedHeuristicsInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsConversationRulesParam),
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwCardImageTweetLabelInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsConversationRulesParam),
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwUserTweetFlagInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsConversationRulesParam),
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwAdminTweetFlagInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsConversationRulesParam)
)
}
object SensitiveMediaSettingsProfileTimelineBaseRules {
val policyRuleParams = Map[Rule, PolicyLevelRuleParams](
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule -> ruleParams(
RuleParams.EnableLegacySensitiveMediaProfileTimelineRulesParam),
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule -> ruleParams(
RuleParams.EnableLegacySensitiveMediaProfileTimelineRulesParam),
NsfwReportedHeuristicsAllUsersTweetLabelRule -> ruleParams(
RuleParams.EnableLegacySensitiveMediaProfileTimelineRulesParam),
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule -> ruleParams(
RuleParams.EnableLegacySensitiveMediaProfileTimelineRulesParam),
NsfwCardImageAllUsersTweetLabelRule -> ruleParams(
RuleParams.EnableLegacySensitiveMediaProfileTimelineRulesParam),
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwHighPrecisionTweetLabelInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsProfileTimelineRulesParam),
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceHighPrecisionInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsProfileTimelineRulesParam),
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwReportedHeuristicsTweetLabelInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsProfileTimelineRulesParam),
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceReportedHeuristicsInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsProfileTimelineRulesParam),
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwCardImageTweetLabelInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsProfileTimelineRulesParam),
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwUserTweetFlagInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsProfileTimelineRulesParam),
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwAdminTweetFlagInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsProfileTimelineRulesParam)
)
}
object SensitiveMediaSettingsTweetDetailBaseRules {
val policyRuleParams = Map[Rule, PolicyLevelRuleParams](
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule -> ruleParams(
RuleParams.EnableLegacySensitiveMediaTweetDetailRulesParam),
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule -> ruleParams(
RuleParams.EnableLegacySensitiveMediaTweetDetailRulesParam),
NsfwReportedHeuristicsAllUsersTweetLabelRule -> ruleParams(
RuleParams.EnableLegacySensitiveMediaTweetDetailRulesParam),
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule -> ruleParams(
RuleParams.EnableLegacySensitiveMediaTweetDetailRulesParam),
NsfwCardImageAllUsersTweetLabelRule -> ruleParams(
RuleParams.EnableLegacySensitiveMediaTweetDetailRulesParam),
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwHighPrecisionTweetLabelInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsTweetDetailRulesParam),
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceHighPrecisionInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsTweetDetailRulesParam),
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwReportedHeuristicsTweetLabelInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsTweetDetailRulesParam),
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceReportedHeuristicsInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsTweetDetailRulesParam),
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwCardImageTweetLabelInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsTweetDetailRulesParam),
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwUserTweetFlagInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsTweetDetailRulesParam),
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwAdminTweetFlagInterstitialRule -> ruleParams(
RuleParams.EnableNewSensitiveMediaSettingsInterstitialsTweetDetailRulesParam)
)
}
case object ListSearchPolicy
extends VisibilityPolicy(
userRules = ListSearchBaseRules.MinimalPolicyUserRules ++
ListSearchBaseRules.BlockMutePolicyUserRules ++
ListSearchBaseRules.StrictPolicyUserRules
)
case object ListSubscriptionsPolicy
extends VisibilityPolicy(
userRules = UserTimelineRules.UserRules
)
case object ListMembershipsPolicy
extends VisibilityPolicy(
userRules = UserTimelineRules.UserRules
)
case object AllSubscribedListsPolicy
extends VisibilityPolicy(
userRules = UserTimelineRules.UserRules
)
case object ListHeaderPolicy
extends VisibilityPolicy(
userRules = Seq(
AuthorBlocksViewerDropRule,
ProtectedAuthorDropRule,
SuspendedAuthorRule
)
)
case object NewUserExperiencePolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++ Seq(
AbusiveTweetLabelRule,
LowQualityTweetLabelDropRule,
NsfaHighRecallTweetLabelRule,
NsfwHighPrecisionTweetLabelRule,
GoreAndViolenceHighPrecisionTweetLabelRule,
NsfwReportedHeuristicsTweetLabelRule,
GoreAndViolenceReportedHeuristicsTweetLabelRule,
NsfwCardImageTweetLabelRule,
NsfwHighRecallTweetLabelRule,
NsfwVideoTweetLabelDropRule,
NsfwTextTweetLabelDropRule,
SpamHighRecallTweetLabelDropRule,
DuplicateContentTweetLabelDropRule,
GoreAndViolenceTweetLabelRule,
UntrustedUrlTweetLabelRule,
DownrankSpamReplyTweetLabelRule,
SearchBlacklistTweetLabelRule,
AutomationTweetLabelRule,
DuplicateMentionTweetLabelRule,
BystanderAbusiveTweetLabelRule,
SafetyCrisisLevel3DropRule,
SafetyCrisisLevel4DropRule,
DoNotAmplifyDropRule,
SmyteSpamTweetLabelDropRule,
),
userRules = Seq(
AbusiveRule,
LowQualityRule,
ReadOnlyRule,
SearchBlacklistRule,
SearchNsfwTextRule,
CompromisedRule,
SpamHighRecallRule,
DuplicateContentRule,
NsfwHighPrecisionRule,
NsfwAvatarImageRule,
NsfwBannerImageRule,
AbusiveHighRecallRule,
DoNotAmplifyNonFollowerRule,
NotGraduatedNonFollowerRule,
LikelyIvsLabelNonFollowerDropUserRule,
DownrankSpamReplyNonAuthorRule,
NsfwTextNonAuthorDropRule
)
)
case object DESHomeTimelinePolicy
extends VisibilityPolicy(
tweetRules = Seq(
DropStaleTweetsRule,
DropAllExclusiveTweetsRule,
DropAllTrustedFriendsTweetsRule,
DropAllCommunityTweetsRule
) ++
VisibilityPolicy.baseTweetRules,
userRules = UserTimelineRules.UserRules
)
case object DesQuoteTweetTimelinePolicy
extends VisibilityPolicy(
tweetRules = Seq(
DropStaleTweetsRule,
DropAllExclusiveTweetsRule,
DropAllTrustedFriendsTweetsRule
) ++ ElevatedQuoteTweetTimelinePolicy.tweetRules.diff(Seq(DropStaleTweetsRule)),
userRules = Seq(
ProtectedAuthorDropRule
),
policyRuleParams = ElevatedQuoteTweetTimelinePolicy.policyRuleParams
)
case object DESRealtimeSpamEnrichmentPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++ Seq(
LowQualityTweetLabelDropRule,
SpamHighRecallTweetLabelDropRule,
DuplicateContentTweetLabelDropRule,
SearchBlacklistTweetLabelRule,
SmyteSpamTweetLabelDropRule,
DropAllCommunityTweetsRule,
DropAllExclusiveTweetsRule,
DropAllTrustedFriendsTweetsRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule
)
)
case object DESRealtimePolicy
extends VisibilityPolicy(
tweetRules = Seq(
DropAllCommunityTweetsRule,
DropAllExclusiveTweetsRule,
DropAllTrustedFriendsTweetsRule,
DropAllCollabInvitationTweetsRule
),
userRules = Seq(
DropAllProtectedAuthorRule,
DropProtectedViewerIfPresentRule
)
)
case object DESRetweetingUsersPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++ Seq(
DropAllExclusiveTweetsRule,
DropAllTrustedFriendsTweetsRule,
),
userRules = Seq(
AuthorBlocksViewerDropRule,
ViewerBlocksAuthorRule,
ProtectedAuthorDropRule,
SuspendedAuthorRule
)
)
case object DESTweetLikingUsersPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++ Seq(
DropAllExclusiveTweetsRule,
DropAllTrustedFriendsTweetsRule,
),
userRules = TimelineLikedByRules.UserRules
)
case object DESUserBookmarksPolicy
extends VisibilityPolicy(
tweetRules = Seq(
DropAllExclusiveTweetsRule,
DropAllTrustedFriendsTweetsRule,
) ++
(VisibilityPolicy.baseTweetRules
++ Seq(DropAllCommunityTweetsRule)
++ TimelineProfileRules.tweetRules),
userRules = UserTimelineRules.UserRules
)
case object DESUserLikedTweetsPolicy
extends VisibilityPolicy(
tweetRules = Seq(
DropStaleTweetsRule,
DropAllExclusiveTweetsRule,
DropAllTrustedFriendsTweetsRule,
) ++
(
VisibilityPolicy.baseTweetRules ++
Seq(
DropAllCommunityTweetsRule,
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
ReportedTweetInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
NsfwHighPrecisionTweetLabelAvoidRule,
NsfwHighRecallTweetLabelAvoidRule,
GoreAndViolenceHighPrecisionAvoidAllUsersTweetLabelRule,
NsfwReportedHeuristicsAvoidAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAvoidAllUsersTweetLabelRule,
NsfwCardImageAvoidAllUsersTweetLabelRule,
DoNotAmplifyTweetLabelAvoidRule,
NsfaHighPrecisionTweetLabelAvoidRule,
) ++ LimitedEngagementBaseRules.tweetRules
),
userRules = UserTimelineRules.UserRules
)
case object DESUserMentionsPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++ Seq(
DropAllCommunityTweetsRule,
AuthorBlocksViewerDropRule,
ProtectedAuthorDropRule,
DropAllExclusiveTweetsRule,
DropAllTrustedFriendsTweetsRule,
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
) ++ LimitedEngagementBaseRules.tweetRules,
userRules = Seq(
SuspendedAuthorRule
)
)
case object DESUserTweetsPolicy
extends VisibilityPolicy(
tweetRules = Seq(
DropStaleTweetsRule,
DropAllExclusiveTweetsRule,
DropAllTrustedFriendsTweetsRule,
) ++
(VisibilityPolicy.baseTweetRules
++ Seq(DropAllCommunityTweetsRule)
++ TimelineProfileRules.tweetRules),
userRules = UserTimelineRules.UserRules
)
case object DevPlatformComplianceStreamPolicy
extends VisibilityPolicy(
tweetRules = Seq(
SpamAllUsersTweetLabelRule,
PdnaAllUsersTweetLabelRule,
BounceAllUsersTweetLabelRule,
AbusePolicyEpisodicTweetLabelComplianceTweetNoticeRule,
)
)
case object DesTweetDetailPolicy
extends VisibilityPolicy(
tweetRules = Seq(
DropAllExclusiveTweetsRule,
DropAllTrustedFriendsTweetsRule,
) ++ BaseTweetDetailPolicy.tweetRules
)
case object DevPlatformGetListTweetsPolicy
extends VisibilityPolicy(
tweetRules = Seq(DropStaleTweetsRule) ++ DesTweetDetailPolicy.tweetRules
)
case object FollowerConnectionsPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules,
userRules = Seq(
SpammyFollowerRule
)
)
case object SuperFollowerConnectionsPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules,
userRules = Seq(
SpammyFollowerRule
)
)
case object LivePipelineEngagementCountsPolicy
extends VisibilityPolicy(
tweetRules = Seq(
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
) ++ LimitedEngagementBaseRules.tweetRules
)
case object LiveVideoTimelinePolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++ Seq(
AbusiveTweetLabelRule,
AbusiveHighRecallTweetLabelRule,
LowQualityTweetLabelDropRule,
NsfwHighPrecisionTweetLabelRule,
GoreAndViolenceHighPrecisionTweetLabelRule,
NsfwReportedHeuristicsTweetLabelRule,
GoreAndViolenceReportedHeuristicsTweetLabelRule,
NsfwCardImageTweetLabelRule,
NsfwHighRecallTweetLabelRule,
NsfwVideoTweetLabelDropRule,
NsfwTextTweetLabelDropRule,
LiveLowQualityTweetLabelRule,
SpamHighRecallTweetLabelDropRule,
DuplicateContentTweetLabelDropRule,
SearchBlacklistTweetLabelRule,
BystanderAbusiveTweetLabelRule,
SafetyCrisisLevel3DropRule,
SafetyCrisisLevel4DropRule,
DoNotAmplifyDropRule,
SmyteSpamTweetLabelDropRule,
AbusePolicyEpisodicTweetLabelDropRule,
EmergencyDropRule,
),
userRules = Seq(
AbusiveRule,
LowQualityRule,
ReadOnlyRule,
SearchBlacklistRule,
SearchNsfwTextRule,
CompromisedRule,
NsfwHighPrecisionRule,
NsfwHighRecallRule,
NsfwAvatarImageRule,
NsfwBannerImageRule,
SpamHighRecallRule,
DuplicateContentRule,
LiveLowQualityRule,
EngagementSpammerRule,
EngagementSpammerHighRecallRule,
AbusiveHighRecallRule,
DoNotAmplifyNonFollowerRule,
NotGraduatedNonFollowerRule,
LikelyIvsLabelNonFollowerDropUserRule,
NsfwTextNonAuthorDropRule
)
)
case object MagicRecsPolicyOverrides {
val replacements: Map[Rule, Rule] = Map()
def union(rules: Seq[Rule]*): Seq[Rule] = rules
.map(ar => ar.map(x => replacements.getOrElse(x, x)))
.reduce((a, b) => a ++ b.filterNot(a.contains))
}
case object MagicRecsPolicy
extends VisibilityPolicy(
tweetRules = MagicRecsPolicyOverrides.union(
RecommendationsPolicy.tweetRules.filterNot(_ == SafetyCrisisLevel3DropRule),
NotificationsIbisPolicy.tweetRules,
Seq(
NsfaHighRecallTweetLabelRule,
NsfwHighRecallTweetLabelRule,
NsfwTextHighPrecisionTweetLabelDropRule),
Seq(
AuthorBlocksViewerDropRule,
ViewerBlocksAuthorRule,
ViewerMutesAuthorRule
),
Seq(
DeactivatedAuthorRule,
SuspendedAuthorRule,
TweetNsfwUserDropRule,
TweetNsfwAdminDropRule
)
),
userRules = MagicRecsPolicyOverrides.union(
RecommendationsPolicy.userRules,
NotificationsRules.userRules
)
)
case object MagicRecsV2Policy
extends VisibilityPolicy(
tweetRules = MagicRecsPolicyOverrides.union(
MagicRecsPolicy.tweetRules,
NotificationsWriterTweetHydratorPolicy.tweetRules
),
userRules = MagicRecsPolicyOverrides.union(
MagicRecsPolicy.userRules,
NotificationsWriterV2Policy.userRules
)
)
case object MagicRecsAggressivePolicy
extends VisibilityPolicy(
tweetRules = MagicRecsPolicy.tweetRules,
userRules = MagicRecsPolicy.userRules
)
case object MagicRecsAggressiveV2Policy
extends VisibilityPolicy(
tweetRules = MagicRecsV2Policy.tweetRules,
userRules = MagicRecsV2Policy.userRules
)
case object MinimalPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules,
userRules = Seq(
TsViolationRule
)
)
case object ModeratedTweetsTimelinePolicy
extends VisibilityPolicy(
tweetRules = TweetDetailPolicy.tweetRules.diff(
Seq(
AuthorBlocksViewerDropRule,
MutedKeywordForTweetRepliesInterstitialRule,
ReportedTweetInterstitialRule)),
policyRuleParams = TweetDetailPolicy.policyRuleParams
)
case object MomentsPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++
Seq(
AuthorBlocksViewerUnspecifiedRule,
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
) ++ LimitedEngagementBaseRules.tweetRules
)
case object NearbyTimelinePolicy
extends VisibilityPolicy(
tweetRules = SearchBlenderRules.tweetRelevanceRules,
userRules = SearchBlenderRules.userBaseRules
)
private object NotificationsRules {
val tweetRules: Seq[Rule] =
DropStaleTweetsRule +: VisibilityPolicy.baseTweetRules
val userRules: Seq[Rule] = Seq(
AbusiveRule,
LowQualityRule,
ReadOnlyRule,
CompromisedRule,
SpamHighRecallRule,
DuplicateContentRule,
AbusiveHighRecallRule,
EngagementSpammerNonFollowerWithUqfRule,
EngagementSpammerHighRecallNonFollowerWithUqfRule,
DownrankSpamReplyNonFollowerWithUqfRule
)
}
case object NotificationsIbisPolicy
extends VisibilityPolicy(
tweetRules =
VisibilityPolicy.baseTweetRules ++ Seq(
AbusiveUqfNonFollowerTweetLabelRule,
LowQualityTweetLabelDropRule,
ToxicityReplyFilterDropNotificationRule,
NsfwHighPrecisionTweetLabelRule,
GoreAndViolenceHighPrecisionTweetLabelRule,
NsfwReportedHeuristicsTweetLabelRule,
GoreAndViolenceReportedHeuristicsTweetLabelRule,
NsfwCardImageTweetLabelRule,
NsfwVideoTweetLabelDropRule,
NsfwTextTweetLabelDropRule,
SpamHighRecallTweetLabelDropRule,
DuplicateContentTweetLabelDropRule,
DuplicateMentionTweetLabelRule,
LowQualityMentionTweetLabelRule,
UntrustedUrlUqfNonFollowerTweetLabelRule,
DownrankSpamReplyUqfNonFollowerTweetLabelRule,
SafetyCrisisAnyLevelDropRule,
DoNotAmplifyDropRule,
SmyteSpamTweetLabelDropRule,
AbusePolicyEpisodicTweetLabelDropRule,
EmergencyDropRule,
),
userRules = NotificationsRules.userRules ++ Seq(
DoNotAmplifyNonFollowerRule,
LikelyIvsLabelNonFollowerDropUserRule,
NsfwTextNonAuthorDropRule
)
)
case object NotificationsReadPolicy
extends VisibilityPolicy(
tweetRules = NotificationsRules.tweetRules,
userRules = NotificationsRules.userRules
)
case object NotificationsTimelineDeviceFollowPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules,
userRules = Seq(
AuthorBlocksViewerDropRule,
ViewerBlocksAuthorRule,
CompromisedRule
)
)
case object NotificationsWritePolicy
extends VisibilityPolicy(
tweetRules = NotificationsRules.tweetRules,
userRules = NotificationsRules.userRules
)
case object NotificationsWriterV2Policy
extends VisibilityPolicy(
userRules =
Seq(
AuthorBlocksViewerDropRule,
DeactivatedAuthorRule,
ErasedAuthorRule,
ProtectedAuthorDropRule,
SuspendedAuthorRule,
DeactivatedViewerRule,
SuspendedViewerRule,
ViewerBlocksAuthorRule,
ViewerMutesAndDoesNotFollowAuthorRule,
ViewerIsUnmentionedRule,
NoConfirmedEmailRule,
NoConfirmedPhoneRule,
NoDefaultProfileImageRule,
NoNewUsersRule,
NoNotFollowedByRule,
OnlyPeopleIFollowRule
) ++
NotificationsRules.userRules
)
case object NotificationsWriterTweetHydratorPolicy
extends VisibilityPolicy(
tweetRules = NotificationsRules.tweetRules ++
Seq(
LowQualityTweetLabelDropRule,
SpamHighRecallTweetLabelDropRule,
DuplicateContentTweetLabelDropRule,
DuplicateMentionUqfTweetLabelRule,
LowQualityMentionTweetLabelRule,
SmyteSpamTweetLabelDropRule,
ToxicityReplyFilterDropNotificationRule,
AbusiveUqfNonFollowerTweetLabelRule,
UntrustedUrlUqfNonFollowerTweetLabelRule,
DownrankSpamReplyUqfNonFollowerTweetLabelRule,
ViewerHasMatchingMutedKeywordForNotificationsRule,
NsfwCardImageAllUsersTweetLabelRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
) ++ LimitedEngagementBaseRules.tweetRules
)
case object NotificationsPlatformPolicy
extends VisibilityPolicy(
tweetRules = NotificationsWriterTweetHydratorPolicy.tweetRules,
userRules = NotificationsWriterV2Policy.userRules
)
case object NotificationsPlatformPushPolicy
extends VisibilityPolicy(
tweetRules = NotificationsIbisPolicy.tweetRules,
userRules = Seq(ViewerMutesAuthorRule)
++ NotificationsIbisPolicy.userRules
)
case object QuoteTweetTimelinePolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++ Seq(
DropStaleTweetsRule,
AbusiveTweetLabelRule,
LowQualityTweetLabelDropRule,
NsfwHighPrecisionTweetLabelRule,
GoreAndViolenceHighPrecisionTweetLabelRule,
NsfwReportedHeuristicsTweetLabelRule,
GoreAndViolenceReportedHeuristicsTweetLabelRule,
NsfwCardImageTweetLabelRule,
NsfwHighRecallTweetLabelRule,
NsfwVideoTweetLabelDropRule,
NsfwTextTweetLabelDropRule,
SpamHighRecallTweetLabelDropRule,
DuplicateContentTweetLabelDropRule,
GoreAndViolenceTweetLabelRule,
UntrustedUrlTweetLabelRule,
DownrankSpamReplyTweetLabelRule,
SearchBlacklistTweetLabelRule,
AutomationTweetLabelRule,
DuplicateMentionTweetLabelRule,
BystanderAbusiveTweetLabelRule,
SmyteSpamTweetLabelDropRule,
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
) ++ LimitedEngagementBaseRules.tweetRules,
userRules = Seq(
AbusiveRule,
LowQualityRule,
ReadOnlyRule,
SearchBlacklistRule,
SearchNsfwTextRule,
CompromisedRule,
SpamHighRecallRule,
DuplicateContentRule,
NsfwHighPrecisionRule,
NsfwAvatarImageRule,
NsfwBannerImageRule,
AbusiveHighRecallRule,
DownrankSpamReplyNonAuthorRule,
NsfwTextNonAuthorDropRule
)
)
case object ElevatedQuoteTweetTimelinePolicy
extends VisibilityPolicy(
tweetRules =
TweetDetailPolicy.tweetRules.diff(
Seq(
MutedKeywordForQuotedTweetTweetDetailInterstitialRule,
ReportedTweetInterstitialRule)),
policyRuleParams = TweetDetailPolicy.policyRuleParams
)
case object EmbedsPublicInterestNoticePolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++ Seq(
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
)
)
case object RecommendationsPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++
Seq(
AbusiveTweetLabelRule,
LowQualityTweetLabelDropRule,
NsfwHighPrecisionTweetLabelRule,
GoreAndViolenceHighPrecisionTweetLabelRule,
NsfwReportedHeuristicsTweetLabelRule,
GoreAndViolenceReportedHeuristicsTweetLabelRule,
NsfwCardImageTweetLabelRule,
NsfwVideoTweetLabelDropRule,
NsfwTextTweetLabelDropRule,
SpamHighRecallTweetLabelDropRule,
DuplicateContentTweetLabelDropRule,
GoreAndViolenceTweetLabelRule,
BystanderAbusiveTweetLabelRule,
DoNotAmplifyDropRule,
SafetyCrisisLevel3DropRule,
SmyteSpamTweetLabelDropRule,
AbusePolicyEpisodicTweetLabelDropRule,
EmergencyDropRule,
),
userRules = Seq(
DropNsfwAdminAuthorRule,
AbusiveRule,
LowQualityRule,
ReadOnlyRule,
CompromisedRule,
RecommendationsBlacklistRule,
SpamHighRecallRule,
DuplicateContentRule,
NsfwHighPrecisionRule,
NsfwNearPerfectAuthorRule,
NsfwBannerImageRule,
NsfwAvatarImageRule,
EngagementSpammerRule,
EngagementSpammerHighRecallRule,
AbusiveHighRecallRule,
DoNotAmplifyNonFollowerRule,
NotGraduatedNonFollowerRule,
LikelyIvsLabelNonFollowerDropUserRule,
NsfwTextNonAuthorDropRule
)
)
case object RecosVideoPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++ Seq(
AbusiveTweetLabelRule,
LowQualityTweetLabelDropRule,
NsfwHighPrecisionTweetLabelRule,
GoreAndViolenceHighPrecisionTweetLabelRule,
NsfwReportedHeuristicsTweetLabelRule,
GoreAndViolenceReportedHeuristicsTweetLabelRule,
NsfwCardImageTweetLabelRule,
NsfwHighRecallTweetLabelRule,
NsfwVideoTweetLabelDropRule,
NsfwTextTweetLabelDropRule,
SpamHighRecallTweetLabelDropRule,
DuplicateContentTweetLabelDropRule,
BystanderAbusiveTweetLabelRule,
SmyteSpamTweetLabelDropRule,
),
userRules = Seq(NsfwTextNonAuthorDropRule)
)
case object RepliesGroupingPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++
Seq(
LowQualityTweetLabelDropRule,
SpamHighRecallTweetLabelDropRule,
DuplicateContentTweetLabelDropRule,
DeciderableSpamHighRecallAuthorLabelDropRule,
SmyteSpamTweetLabelDropRule,
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
MutedKeywordForTweetRepliesInterstitialRule,
ReportedTweetInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
NsfwHighPrecisionTweetLabelAvoidRule,
NsfwHighRecallTweetLabelAvoidRule,
GoreAndViolenceHighPrecisionAvoidAllUsersTweetLabelRule,
NsfwReportedHeuristicsAvoidAdPlacementAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAvoidAdPlacementAllUsersTweetLabelRule,
NsfwCardImageAvoidAdPlacementAllUsersTweetLabelRule,
DoNotAmplifyTweetLabelAvoidRule,
NsfaHighPrecisionTweetLabelAvoidRule,
) ++ LimitedEngagementBaseRules.tweetRules,
userRules = Seq(
LowQualityRule,
ReadOnlyRule,
LowQualityHighRecallRule,
CompromisedRule,
DeciderableSpamHighRecallRule
)
)
case object ReturningUserExperiencePolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++ Seq(
AbusiveTweetLabelRule,
LowQualityTweetLabelDropRule,
NsfaHighRecallTweetLabelRule,
NsfwHighPrecisionTweetLabelRule,
GoreAndViolenceHighPrecisionTweetLabelRule,
NsfwReportedHeuristicsTweetLabelRule,
GoreAndViolenceReportedHeuristicsTweetLabelRule,
NsfwCardImageTweetLabelRule,
NsfwHighRecallTweetLabelRule,
NsfwVideoTweetLabelDropRule,
NsfwTextTweetLabelDropRule,
NsfwTextHighPrecisionTweetLabelDropRule,
SpamHighRecallTweetLabelDropRule,
DuplicateContentTweetLabelDropRule,
GoreAndViolenceTweetLabelRule,
UntrustedUrlTweetLabelRule,
DownrankSpamReplyTweetLabelRule,
SearchBlacklistTweetLabelRule,
AutomationTweetLabelRule,
DuplicateMentionTweetLabelRule,
BystanderAbusiveTweetLabelRule,
SmyteSpamTweetLabelDropRule,
SafetyCrisisLevel3DropRule,
SafetyCrisisLevel4DropRule,
DoNotAmplifyDropRule,
AbusePolicyEpisodicTweetLabelDropRule,
EmergencyDropRule,
) ++ LimitedEngagementBaseRules.tweetRules,
userRules = Seq(
AbusiveRule,
LowQualityRule,
ReadOnlyRule,
SearchBlacklistRule,
SearchNsfwTextRule,
CompromisedRule,
SpamHighRecallRule,
DuplicateContentRule,
NsfwHighPrecisionRule,
NsfwAvatarImageRule,
NsfwBannerImageRule,
AbusiveHighRecallRule,
DoNotAmplifyNonFollowerRule,
NotGraduatedNonFollowerRule,
LikelyIvsLabelNonFollowerDropUserRule,
DownrankSpamReplyNonAuthorRule,
NsfwTextNonAuthorDropRule,
DropNsfwUserAuthorRule,
NsfwHighRecallRule
)
)
case object ReturningUserExperienceFocalTweetPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++
Seq(
AuthorBlocksViewerDropRule,
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
MutedKeywordForTweetRepliesInterstitialRule,
ViewerMutesAuthorInterstitialRule,
ReportedTweetInterstitialRule,
) ++ LimitedEngagementBaseRules.tweetRules
)
case object RevenuePolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++
Seq(
AbusiveTweetLabelRule,
BystanderAbusiveTweetLabelRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule
)
)
case object SafeSearchMinimalPolicy
extends VisibilityPolicy(
tweetRules = Seq(
DropOuterCommunityTweetsRule,
) ++ VisibilityPolicy.baseTweetRules ++ Seq(
LowQualityTweetLabelDropRule,
HighProactiveTosScoreTweetLabelDropSearchRule,
SpamHighRecallTweetLabelDropRule,
DuplicateContentTweetLabelDropRule,
SearchBlacklistTweetLabelRule,
SearchBlacklistHighRecallTweetLabelDropRule,
SafetyCrisisLevel3DropRule,
SafetyCrisisLevel4DropRule,
DoNotAmplifyDropRule,
SmyteSpamTweetLabelDropRule,
) ++
Seq(
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
) ++ LimitedEngagementBaseRules.tweetRules
++ SearchBlenderRules.tweetAvoidRules,
userRules = Seq(
LowQualityRule,
ReadOnlyRule,
CompromisedRule,
SpamHighRecallRule,
SearchBlacklistRule,
SearchNsfwTextRule,
DuplicateContentRule,
DoNotAmplifyNonFollowerRule,
SearchLikelyIvsLabelNonFollowerDropUserRule
)
)
case object SearchHydrationPolicy
extends VisibilityPolicy(
tweetRules = Seq(
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
ReportedTweetInterstitialSearchRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
) ++ LimitedEngagementBaseRules.tweetRules
)
case object SearchBlenderRules {
val limitedEngagementBaseRules: Seq[Rule] = LimitedEngagementBaseRules.tweetRules
val tweetAvoidRules: Seq[Rule] =
Seq(
NsfwHighPrecisionTweetLabelAvoidRule,
NsfwHighRecallTweetLabelAvoidRule,
GoreAndViolenceHighPrecisionAvoidAllUsersTweetLabelRule,
NsfwReportedHeuristicsAvoidAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAvoidAllUsersTweetLabelRule,
NsfwCardImageAvoidAllUsersTweetLabelRule,
SearchAvoidTweetNsfwAdminRule,
SearchAvoidTweetNsfwUserRule,
DoNotAmplifyTweetLabelAvoidRule,
NsfaHighPrecisionTweetLabelAvoidRule,
)
val basicBlockMuteRules: Seq[Rule] = Seq(
AuthorBlocksViewerDropRule,
ViewerBlocksAuthorViewerOptInBlockingOnSearchRule,
ViewerMutesAuthorViewerOptInBlockingOnSearchRule
)
val tweetRelevanceRules: Seq[Rule] =
Seq(
DropOuterCommunityTweetsRule,
DropStaleTweetsRule,
) ++ VisibilityPolicy.baseTweetRules ++ Seq(
SafeSearchAbusiveTweetLabelRule,
LowQualityTweetLabelDropRule,
HighProactiveTosScoreTweetLabelDropSearchRule,
HighPSpammyTweetScoreSearchTweetLabelDropRule,
HighSpammyTweetContentScoreSearchTopTweetLabelDropRule,
HighSpammyTweetContentScoreTrendsTopTweetLabelDropRule,
SafeSearchNsfwHighPrecisionTweetLabelRule,
SafeSearchGoreAndViolenceHighPrecisionTweetLabelRule,
SafeSearchNsfwReportedHeuristicsTweetLabelRule,
SafeSearchGoreAndViolenceReportedHeuristicsTweetLabelRule,
SafeSearchNsfwCardImageTweetLabelRule,
SafeSearchNsfwHighRecallTweetLabelRule,
SafeSearchNsfwVideoTweetLabelRule,
SafeSearchNsfwTextTweetLabelRule,
SpamHighRecallTweetLabelDropRule,
DuplicateContentTweetLabelDropRule,
SafeSearchGoreAndViolenceTweetLabelRule,
SafeSearchUntrustedUrlTweetLabelRule,
SafeSearchDownrankSpamReplyTweetLabelRule,
SearchBlacklistTweetLabelRule,
SearchBlacklistHighRecallTweetLabelDropRule,
SmyteSpamTweetLabelDropSearchRule,
CopypastaSpamAllViewersSearchTweetLabelRule,
) ++ basicBlockMuteRules ++
Seq(
SafeSearchAutomationNonFollowerTweetLabelRule,
SafeSearchDuplicateMentionNonFollowerTweetLabelRule,
SafeSearchBystanderAbusiveTweetLabelRule,
SafetyCrisisLevel3DropRule,
SafetyCrisisLevel4DropRule,
DoNotAmplifyDropRule,
SearchIpiSafeSearchWithoutUserInQueryDropRule,
SearchEdiSafeSearchWithoutUserInQueryDropRule,
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
UnsafeSearchNsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
UnsafeSearchGoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
UnsafeSearchNsfwReportedHeuristicsAllUsersTweetLabelRule,
UnsafeSearchGoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
UnsafeSearchNsfwCardImageAllUsersTweetLabelRule,
) ++
limitedEngagementBaseRules ++
tweetAvoidRules
VisibilityPolicy.baseTweetRules ++ Seq(
SafeSearchAbusiveTweetLabelRule,
LowQualityTweetLabelDropRule,
HighProactiveTosScoreTweetLabelDropSearchRule,
HighSpammyTweetContentScoreSearchLatestTweetLabelDropRule,
HighSpammyTweetContentScoreTrendsLatestTweetLabelDropRule,
SafeSearchNsfwHighPrecisionTweetLabelRule,
SafeSearchGoreAndViolenceHighPrecisionTweetLabelRule,
SafeSearchNsfwReportedHeuristicsTweetLabelRule,
SafeSearchGoreAndViolenceReportedHeuristicsTweetLabelRule,
SafeSearchNsfwCardImageTweetLabelRule,
SafeSearchNsfwHighRecallTweetLabelRule,
SafeSearchNsfwVideoTweetLabelRule,
SafeSearchNsfwTextTweetLabelRule,
SpamHighRecallTweetLabelDropRule,
DuplicateContentTweetLabelDropRule,
SafeSearchGoreAndViolenceTweetLabelRule,
SafeSearchUntrustedUrlTweetLabelRule,
SafeSearchDownrankSpamReplyTweetLabelRule,
SearchBlacklistTweetLabelRule,
SearchBlacklistHighRecallTweetLabelDropRule,
SmyteSpamTweetLabelDropSearchRule,
CopypastaSpamNonFollowerSearchTweetLabelRule,
) ++
basicBlockMuteRules ++
Seq(
SafeSearchAutomationNonFollowerTweetLabelRule,
SafeSearchDuplicateMentionNonFollowerTweetLabelRule,
SafeSearchBystanderAbusiveTweetLabelRule,
SafetyCrisisLevel3DropRule,
SafetyCrisisLevel4DropRule,
SearchIpiSafeSearchWithoutUserInQueryDropRule,
SearchEdiSafeSearchWithoutUserInQueryDropRule,
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
UnsafeSearchNsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
UnsafeSearchGoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
UnsafeSearchNsfwReportedHeuristicsAllUsersTweetLabelRule,
UnsafeSearchGoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
UnsafeSearchNsfwCardImageAllUsersTweetLabelRule,
) ++ limitedEngagementBaseRules ++ tweetAvoidRules
val userBaseRules: Seq[ConditionWithUserLabelRule] = Seq(
SafeSearchAbusiveUserLabelRule,
LowQualityRule,
ReadOnlyRule,
SearchBlacklistRule,
CompromisedRule,
SpamHighRecallRule,
DuplicateContentRule,
DoNotAmplifyNonFollowerRule,
SearchLikelyIvsLabelNonFollowerDropUserRule,
SafeSearchNsfwHighPrecisionUserLabelRule,
SafeSearchNsfwAvatarImageUserLabelRule,
SafeSearchNsfwBannerImageUserLabelRule,
SafeSearchAbusiveHighRecallUserLabelRule,
SafeSearchDownrankSpamReplyAuthorLabelRule,
SafeSearchNotGraduatedNonFollowersUserLabelRule,
SafeSearchNsfwTextAuthorLabelRule
)
val userRules: Seq[ConditionWithUserLabelRule] = userBaseRules
val userRelevanceBaseRules = userBaseRules ++ basicBlockMuteRules
val userRelevanceRules = userRelevanceBaseRules
val userRecencyBaseRules = userBaseRules.filterNot(
Seq(DoNotAmplifyNonFollowerRule, SearchLikelyIvsLabelNonFollowerDropUserRule).contains
) ++ basicBlockMuteRules
val searchQueryMatchesTweetAuthorRules: Seq[ConditionWithUserLabelRule] =
userBaseRules
val basicBlockMutePolicyRuleParam: Map[Rule, PolicyLevelRuleParams] =
SearchBlenderRules.basicBlockMuteRules
.map(rule => rule -> ruleParams(RuleParams.EnableSearchBasicBlockMuteRulesParam)).toMap
}
case object SearchBlenderUserRulesPolicy
extends VisibilityPolicy(
userRules = SearchBlenderRules.userRules
)
case object SearchLatestUserRulesPolicy
extends VisibilityPolicy(
userRules = SearchLatestPolicy.userRules
)
case object UserSearchSrpPolicy
extends VisibilityPolicy(
userRules = Seq(
AuthorBlocksViewerDropRule,
ViewerBlocksAuthorViewerOptInBlockingOnSearchRule,
ViewerMutesAuthorViewerOptInBlockingOnSearchRule,
DropNsfwAdminAuthorViewerOptInFilteringOnSearchRule,
SafeSearchAbusiveUserLabelRule,
SafeSearchHighRecallUserLabelRule,
SafeSearchNsfwNearPerfectAuthorRule,
SafeSearchNsfwHighPrecisionUserLabelRule,
SafeSearchNsfwAvatarImageUserLabelRule,
SafeSearchNsfwBannerImageUserLabelRule,
SafeSearchAbusiveHighRecallUserLabelRule,
SafeSearchNsfwTextAuthorLabelRule
)
)
case object UserSearchTypeaheadPolicy
extends VisibilityPolicy(
userRules = Seq(
SafeSearchAbusiveUserLabelRule,
SafeSearchHighRecallUserLabelRule,
SafeSearchNsfwNearPerfectAuthorRule,
SafeSearchNsfwHighPrecisionUserLabelRule,
SafeSearchNsfwAvatarImageUserLabelRule,
SafeSearchNsfwBannerImageUserLabelRule,
SafeSearchAbusiveHighRecallUserLabelRule,
SafeSearchNsfwTextAuthorLabelRule
),
tweetRules = Seq(DropAllRule)
)
case object SearchMixerSrpMinimalPolicy
extends VisibilityPolicy(
userRules = Seq(
AuthorBlocksViewerDropRule,
ViewerBlocksAuthorViewerOptInBlockingOnSearchRule,
ViewerMutesAuthorViewerOptInBlockingOnSearchRule
)
)
case object SearchMixerSrpStrictPolicy
extends VisibilityPolicy(
userRules = Seq(
AuthorBlocksViewerDropRule,
ViewerBlocksAuthorViewerOptInBlockingOnSearchRule,
ViewerMutesAuthorViewerOptInBlockingOnSearchRule,
DropNsfwAdminAuthorViewerOptInFilteringOnSearchRule,
NsfwNearPerfectAuthorRule,
NsfwHighPrecisionRule,
NsfwHighRecallRule,
NsfwSensitiveRule,
NsfwAvatarImageRule,
NsfwBannerImageRule
) ++ SearchBlenderRules.searchQueryMatchesTweetAuthorRules
.diff(Seq(SafeSearchNotGraduatedNonFollowersUserLabelRule))
)
case object SearchPeopleSrpPolicy
extends VisibilityPolicy(
userRules = SearchBlenderRules.searchQueryMatchesTweetAuthorRules
)
case object SearchPeopleTypeaheadPolicy
extends VisibilityPolicy(
userRules = SearchBlenderRules.searchQueryMatchesTweetAuthorRules
.diff(
Seq(
SafeSearchNotGraduatedNonFollowersUserLabelRule
)),
tweetRules = Seq(DropAllRule)
)
case object SearchPhotoPolicy
extends VisibilityPolicy(
tweetRules = SearchBlenderRules.tweetRelevanceRules,
userRules = SearchBlenderRules.userRelevanceRules,
policyRuleParams = SearchBlenderRules.basicBlockMutePolicyRuleParam
)
case object SearchTrendTakeoverPromotedTweetPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules
)
case object SearchVideoPolicy
extends VisibilityPolicy(
tweetRules = SearchBlenderRules.tweetRelevanceRules,
userRules = SearchBlenderRules.userRelevanceRules,
policyRuleParams = SearchBlenderRules.basicBlockMutePolicyRuleParam
)
case object SearchLatestPolicy
extends VisibilityPolicy(
tweetRules = SearchBlenderRules.tweetRecencyRules,
userRules = SearchBlenderRules.userRecencyBaseRules,
policyRuleParams = SearchBlenderRules.basicBlockMutePolicyRuleParam
)
case object SearchTopPolicy
extends VisibilityPolicy(
tweetRules = SearchBlenderRules.tweetRelevanceRules,
userRules = Seq(SpammyUserModelHighPrecisionDropTweetRule) ++
SearchBlenderRules.basicBlockMuteRules ++
SearchBlenderRules.searchQueryMatchesTweetAuthorRules,
policyRuleParams = SearchBlenderRules.basicBlockMutePolicyRuleParam
)
case object SearchTopQigPolicy
extends VisibilityPolicy(
tweetRules = BaseQigPolicy.tweetRules ++
Seq(
UnsafeSearchGoreAndViolenceHighPrecisionAllUsersTweetLabelDropRule,
UnsafeSearchGoreAndViolenceReportedHeuristicsAllUsersTweetLabelDropRule,
UnsafeSearchNsfwCardImageAllUsersTweetLabelDropRule,
UnsafeSearchNsfwReportedHeuristicsAllUsersTweetLabelDropRule,
UnsafeSearchNsfwHighPrecisionAllUsersTweetLabelDropRule
) ++
SearchTopPolicy.tweetRules.diff(
Seq(
SearchIpiSafeSearchWithoutUserInQueryDropRule,
SearchEdiSafeSearchWithoutUserInQueryDropRule,
HighSpammyTweetContentScoreTrendsTopTweetLabelDropRule,
UnsafeSearchNsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
UnsafeSearchGoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
UnsafeSearchGoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
UnsafeSearchNsfwCardImageAllUsersTweetLabelRule,
UnsafeSearchNsfwReportedHeuristicsAllUsersTweetLabelRule
) ++
SearchTopPolicy.tweetRules.intersect(BaseQigPolicy.tweetRules)),
userRules = BaseQigPolicy.userRules ++ Seq(
DropNsfwAdminAuthorViewerOptInFilteringOnSearchRule,
NsfwNearPerfectAuthorRule,
) ++ SearchTopPolicy.userRules.diff(
SearchTopPolicy.userRules.intersect(BaseQigPolicy.userRules)),
policyRuleParams = SearchBlenderRules.basicBlockMutePolicyRuleParam
)
case object SafeSearchStrictPolicy
extends VisibilityPolicy(
tweetRules = Seq(
DropOuterCommunityTweetsRule,
) ++ VisibilityPolicy.baseTweetRules ++ Seq(
AbusiveTweetLabelRule,
LowQualityTweetLabelDropRule,
HighProactiveTosScoreTweetLabelDropSearchRule,
NsfwHighPrecisionTweetLabelRule,
GoreAndViolenceHighPrecisionTweetLabelRule,
NsfwReportedHeuristicsTweetLabelRule,
GoreAndViolenceReportedHeuristicsTweetLabelRule,
NsfwCardImageTweetLabelRule,
NsfwHighRecallTweetLabelRule,
NsfwVideoTweetLabelDropRule,
NsfwTextTweetLabelDropRule,
SpamHighRecallTweetLabelDropRule,
DuplicateContentTweetLabelDropRule,
GoreAndViolenceTweetLabelRule,
UntrustedUrlTweetLabelRule,
DownrankSpamReplyTweetLabelRule,
SearchBlacklistTweetLabelRule,
SearchBlacklistHighRecallTweetLabelDropRule,
AutomationTweetLabelRule,
DuplicateMentionTweetLabelRule,
BystanderAbusiveTweetLabelRule,
SafetyCrisisLevel3DropRule,
SafetyCrisisLevel4DropRule,
DoNotAmplifyDropRule,
SmyteSpamTweetLabelDropRule,
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
) ++ LimitedEngagementBaseRules.tweetRules
++ SearchBlenderRules.tweetAvoidRules,
userRules = Seq(
AbusiveRule,
LowQualityRule,
ReadOnlyRule,
SearchBlacklistRule,
SearchNsfwTextRule,
CompromisedRule,
SpamHighRecallRule,
DuplicateContentRule,
NsfwHighPrecisionRule,
NsfwAvatarImageRule,
NsfwBannerImageRule,
AbusiveHighRecallRule,
DoNotAmplifyNonFollowerRule,
NotGraduatedNonFollowerRule,
SearchLikelyIvsLabelNonFollowerDropUserRule,
DownrankSpamReplyNonAuthorRule,
NsfwTextNonAuthorDropRule,
)
)
case object StickersTimelinePolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules,
userRules = Seq(
AbusiveRule,
LowQualityRule,
ReadOnlyRule,
CompromisedRule,
SearchBlacklistRule,
SearchNsfwTextRule,
DuplicateContentRule,
EngagementSpammerRule,
EngagementSpammerHighRecallRule,
NsfwSensitiveRule,
SpamHighRecallRule,
AbusiveHighRecallRule
)
)
case object StratoExtLimitedEngagementsPolicy
extends VisibilityPolicy(
tweetRules =
VisibilityPolicy.baseTweetRules ++ LimitedEngagementBaseRules.tweetRules
)
case object InternalPromotedContentPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules
)
case object StreamServicesPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++ Seq(
AbusiveTweetLabelRule,
LowQualityTweetLabelDropRule,
NsfwHighPrecisionTweetLabelRule,
GoreAndViolenceHighPrecisionTweetLabelRule,
NsfwReportedHeuristicsTweetLabelRule,
GoreAndViolenceReportedHeuristicsTweetLabelRule,
NsfwCardImageTweetLabelRule,
NsfwVideoTweetLabelDropRule,
NsfwTextTweetLabelDropRule,
SpamHighRecallTweetLabelDropRule,
DuplicateContentTweetLabelDropRule,
BystanderAbusiveTweetLabelRule,
SmyteSpamTweetLabelDropRule
),
userRules = Seq(NsfwTextNonAuthorDropRule)
)
case object SuperLikePolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++ Seq(
AbusePolicyEpisodicTweetLabelDropRule,
EmergencyDropRule,
NsfwHighPrecisionTweetLabelRule,
GoreAndViolenceHighPrecisionTweetLabelRule,
NsfwReportedHeuristicsTweetLabelRule,
GoreAndViolenceReportedHeuristicsTweetLabelRule,
NsfwCardImageTweetLabelRule,
NsfwVideoTweetLabelDropRule,
NsfwTextTweetLabelDropRule
),
userRules = Seq(NsfwTextNonAuthorDropRule)
)
case object TimelineFocalTweetPolicy
extends VisibilityPolicy(
tweetRules = Seq(
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
) ++ LimitedEngagementBaseRules.tweetRules
)
case object TimelineBookmarkPolicy
extends VisibilityPolicy(
tweetRules =
Seq(
DropCommunityTweetsRule,
DropCommunityTweetCommunityNotVisibleRule,
DropProtectedCommunityTweetsRule,
DropHiddenCommunityTweetsRule,
DropAuthorRemovedCommunityTweetsRule,
SpamTweetLabelRule,
PdnaTweetLabelRule,
BounceOuterTweetTombstoneRule,
BounceQuotedTweetTombstoneRule,
DropExclusiveTweetContentRule,
DropTrustedFriendsTweetContentRule,
) ++
Seq(
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
ViewerBlocksAuthorInnerQuotedTweetInterstitialRule,
ViewerMutesAuthorInnerQuotedTweetInterstitialRule,
NsfwCardImageAllUsersTweetLabelRule,
) ++ LimitedEngagementBaseRules.tweetRules,
deletedTweetRules = Seq(
TombstoneBounceDeletedTweetRule,
TombstoneDeletedQuotedTweetRule
),
userUnavailableStateRules = Seq(
SuspendedUserUnavailableTweetTombstoneRule,
DeactivatedUserUnavailableTweetTombstoneRule,
OffBoardedUserUnavailableTweetTombstoneRule,
ErasedUserUnavailableTweetTombstoneRule,
ProtectedUserUnavailableTweetTombstoneRule,
AuthorBlocksViewerUserUnavailableInnerQuotedTweetTombstoneRule,
UserUnavailableTweetTombstoneRule,
ViewerBlocksAuthorUserUnavailableInnerQuotedTweetInterstitialRule,
ViewerMutesAuthorUserUnavailableInnerQuotedTweetInterstitialRule
),
)
case object TimelineListsPolicy
extends VisibilityPolicy(
tweetRules =
Seq(
DropOuterCommunityTweetsRule,
DropStaleTweetsRule,
) ++
VisibilityPolicy.baseTweetRules ++
Seq(
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
NsfwHighPrecisionTweetLabelAvoidRule,
NsfwHighRecallTweetLabelAvoidRule,
GoreAndViolenceHighPrecisionAvoidAllUsersTweetLabelRule,
NsfwReportedHeuristicsAvoidAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAvoidAllUsersTweetLabelRule,
NsfwCardImageAvoidAllUsersTweetLabelRule,
DoNotAmplifyTweetLabelAvoidRule,
NsfaHighPrecisionTweetLabelAvoidRule,
) ++ LimitedEngagementBaseRules.tweetRules
)
case object TimelineFavoritesPolicy
extends VisibilityPolicy(
tweetRules =
Seq(
DropOuterCommunityTweetsRule,
DropStaleTweetsRule,
)
++ TimelineProfileRules.baseTweetRules
++ Seq(
DynamicProductAdDropTweetLabelRule,
NsfwHighPrecisionTombstoneInnerQuotedTweetLabelRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.AdultMediaNsfwHighPrecisionTweetLabelDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.ViolentMediaGoreAndViolenceHighPrecisionDropSettingLeveTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.AdultMediaNsfwReportedHeuristicsTweetLabelDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.ViolentMediaGoreAndViolenceReportedHeuristicsDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.AdultMediaNsfwCardImageTweetLabelDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.OtherSensitiveMediaNsfwUserTweetFlagDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.OtherSensitiveMediaNsfwAdminTweetFlagDropSettingLevelTombstoneRule,
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
ReportedTweetInterstitialRule,
ViewerMutesAuthorInterstitialRule,
ViewerBlocksAuthorInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwHighPrecisionTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceHighPrecisionInterstitialRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwReportedHeuristicsTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceReportedHeuristicsInterstitialRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwCardImageTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwUserTweetFlagInterstitialRule,
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwAdminTweetFlagInterstitialRule,
NsfwHighPrecisionTweetLabelAvoidRule,
NsfwHighRecallTweetLabelAvoidRule,
GoreAndViolenceHighPrecisionAvoidAllUsersTweetLabelRule,
NsfwReportedHeuristicsAvoidAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAvoidAllUsersTweetLabelRule,
NsfwCardImageAvoidAllUsersTweetLabelRule,
DoNotAmplifyTweetLabelAvoidRule,
NsfaHighPrecisionTweetLabelAvoidRule,
) ++ LimitedEngagementBaseRules.tweetRules,
deletedTweetRules = Seq(
TombstoneDeletedQuotedTweetRule,
TombstoneBounceDeletedQuotedTweetRule
),
userUnavailableStateRules = Seq(
SuspendedUserUnavailableInnerQuotedTweetTombstoneRule,
DeactivatedUserUnavailableInnerQuotedTweetTombstoneRule,
OffBoardedUserUnavailableInnerQuotedTweetTombstoneRule,
ErasedUserUnavailableInnerQuotedTweetTombstoneRule,
ProtectedUserUnavailableInnerQuotedTweetTombstoneRule,
AuthorBlocksViewerUserUnavailableInnerQuotedTweetTombstoneRule,
ViewerBlocksAuthorUserUnavailableInnerQuotedTweetInterstitialRule,
ViewerMutesAuthorUserUnavailableInnerQuotedTweetInterstitialRule
),
policyRuleParams = SensitiveMediaSettingsProfileTimelineBaseRules.policyRuleParams
)
case object ProfileMixerFavoritesPolicy
extends VisibilityPolicy(
tweetRules = Seq(
DropStaleTweetsRule,
DropExclusiveTweetContentRule,
DropOuterCommunityTweetsRule,
),
deletedTweetRules = Seq(
TombstoneDeletedQuotedTweetRule,
TombstoneBounceDeletedQuotedTweetRule
)
)
case object TimelineMediaPolicy
extends VisibilityPolicy(
TimelineProfileRules.baseTweetRules
++ Seq(
NsfwHighPrecisionTombstoneInnerQuotedTweetLabelRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.AdultMediaNsfwHighPrecisionTweetLabelDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.ViolentMediaGoreAndViolenceHighPrecisionDropSettingLeveTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.AdultMediaNsfwReportedHeuristicsTweetLabelDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.ViolentMediaGoreAndViolenceReportedHeuristicsDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.AdultMediaNsfwCardImageTweetLabelDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.OtherSensitiveMediaNsfwUserTweetFlagDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.OtherSensitiveMediaNsfwAdminTweetFlagDropSettingLevelTombstoneRule,
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
ReportedTweetInterstitialRule,
ViewerMutesAuthorInnerQuotedTweetInterstitialRule,
ViewerBlocksAuthorInnerQuotedTweetInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwHighPrecisionTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceHighPrecisionInterstitialRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwReportedHeuristicsTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceReportedHeuristicsInterstitialRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwCardImageTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwUserTweetFlagInterstitialRule,
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwAdminTweetFlagInterstitialRule,
NsfwHighPrecisionTweetLabelAvoidRule,
NsfwHighRecallTweetLabelAvoidRule,
GoreAndViolenceHighPrecisionAvoidAllUsersTweetLabelRule,
NsfwReportedHeuristicsAvoidAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAvoidAllUsersTweetLabelRule,
NsfwCardImageAvoidAllUsersTweetLabelRule,
DoNotAmplifyTweetLabelAvoidRule,
NsfaHighPrecisionTweetLabelAvoidRule,
) ++ LimitedEngagementBaseRules.tweetRules,
deletedTweetRules = Seq(
TombstoneBounceDeletedOuterTweetRule,
TombstoneDeletedQuotedTweetRule,
TombstoneBounceDeletedQuotedTweetRule
),
userUnavailableStateRules = Seq(
SuspendedUserUnavailableInnerQuotedTweetTombstoneRule,
DeactivatedUserUnavailableInnerQuotedTweetTombstoneRule,
OffBoardedUserUnavailableInnerQuotedTweetTombstoneRule,
ErasedUserUnavailableInnerQuotedTweetTombstoneRule,
ProtectedUserUnavailableInnerQuotedTweetTombstoneRule,
AuthorBlocksViewerUserUnavailableInnerQuotedTweetTombstoneRule,
ViewerBlocksAuthorUserUnavailableInnerQuotedTweetInterstitialRule,
ViewerMutesAuthorUserUnavailableInnerQuotedTweetInterstitialRule
),
policyRuleParams = SensitiveMediaSettingsProfileTimelineBaseRules.policyRuleParams
)
case object ProfileMixerMediaPolicy
extends VisibilityPolicy(
tweetRules = Seq(
DropStaleTweetsRule,
DropExclusiveTweetContentRule
),
deletedTweetRules = Seq(
TombstoneBounceDeletedOuterTweetRule,
TombstoneDeletedQuotedTweetRule,
TombstoneBounceDeletedQuotedTweetRule
)
)
object TimelineProfileRules {
val baseTweetRules: Seq[Rule] = Seq(
TombstoneCommunityTweetsRule,
TombstoneCommunityTweetCommunityNotVisibleRule,
TombstoneProtectedCommunityTweetsRule,
TombstoneHiddenCommunityTweetsRule,
TombstoneAuthorRemovedCommunityTweetsRule,
SpamQuotedTweetLabelTombstoneRule,
SpamTweetLabelRule,
PdnaQuotedTweetLabelTombstoneRule,
PdnaTweetLabelRule,
BounceTweetLabelTombstoneRule,
TombstoneExclusiveQuotedTweetContentRule,
DropExclusiveTweetContentRule,
DropTrustedFriendsTweetContentRule
)
val tweetRules: Seq[Rule] =
Seq(
DynamicProductAdDropTweetLabelRule,
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
ReportedTweetInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
NsfwHighPrecisionTweetLabelAvoidRule,
NsfwHighRecallTweetLabelAvoidRule,
GoreAndViolenceHighPrecisionAvoidAllUsersTweetLabelRule,
NsfwReportedHeuristicsAvoidAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAvoidAllUsersTweetLabelRule,
NsfwCardImageAvoidAllUsersTweetLabelRule,
NsfwTextTweetLabelAvoidRule,
DoNotAmplifyTweetLabelAvoidRule,
NsfaHighPrecisionTweetLabelAvoidRule,
) ++ LimitedEngagementBaseRules.tweetRules
val tweetTombstoneRules: Seq[Rule] =
Seq(
DynamicProductAdDropTweetLabelRule,
NsfwHighPrecisionInnerQuotedTweetLabelRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.AdultMediaNsfwHighPrecisionTweetLabelDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.ViolentMediaGoreAndViolenceHighPrecisionDropSettingLeveTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.AdultMediaNsfwReportedHeuristicsTweetLabelDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.ViolentMediaGoreAndViolenceReportedHeuristicsDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.AdultMediaNsfwCardImageTweetLabelDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.OtherSensitiveMediaNsfwUserTweetFlagDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.OtherSensitiveMediaNsfwAdminTweetFlagDropSettingLevelTombstoneRule,
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
ReportedTweetInterstitialRule,
ViewerMutesAuthorInnerQuotedTweetInterstitialRule,
ViewerBlocksAuthorInnerQuotedTweetInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwHighPrecisionTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceHighPrecisionInterstitialRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwReportedHeuristicsTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceReportedHeuristicsInterstitialRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwCardImageTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwUserTweetFlagInterstitialRule,
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwAdminTweetFlagInterstitialRule,
NsfwHighPrecisionTweetLabelAvoidRule,
NsfwHighRecallTweetLabelAvoidRule,
GoreAndViolenceHighPrecisionAvoidAllUsersTweetLabelRule,
NsfwReportedHeuristicsAvoidAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAvoidAllUsersTweetLabelRule,
NsfwCardImageAvoidAllUsersTweetLabelRule,
DoNotAmplifyTweetLabelAvoidRule,
NsfaHighPrecisionTweetLabelAvoidRule,
) ++ LimitedEngagementBaseRules.tweetRules
}
case object TimelineProfilePolicy
extends VisibilityPolicy(
tweetRules =
Seq(
DropOuterCommunityTweetsRule,
DropStaleTweetsRule,
)
++ TimelineProfileRules.baseTweetRules
++ TimelineProfileRules.tweetTombstoneRules,
deletedTweetRules = Seq(
TombstoneBounceDeletedOuterTweetRule,
TombstoneDeletedQuotedTweetRule,
TombstoneBounceDeletedQuotedTweetRule,
),
userUnavailableStateRules = Seq(
SuspendedUserUnavailableInnerQuotedTweetTombstoneRule,
DeactivatedUserUnavailableInnerQuotedTweetTombstoneRule,
OffBoardedUserUnavailableInnerQuotedTweetTombstoneRule,
ErasedUserUnavailableInnerQuotedTweetTombstoneRule,
ProtectedUserUnavailableInnerQuotedTweetTombstoneRule,
AuthorBlocksViewerUserUnavailableInnerQuotedTweetTombstoneRule,
ViewerBlocksAuthorUserUnavailableInnerQuotedTweetInterstitialRule,
ViewerMutesAuthorUserUnavailableInnerQuotedTweetInterstitialRule
),
policyRuleParams = SensitiveMediaSettingsProfileTimelineBaseRules.policyRuleParams
)
case object TimelineProfileAllPolicy
extends VisibilityPolicy(
TimelineProfileRules.baseTweetRules
++ TimelineProfileRules.tweetTombstoneRules,
deletedTweetRules = Seq(
TombstoneBounceDeletedOuterTweetRule,
TombstoneDeletedQuotedTweetRule,
TombstoneBounceDeletedQuotedTweetRule,
),
userUnavailableStateRules = Seq(
SuspendedUserUnavailableInnerQuotedTweetTombstoneRule,
DeactivatedUserUnavailableInnerQuotedTweetTombstoneRule,
OffBoardedUserUnavailableInnerQuotedTweetTombstoneRule,
ErasedUserUnavailableInnerQuotedTweetTombstoneRule,
ProtectedUserUnavailableInnerQuotedTweetTombstoneRule,
AuthorBlocksViewerUserUnavailableInnerQuotedTweetTombstoneRule,
ViewerBlocksAuthorUserUnavailableInnerQuotedTweetInterstitialRule,
ViewerMutesAuthorUserUnavailableInnerQuotedTweetInterstitialRule
),
policyRuleParams = SensitiveMediaSettingsProfileTimelineBaseRules.policyRuleParams
)
case object TimelineProfileSuperFollowsPolicy
extends VisibilityPolicy(
tweetRules =
Seq(
DropOuterCommunityTweetsRule
) ++
VisibilityPolicy.baseTweetRules ++
TimelineProfileRules.tweetRules
)
case object TimelineReactiveBlendingPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++
Seq(
ViewerHasMatchingMutedKeywordForHomeTimelineRule,
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
) ++ LimitedEngagementBaseRules.tweetRules
)
case object TimelineHomePolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseQuotedTweetTombstoneRules ++
VisibilityPolicy.baseTweetRules ++
Seq(
NullcastedTweetRule,
DropOuterCommunityTweetsRule,
DynamicProductAdDropTweetLabelRule,
MutedRetweetsRule,
DropAllAuthorRemovedCommunityTweetsRule,
DropAllHiddenCommunityTweetsRule,
AbusePolicyEpisodicTweetLabelDropRule,
EmergencyDropRule,
SafetyCrisisLevel4DropRule,
ViewerHasMatchingMutedKeywordForHomeTimelineRule,
SensitiveMediaTweetDropRules.AdultMediaNsfwHighPrecisionTweetLabelDropRule,
SensitiveMediaTweetDropRules.ViolentMediaGoreAndViolenceHighPrecisionDropRule,
SensitiveMediaTweetDropRules.AdultMediaNsfwReportedHeuristicsTweetLabelDropRule,
SensitiveMediaTweetDropRules.ViolentMediaGoreAndViolenceReportedHeuristicsDropRule,
SensitiveMediaTweetDropRules.AdultMediaNsfwCardImageTweetLabelDropRule,
SensitiveMediaTweetDropRules.OtherSensitiveMediaNsfwUserTweetFlagDropRule,
SensitiveMediaTweetDropRules.OtherSensitiveMediaNsfwAdminTweetFlagDropRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwHighPrecisionTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceHighPrecisionInterstitialRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwReportedHeuristicsTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceReportedHeuristicsInterstitialRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwCardImageTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwUserTweetFlagInterstitialRule,
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwAdminTweetFlagInterstitialRule,
NsfwHighPrecisionTweetLabelAvoidRule,
NsfwHighRecallTweetLabelAvoidRule,
GoreAndViolenceHighPrecisionAvoidAllUsersTweetLabelRule,
NsfwReportedHeuristicsAvoidAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAvoidAllUsersTweetLabelRule,
NsfwCardImageAvoidAllUsersTweetLabelRule,
DoNotAmplifyTweetLabelAvoidRule,
NsfaHighPrecisionTweetLabelAvoidRule,
)
++
LimitedEngagementBaseRules.tweetRules,
userRules = Seq(
ViewerMutesAuthorRule,
ViewerBlocksAuthorRule,
DeciderableAuthorBlocksViewerDropRule,
ProtectedAuthorDropRule,
SuspendedAuthorRule,
DeactivatedAuthorRule,
ErasedAuthorRule,
OffboardedAuthorRule,
DropTakendownUserRule
),
policyRuleParams = SensitiveMediaSettingsTimelineHomeBaseRules.policyRuleParams
)
case object BaseTimelineHomePolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseQuotedTweetTombstoneRules ++
VisibilityPolicy.baseTweetRules ++
Seq(
NullcastedTweetRule,
DropOuterCommunityTweetsRule,
DynamicProductAdDropTweetLabelRule,
MutedRetweetsRule,
DropAllAuthorRemovedCommunityTweetsRule,
DropAllHiddenCommunityTweetsRule,
AbusePolicyEpisodicTweetLabelDropRule,
EmergencyDropRule,
SafetyCrisisLevel4DropRule,
ViewerHasMatchingMutedKeywordForHomeTimelineRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
NsfwHighPrecisionTweetLabelAvoidRule,
NsfwHighRecallTweetLabelAvoidRule,
GoreAndViolenceHighPrecisionAvoidAllUsersTweetLabelRule,
NsfwReportedHeuristicsAvoidAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAvoidAllUsersTweetLabelRule,
NsfwCardImageAvoidAllUsersTweetLabelRule,
DoNotAmplifyTweetLabelAvoidRule,
NsfaHighPrecisionTweetLabelAvoidRule,
)
++
LimitedEngagementBaseRules.tweetRules,
userRules = Seq(
ViewerMutesAuthorRule,
ViewerBlocksAuthorRule,
DeciderableAuthorBlocksViewerDropRule,
ProtectedAuthorDropRule,
SuspendedAuthorRule,
DeactivatedAuthorRule,
ErasedAuthorRule,
OffboardedAuthorRule,
DropTakendownUserRule
)
)
case object TimelineHomeHydrationPolicy
extends VisibilityPolicy(
tweetRules =
VisibilityPolicy.baseQuotedTweetTombstoneRules ++
VisibilityPolicy.baseTweetRules ++
Seq(
SensitiveMediaTweetDropRules.AdultMediaNsfwHighPrecisionTweetLabelDropRule,
SensitiveMediaTweetDropRules.ViolentMediaGoreAndViolenceHighPrecisionDropRule,
SensitiveMediaTweetDropRules.AdultMediaNsfwReportedHeuristicsTweetLabelDropRule,
SensitiveMediaTweetDropRules.ViolentMediaGoreAndViolenceReportedHeuristicsDropRule,
SensitiveMediaTweetDropRules.AdultMediaNsfwCardImageTweetLabelDropRule,
SensitiveMediaTweetDropRules.OtherSensitiveMediaNsfwUserTweetFlagDropRule,
SensitiveMediaTweetDropRules.OtherSensitiveMediaNsfwAdminTweetFlagDropRule,
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwHighPrecisionTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceHighPrecisionInterstitialRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwReportedHeuristicsTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceReportedHeuristicsInterstitialRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwCardImageTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwUserTweetFlagInterstitialRule,
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwAdminTweetFlagInterstitialRule,
NsfaHighPrecisionTweetLabelAvoidRule,
NsfwHighPrecisionTweetLabelAvoidRule,
NsfwHighRecallTweetLabelAvoidRule,
) ++ LimitedEngagementBaseRules.tweetRules,
policyRuleParams = SensitiveMediaSettingsTimelineHomeBaseRules.policyRuleParams
)
case object TimelineHomeLatestPolicy
extends VisibilityPolicy(
tweetRules =
VisibilityPolicy.baseQuotedTweetTombstoneRules ++
VisibilityPolicy.baseTweetRules ++
Seq(
NullcastedTweetRule,
DropOuterCommunityTweetsRule,
DynamicProductAdDropTweetLabelRule,
MutedRetweetsRule,
ViewerHasMatchingMutedKeywordForHomeTimelineRule,
SensitiveMediaTweetDropRules.AdultMediaNsfwHighPrecisionTweetLabelDropRule,
SensitiveMediaTweetDropRules.ViolentMediaGoreAndViolenceHighPrecisionDropRule,
SensitiveMediaTweetDropRules.AdultMediaNsfwReportedHeuristicsTweetLabelDropRule,
SensitiveMediaTweetDropRules.ViolentMediaGoreAndViolenceReportedHeuristicsDropRule,
SensitiveMediaTweetDropRules.AdultMediaNsfwCardImageTweetLabelDropRule,
SensitiveMediaTweetDropRules.OtherSensitiveMediaNsfwUserTweetFlagDropRule,
SensitiveMediaTweetDropRules.OtherSensitiveMediaNsfwAdminTweetFlagDropRule,
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwHighPrecisionTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceHighPrecisionInterstitialRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwReportedHeuristicsTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceReportedHeuristicsInterstitialRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwCardImageTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwUserTweetFlagInterstitialRule,
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwAdminTweetFlagInterstitialRule,
NsfwHighPrecisionTweetLabelAvoidRule,
NsfwHighRecallTweetLabelAvoidRule,
GoreAndViolenceHighPrecisionAvoidAllUsersTweetLabelRule,
NsfwReportedHeuristicsAvoidAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAvoidAllUsersTweetLabelRule,
NsfwCardImageAvoidAllUsersTweetLabelRule,
DoNotAmplifyTweetLabelAvoidRule,
NsfaHighPrecisionTweetLabelAvoidRule,
)
++
LimitedEngagementBaseRules.tweetRules,
userRules = Seq(
ViewerMutesAuthorRule,
ViewerBlocksAuthorRule,
DeciderableAuthorBlocksViewerDropRule,
ProtectedAuthorDropRule,
SuspendedAuthorRule,
DeactivatedAuthorRule,
ErasedAuthorRule,
OffboardedAuthorRule,
DropTakendownUserRule
),
policyRuleParams = SensitiveMediaSettingsTimelineHomeBaseRules.policyRuleParams
)
case object TimelineModeratedTweetsHydrationPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++
Seq(
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
) ++ LimitedEngagementBaseRules.tweetRules
)
case object SignalsReactionsPolicy
extends VisibilityPolicy(
tweetRules = Seq(
AuthorBlocksViewerDropRule
) ++ LimitedEngagementBaseRules.tweetRules
)
case object SignalsTweetReactingUsersPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules :+
NsfwVideoTweetLabelDropRule :+
NsfwTextAllUsersTweetLabelDropRule,
userRules = Seq(
CompromisedNonFollowerWithUqfRule,
EngagementSpammerNonFollowerWithUqfRule,
LowQualityNonFollowerWithUqfRule,
ReadOnlyNonFollowerWithUqfRule,
SpamHighRecallNonFollowerWithUqfRule,
AuthorBlocksViewerDropRule,
ProtectedAuthorDropRule,
SuspendedAuthorRule,
NsfwTextNonAuthorDropRule
)
)
case object SocialProofPolicy
extends VisibilityPolicy(
tweetRules = FilterDefaultPolicy.tweetRules,
userRules = Seq(
ProtectedAuthorDropRule,
SuspendedAuthorRule,
AuthorBlocksViewerDropRule,
ViewerBlocksAuthorRule
)
)
case object TimelineLikedByPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules :+
NsfwVideoTweetLabelDropRule :+
NsfwTextAllUsersTweetLabelDropRule,
userRules = TimelineLikedByRules.UserRules :+ NsfwTextNonAuthorDropRule
)
case object TimelineRetweetedByPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules :+
NsfwVideoTweetLabelDropRule :+
NsfwTextAllUsersTweetLabelDropRule,
userRules = Seq(
CompromisedNonFollowerWithUqfRule,
EngagementSpammerNonFollowerWithUqfRule,
LowQualityNonFollowerWithUqfRule,
ReadOnlyNonFollowerWithUqfRule,
SpamHighRecallNonFollowerWithUqfRule,
NsfwTextNonAuthorDropRule
)
)
case object TimelineSuperLikedByPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules :+
NsfwVideoTweetLabelDropRule :+
NsfwTextAllUsersTweetLabelDropRule,
userRules = Seq(
CompromisedNonFollowerWithUqfRule,
EngagementSpammerNonFollowerWithUqfRule,
LowQualityNonFollowerWithUqfRule,
ReadOnlyNonFollowerWithUqfRule,
SpamHighRecallNonFollowerWithUqfRule,
NsfwTextNonAuthorDropRule
)
)
case object TimelineContentControlsPolicy
extends VisibilityPolicy(
tweetRules = TopicsLandingPageTopicRecommendationsPolicy.tweetRules,
userRules = TopicsLandingPageTopicRecommendationsPolicy.userRules
)
case object TimelineConversationsPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++
Seq(
AbusiveNonFollowerTweetLabelRule,
LowQualityTweetLabelDropRule,
SpamHighRecallTweetLabelDropRule,
DuplicateContentTweetLabelDropRule,
BystanderAbusiveNonFollowerTweetLabelRule,
UntrustedUrlAllViewersTweetLabelRule,
DownrankSpamReplyAllViewersTweetLabelRule,
SmyteSpamTweetLabelDropRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.AdultMediaNsfwHighPrecisionTweetLabelDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.ViolentMediaGoreAndViolenceHighPrecisionDropSettingLeveTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.AdultMediaNsfwReportedHeuristicsTweetLabelDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.ViolentMediaGoreAndViolenceReportedHeuristicsDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.AdultMediaNsfwCardImageTweetLabelDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.OtherSensitiveMediaNsfwUserTweetFlagDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.OtherSensitiveMediaNsfwAdminTweetFlagDropSettingLevelTombstoneRule,
MutedKeywordForTweetRepliesInterstitialRule,
ReportedTweetInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwHighPrecisionTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceHighPrecisionInterstitialRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwReportedHeuristicsTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceReportedHeuristicsInterstitialRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwCardImageTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwUserTweetFlagInterstitialRule,
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwAdminTweetFlagInterstitialRule,
AbusiveHighRecallNonFollowerTweetLabelRule,
) ++ LimitedEngagementBaseRules.tweetRules,
userRules = Seq(
AbusiveRule,
LowQualityRule,
ReadOnlyRule,
LowQualityHighRecallRule,
CompromisedRule,
SpamHighRecallRule,
AbusiveHighRecallRule,
DownrankSpamReplyAllViewersRule,
),
policyRuleParams = SensitiveMediaSettingsConversationBaseRules.policyRuleParams
)
case object TimelineFollowingActivityPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++
Seq(
AbusiveTweetLabelRule,
BystanderAbusiveTweetLabelRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
) ++ LimitedEngagementBaseRules.tweetRules
)
case object TimelineInjectionPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++ Seq(
NsfwHighPrecisionTweetLabelRule,
GoreAndViolenceHighPrecisionTweetLabelRule,
NsfwReportedHeuristicsTweetLabelRule,
GoreAndViolenceReportedHeuristicsTweetLabelRule,
NsfwCardImageTweetLabelRule,
NsfwHighRecallTweetLabelRule,
NsfwVideoTweetLabelDropRule,
NsfwTextTweetLabelDropRule,
SafetyCrisisLevel2DropRule,
SafetyCrisisLevel3DropRule,
SafetyCrisisLevel4DropRule,
DoNotAmplifyDropRule,
HighProactiveTosScoreTweetLabelDropRule
),
userRules = Seq(
DoNotAmplifyNonFollowerRule,
NotGraduatedNonFollowerRule,
LikelyIvsLabelNonFollowerDropUserRule,
NsfwTextNonAuthorDropRule
)
)
case object TimelineMentionsPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++
Seq(
LowQualityTweetLabelDropRule,
SpamHighRecallTweetLabelDropRule,
DuplicateContentTweetLabelDropRule,
DuplicateMentionUqfTweetLabelRule,
LowQualityMentionTweetLabelRule,
SmyteSpamTweetLabelDropRule,
ToxicityReplyFilterDropNotificationRule,
AbusiveUqfNonFollowerTweetLabelRule,
UntrustedUrlUqfNonFollowerTweetLabelRule,
DownrankSpamReplyUqfNonFollowerTweetLabelRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
) ++ LimitedEngagementBaseRules.tweetRules,
userRules = Seq(
AbusiveRule,
LowQualityRule,
ReadOnlyRule,
CompromisedRule,
SpamHighRecallRule,
DuplicateContentRule,
AbusiveHighRecallRule,
EngagementSpammerNonFollowerWithUqfRule,
EngagementSpammerHighRecallNonFollowerWithUqfRule,
DownrankSpamReplyNonFollowerWithUqfRule
)
)
case object TweetEngagersPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules,
userRules = Seq(
CompromisedNonFollowerWithUqfRule,
EngagementSpammerNonFollowerWithUqfRule,
LowQualityNonFollowerWithUqfRule,
ReadOnlyNonFollowerWithUqfRule,
SpamHighRecallNonFollowerWithUqfRule
)
)
case object TweetWritesApiPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++ Seq(
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
) ++ LimitedEngagementBaseRules.tweetRules
)
case object QuotedTweetRulesPolicy
extends VisibilityPolicy(
quotedTweetRules = Seq(
DeactivatedAuthorRule,
ErasedAuthorRule,
OffboardedAuthorRule,
SuspendedAuthorRule,
AuthorBlocksOuterAuthorRule,
ViewerBlocksAuthorRule,
AuthorBlocksViewerDropRule,
ViewerMutesAndDoesNotFollowAuthorRule,
ProtectedQuoteTweetAuthorRule
)
)
case object TweetDetailPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++
Seq(
AuthorBlocksViewerDropRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.AdultMediaNsfwHighPrecisionTweetLabelDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.ViolentMediaGoreAndViolenceHighPrecisionDropSettingLeveTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.AdultMediaNsfwReportedHeuristicsTweetLabelDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.ViolentMediaGoreAndViolenceReportedHeuristicsDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.AdultMediaNsfwCardImageTweetLabelDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.OtherSensitiveMediaNsfwUserTweetFlagDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.OtherSensitiveMediaNsfwAdminTweetFlagDropSettingLevelTombstoneRule,
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwHighPrecisionTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceHighPrecisionInterstitialRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwReportedHeuristicsTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceReportedHeuristicsInterstitialRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwCardImageTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwUserTweetFlagInterstitialRule,
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwAdminTweetFlagInterstitialRule,
NsfwHighPrecisionTweetLabelAvoidRule,
NsfwHighRecallTweetLabelAvoidRule,
GoreAndViolenceHighPrecisionAvoidAllUsersTweetLabelRule,
NsfwReportedHeuristicsAvoidAdPlacementAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAvoidAdPlacementAllUsersTweetLabelRule,
NsfwCardImageAvoidAdPlacementAllUsersTweetLabelRule,
DoNotAmplifyTweetLabelAvoidRule,
NsfaHighPrecisionTweetLabelAvoidRule,
MutedKeywordForQuotedTweetTweetDetailInterstitialRule,
)
++ LimitedEngagementBaseRules.tweetRules,
policyRuleParams = SensitiveMediaSettingsTweetDetailBaseRules.policyRuleParams
)
case object BaseTweetDetailPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++
Seq(
AuthorBlocksViewerDropRule,
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
NsfwHighPrecisionTweetLabelAvoidRule,
NsfwHighRecallTweetLabelAvoidRule,
GoreAndViolenceHighPrecisionAvoidAllUsersTweetLabelRule,
NsfwReportedHeuristicsAvoidAdPlacementAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAvoidAdPlacementAllUsersTweetLabelRule,
NsfwCardImageAvoidAdPlacementAllUsersTweetLabelRule,
DoNotAmplifyTweetLabelAvoidRule,
NsfaHighPrecisionTweetLabelAvoidRule,
MutedKeywordForQuotedTweetTweetDetailInterstitialRule,
)
++ LimitedEngagementBaseRules.tweetRules
)
case object TweetDetailWithInjectionsHydrationPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++
Seq(
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
MutedKeywordForQuotedTweetTweetDetailInterstitialRule,
ReportedTweetInterstitialRule,
) ++ LimitedEngagementBaseRules.tweetRules,
userRules = UserTimelineRules.UserRules
)
case object TweetDetailNonTooPolicy
extends VisibilityPolicy(
tweetRules = Seq(
DropAllExclusiveTweetsRule,
DropAllTrustedFriendsTweetsRule,
) ++ BaseTweetDetailPolicy.tweetRules
)
case object RecosWritePathPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++ Seq(
AbusiveTweetLabelRule,
LowQualityTweetLabelDropRule,
NsfwHighPrecisionTweetLabelRule,
GoreAndViolenceHighPrecisionTweetLabelRule,
NsfwReportedHeuristicsTweetLabelRule,
GoreAndViolenceReportedHeuristicsTweetLabelRule,
NsfwCardImageTweetLabelRule,
NsfwVideoTweetLabelDropRule,
NsfwTextTweetLabelDropRule,
SpamHighRecallTweetLabelDropRule,
DuplicateContentTweetLabelDropRule,
BystanderAbusiveTweetLabelRule,
SmyteSpamTweetLabelDropRule
),
userRules = Seq(NsfwTextNonAuthorDropRule)
)
case object BrandSafetyPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++ Seq(
NsfwVideoTweetLabelDropRule,
NsfwTextTweetLabelDropRule,
NsfaHighRecallTweetLabelInterstitialRule
),
userRules = Seq(NsfwTextNonAuthorDropRule)
)
case object VideoAdsPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules
)
case object AppealsPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++
Seq(
NsfwCardImageAllUsersTweetLabelRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
)
)
case object TimelineConversationsDownrankingPolicy
extends VisibilityPolicy(
tweetRules = Seq(
HighToxicityScoreDownrankAbusiveQualitySectionRule,
UntrustedUrlConversationsTweetLabelRule,
DownrankSpamReplyConversationsTweetLabelRule,
DownrankSpamReplyConversationsAuthorLabelRule,
HighProactiveTosScoreTweetLabelDownrankingRule,
SafetyCrisisLevel3SectionRule,
SafetyCrisisLevel4SectionRule,
DoNotAmplifySectionRule,
DoNotAmplifySectionUserRule,
NotGraduatedConversationsAuthorLabelRule,
HighSpammyTweetContentScoreConvoDownrankAbusiveQualityRule,
HighCryptospamScoreConvoDownrankAbusiveQualityRule,
CopypastaSpamAbusiveQualityTweetLabelRule,
HighToxicityScoreDownrankLowQualitySectionRule,
HighPSpammyTweetScoreDownrankLowQualitySectionRule,
RitoActionedTweetDownrankLowQualitySectionRule,
HighToxicityScoreDownrankHighQualitySectionRule,
)
)
case object TimelineConversationsDownrankingMinimalPolicy
extends VisibilityPolicy(
tweetRules = Seq(
HighProactiveTosScoreTweetLabelDownrankingRule
)
)
case object TimelineHomeRecommendationsPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.union(
RecommendationsPolicy.tweetRules.filter(
_ != NsfwHighPrecisionTweetLabelRule
),
Seq(
SafetyCrisisLevel2DropRule,
SafetyCrisisLevel3DropRule,
SafetyCrisisLevel4DropRule,
HighProactiveTosScoreTweetLabelDropRule,
NsfwHighRecallTweetLabelRule,
),
BaseTimelineHomePolicy.tweetRules,
),
userRules = VisibilityPolicy.union(
RecommendationsPolicy.userRules,
BaseTimelineHomePolicy.userRules
)
)
case object TimelineHomeTopicFollowRecommendationsPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.union(
Seq(
SearchBlacklistTweetLabelRule,
GoreAndViolenceTopicHighRecallTweetLabelRule,
NsfwHighRecallTweetLabelRule,
),
RecommendationsPolicy.tweetRules
.filterNot(
Seq(
NsfwHighPrecisionTweetLabelRule,
).contains),
BaseTimelineHomePolicy.tweetRules
),
userRules = VisibilityPolicy.union(
RecommendationsPolicy.userRules,
BaseTimelineHomePolicy.userRules
)
)
case object TimelineScorerPolicy
extends VisibilityPolicy(
tweetRules = Seq(
AllowAllRule
)
)
case object FollowedTopicsTimelinePolicy
extends VisibilityPolicy(
userRules = Seq(
AuthorBlocksViewerDropRule,
ProtectedAuthorDropRule,
SuspendedAuthorRule
)
)
case object TopicsLandingPageTopicRecommendationsPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.union(
Seq(
SearchBlacklistTweetLabelRule,
GoreAndViolenceTopicHighRecallTweetLabelRule,
NsfwHighRecallTweetLabelRule
),
RecommendationsPolicy.tweetRules,
BaseTimelineHomePolicy.tweetRules,
),
userRules = VisibilityPolicy.union(
RecommendationsPolicy.userRules,
BaseTimelineHomePolicy.userRules
) ++ Seq(
AuthorBlocksViewerDropRule
)
)
case object ExploreRecommendationsPolicy
extends VisibilityPolicy(
tweetRules = Seq(
DropOuterCommunityTweetsRule,
SearchBlacklistTweetLabelRule,
GoreAndViolenceTopicHighRecallTweetLabelRule,
NsfwHighRecallTweetLabelRule,
DropTweetsWithGeoRestrictedMediaRule,
TweetNsfwUserDropRule,
TweetNsfwAdminDropRule,
ViewerHasMatchingMutedKeywordForHomeTimelineRule,
ViewerHasMatchingMutedKeywordForNotificationsRule,
) ++ VisibilityPolicy.union(
RecommendationsPolicy.tweetRules
),
userRules = VisibilityPolicy.union(
RecommendationsPolicy.userRules
) ++ Seq(
AuthorBlocksViewerDropRule,
ViewerMutesAuthorRule,
ViewerBlocksAuthorRule
)
)
case object TombstoningPolicy
extends VisibilityPolicy(
tweetRules = Seq(
TombstoneIf.ViewerIsBlockedByAuthor,
TombstoneIf.AuthorIsProtected,
TombstoneIf.ReplyIsModeratedByRootAuthor,
TombstoneIf.AuthorIsSuspended,
TombstoneIf.AuthorIsDeactivated,
InterstitialIf.ViewerHardMutedAuthor
)
)
case object TweetReplyNudgePolicy
extends VisibilityPolicy(
tweetRules = Seq(
SpamAllUsersTweetLabelRule,
PdnaAllUsersTweetLabelRule,
BounceAllUsersTweetLabelRule,
TweetNsfwAdminDropRule,
TweetNsfwUserDropRule,
NsfwHighRecallAllUsersTweetLabelDropRule,
NsfwHighPrecisionAllUsersTweetLabelDropRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelDropRule,
NsfwReportedHeuristicsAllUsersTweetLabelDropRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelDropRule,
NsfwCardImageAllUsersTweetLabelDropRule,
NsfwVideoAllUsersTweetLabelDropRule,
NsfwTextAllUsersTweetLabelDropRule,
),
userRules = Seq(
DropNsfwUserAuthorRule,
DropNsfwAdminAuthorRule,
NsfwTextAllUsersDropRule
)
)
case object HumanizationNudgePolicy
extends VisibilityPolicy(
userRules = UserTimelineRules.UserRules
)
case object TrendsRepresentativeTweetPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.union(
RecommendationsPolicy.tweetRules,
Seq(
AbusiveHighRecallTweetLabelRule,
BystanderAbusiveTweetLabelRule,
DuplicateContentTweetLabelDropRule,
LowQualityTweetLabelDropRule,
HighProactiveTosScoreTweetLabelDropRule,
NsfaHighRecallTweetLabelRule,
NsfwCardImageAllUsersTweetLabelDropRule,
NsfwHighPrecisionTweetLabelRule,
NsfwHighRecallAllUsersTweetLabelDropRule,
NsfwVideoTweetLabelDropRule,
NsfwTextTweetLabelDropRule,
PdnaAllUsersTweetLabelRule,
SearchBlacklistTweetLabelRule,
SpamHighRecallTweetLabelDropRule,
UntrustedUrlAllViewersTweetLabelRule,
DownrankSpamReplyAllViewersTweetLabelRule,
HighPSpammyScoreAllViewerDropRule,
DoNotAmplifyAllViewersDropRule,
SmyteSpamTweetLabelDropRule,
AuthorBlocksViewerDropRule,
ViewerBlocksAuthorRule,
ViewerMutesAuthorRule,
CopypastaSpamAllViewersTweetLabelRule,
)
),
userRules = VisibilityPolicy.union(
RecommendationsPolicy.userRules,
Seq(
AbusiveRule,
LowQualityRule,
ReadOnlyRule,
CompromisedRule,
RecommendationsBlacklistRule,
SpamHighRecallRule,
DuplicateContentRule,
NsfwHighPrecisionRule,
NsfwNearPerfectAuthorRule,
NsfwBannerImageRule,
NsfwAvatarImageRule,
EngagementSpammerRule,
EngagementSpammerHighRecallRule,
AbusiveHighRecallRule,
SearchBlacklistRule,
SearchNsfwTextRule,
NsfwHighRecallRule,
TsViolationRule,
DownrankSpamReplyAllViewersRule,
NsfwTextNonAuthorDropRule
)
)
)
case object AdsCampaignPolicy
extends VisibilityPolicy(
userRules = Seq(SuspendedAuthorRule),
tweetRules = VisibilityPolicy.baseTweetRules
)
case object AdsManagerPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++ Seq(
AdsManagerDenyListAllUsersTweetLabelRule,
)
)
case object AdsReportingDashboardPolicy
extends VisibilityPolicy(
tweetRules = AdsManagerPolicy.tweetRules,
userRules = AdsCampaignPolicy.userRules
)
case object BirdwatchNoteAuthorPolicy
extends VisibilityPolicy(
userRules = Seq(
SuspendedAuthorRule,
AuthorBlocksViewerDropRule,
ViewerBlocksAuthorRule,
ViewerMutesAuthorRule
)
)
case object BirdwatchNoteTweetsTimelinePolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++
Seq(
MutedRetweetsRule,
AuthorBlocksViewerDropRule,
ViewerMutesAuthorRule,
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
) ++ LimitedEngagementBaseRules.tweetRules
)
case object BirdwatchNeedsYourHelpNotificationsPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++
Seq(
AuthorBlocksViewerDropRule,
ViewerBlocksAuthorRule,
ViewerMutesAuthorRule,
ViewerHasMatchingMutedKeywordForHomeTimelineRule,
ViewerHasMatchingMutedKeywordForNotificationsRule,
)
)
case object ForDevelopmentOnlyPolicy
extends VisibilityPolicy(
userRules = Seq.empty,
tweetRules = VisibilityPolicy.baseTweetRules
)
case object UserProfileHeaderPolicy
extends VisibilityPolicy(
userRules = Seq.empty,
tweetRules = Seq(DropAllRule)
)
case object UserScopedTimelinePolicy
extends VisibilityPolicy(
userRules = UserTimelineRules.UserRules,
tweetRules = Seq(DropAllRule)
)
case object TweetScopedTimelinePolicy
extends VisibilityPolicy(
userRules = UserTimelineRules.UserRules,
tweetRules = Seq.empty
)
case object SoftInterventionPivotPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules
)
case object CuratedTrendsRepresentativeTweetPolicy
extends VisibilityPolicy(
userRules = Seq(
SuspendedAuthorRule,
AuthorBlocksViewerDropRule,
ViewerBlocksAuthorRule,
ViewerMutesAndDoesNotFollowAuthorRule
)
)
case object CommunitiesPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++
Seq(
RetweetDropRule,
AbusePolicyEpisodicTweetLabelDropRule,
EmergencyDropRule,
SafetyCrisisLevel4DropRule,
ReportedTweetInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
) ++ LimitedEngagementBaseRules.tweetRules
)
case object TimelineHomeCommunitiesPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.union(
Seq(
DropAllAuthorRemovedCommunityTweetsRule,
DropAllHiddenCommunityTweetsRule,
ViewerHasMatchingMutedKeywordForHomeTimelineRule,
),
VisibilityPolicy.baseQuotedTweetTombstoneRules,
CommunitiesPolicy.tweetRules,
),
userRules = Seq(
ViewerMutesAuthorRule,
ViewerBlocksAuthorRule,
)
)
case object TimelineHomePromotedHydrationPolicy
extends VisibilityPolicy(
tweetRules = Seq(
ViewerHasMatchingMutedKeywordForHomeTimelinePromotedTweetRule,
ViewerMutesAuthorHomeTimelinePromotedTweetRule,
ViewerBlocksAuthorHomeTimelinePromotedTweetRule
) ++ TimelineHomeHydrationPolicy.tweetRules,
policyRuleParams = TimelineHomeHydrationPolicy.policyRuleParams
)
case object SpacesPolicy
extends VisibilityPolicy(
SpaceDoNotAmplifyAllUsersDropRule,
SpaceNsfwHighPrecisionNonFollowerDropRule),
userRules = Seq(
AuthorBlocksViewerDropRule
)
)
case object SpacesSellerApplicationStatusPolicy
extends VisibilityPolicy(
userRules = Seq(
ViewerIsNotAuthorDropRule
)
)
case object SpacesParticipantsPolicy
extends VisibilityPolicy(
tweetRules = Seq(DropAllRule),
userRules = Seq(
AuthorBlocksViewerDropRule,
SuspendedAuthorRule
)
)
case object SpacesSharingPolicy
extends VisibilityPolicy(
tweetRules = TweetDetailPolicy.tweetRules,
userRules = Seq(
AuthorBlocksViewerDropRule,
ProtectedAuthorDropRule,
SuspendedAuthorRule
),
policyRuleParams = TweetDetailPolicy.policyRuleParams
)
case object SpaceFleetlinePolicy
extends VisibilityPolicy(
spaceRules = Seq(
SpaceDoNotAmplifyNonFollowerDropRule,
SpaceCoordHarmfulActivityHighRecallNonFollowerDropRule,
SpaceUntrustedUrlNonFollowerDropRule,
SpaceMisleadingHighRecallNonFollowerDropRule,
SpaceNsfwHighPrecisionAllUsersInterstitialRule
),
userRules = Seq(
TsViolationRule,
DoNotAmplifyNonFollowerRule,
NotGraduatedNonFollowerRule,
LikelyIvsLabelNonFollowerDropUserRule,
UserAbusiveNonFollowerDropRule
)
)
case object SpaceNotificationsPolicy
extends VisibilityPolicy(
spaceRules = Seq(
SpaceHatefulHighRecallAllUsersDropRule,
SpaceViolenceHighRecallAllUsersDropRule,
SpaceDoNotAmplifyAllUsersDropRule,
SpaceCoordHarmfulActivityHighRecallAllUsersDropRule,
SpaceUntrustedUrlNonFollowerDropRule,
SpaceMisleadingHighRecallNonFollowerDropRule,
SpaceNsfwHighPrecisionAllUsersDropRule,
SpaceNsfwHighRecallAllUsersDropRule,
ViewerHasMatchingMutedKeywordInSpaceTitleForNotificationsRule
),
userRules = Seq(
ViewerMutesAuthorRule,
ViewerBlocksAuthorRule,
AuthorBlocksViewerDropRule,
TsViolationRule,
DoNotAmplifyUserRule,
AbusiveRule,
SearchBlacklistRule,
SearchNsfwTextRule,
RecommendationsBlacklistRule,
NotGraduatedRule,
SpamHighRecallRule,
AbusiveHighRecallRule,
UserBlinkWorstAllUsersDropRule,
UserNsfwNearPerfectNonFollowerDropRule,
SpaceNsfwHighPrecisionNonFollowerDropRule,
UserNsfwAvatarImageNonFollowerDropRule,
UserNsfwBannerImageNonFollowerDropRule
)
)
case object SpaceTweetAvatarHomeTimelinePolicy
extends VisibilityPolicy(
spaceRules = Seq(
SpaceDoNotAmplifyNonFollowerDropRule,
SpaceCoordHarmfulActivityHighRecallNonFollowerDropRule,
SpaceUntrustedUrlNonFollowerDropRule,
SpaceMisleadingHighRecallNonFollowerDropRule,
SpaceNsfwHighPrecisionAllUsersDropRule,
SpaceNsfwHighPrecisionAllUsersInterstitialRule
),
userRules = Seq(
TsViolationRule,
DoNotAmplifyUserRule,
NotGraduatedNonFollowerRule,
AbusiveRule,
SearchBlacklistRule,
SearchNsfwTextRule,
RecommendationsBlacklistRule,
SpamHighRecallRule,
AbusiveHighRecallRule,
UserBlinkWorstAllUsersDropRule,
UserNsfwNearPerfectNonFollowerDropRule,
SpaceNsfwHighPrecisionNonFollowerDropRule,
UserNsfwAvatarImageNonFollowerDropRule,
UserNsfwBannerImageNonFollowerDropRule
)
)
case object SpaceHomeTimelineUprankingPolicy
extends VisibilityPolicy(
spaceRules = Seq(
SpaceDoNotAmplifyNonFollowerDropRule,
SpaceCoordHarmfulActivityHighRecallNonFollowerDropRule,
SpaceUntrustedUrlNonFollowerDropRule,
SpaceMisleadingHighRecallNonFollowerDropRule,
SpaceNsfwHighPrecisionNonFollowerDropRule,
SpaceNsfwHighPrecisionSafeSearchNonFollowerDropRule,
SpaceNsfwHighRecallSafeSearchNonFollowerDropRule
),
userRules = Seq(
TsViolationRule,
DoNotAmplifyUserRule,
NotGraduatedRule,
AbusiveRule,
SearchBlacklistRule,
SearchNsfwTextRule,
RecommendationsBlacklistRule,
SpamHighRecallRule,
AbusiveHighRecallRule,
UserBlinkWorstAllUsersDropRule,
UserNsfwNearPerfectNonFollowerDropRule,
UserNsfwAvatarImageNonFollowerDropRule,
UserNsfwBannerImageNonFollowerDropRule
)
)
case object SpaceJoinScreenPolicy
extends VisibilityPolicy(
spaceRules = Seq(
SpaceNsfwHighPrecisionAllUsersInterstitialRule
)
)
case object KitchenSinkDevelopmentPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules.diff(
Seq(
BounceTweetLabelRule,
DropExclusiveTweetContentRule,
DropTrustedFriendsTweetContentRule
)
) ++ Seq(
BounceTweetLabelTombstoneRule,
TombstoneExclusiveTweetContentRule,
TombstoneTrustedFriendsTweetContentRule)
++ Seq(
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
ViewerReportsAuthorInterstitialRule,
ViewerMutesAuthorInterstitialRule,
ViewerBlocksAuthorInterstitialRule,
MutedKeywordForTweetRepliesInterstitialRule,
ReportedTweetInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
ExperimentalNudgeLabelRule,
) ++ LimitedEngagementBaseRules.tweetRules,
userRules = Seq(
AuthorBlocksViewerDropRule,
ProtectedAuthorTombstoneRule,
SuspendedAuthorRule
),
userUnavailableStateRules = Seq(
SuspendedUserUnavailableRetweetTombstoneRule,
DeactivatedUserUnavailableRetweetTombstoneRule,
OffBoardedUserUnavailableRetweetTombstoneRule,
ErasedUserUnavailableRetweetTombstoneRule,
ProtectedUserUnavailableRetweetTombstoneRule,
AuthorBlocksViewerUserUnavailableRetweetTombstoneRule,
ViewerBlocksAuthorUserUnavailableRetweetTombstoneRule,
ViewerMutesAuthorUserUnavailableRetweetTombstoneRule,
SuspendedUserUnavailableInnerQuotedTweetTombstoneRule,
DeactivatedUserUnavailableInnerQuotedTweetTombstoneRule,
OffBoardedUserUnavailableInnerQuotedTweetTombstoneRule,
ErasedUserUnavailableInnerQuotedTweetTombstoneRule,
ProtectedUserUnavailableInnerQuotedTweetTombstoneRule,
AuthorBlocksViewerUserUnavailableInnerQuotedTweetTombstoneRule,
SuspendedUserUnavailableTweetTombstoneRule,
DeactivatedUserUnavailableTweetTombstoneRule,
OffBoardedUserUnavailableTweetTombstoneRule,
ErasedUserUnavailableTweetTombstoneRule,
ProtectedUserUnavailableTweetTombstoneRule,
AuthorBlocksViewerUserUnavailableTweetTombstoneRule,
ViewerBlocksAuthorUserUnavailableInnerQuotedTweetInterstitialRule,
ViewerMutesAuthorUserUnavailableInnerQuotedTweetInterstitialRule
),
deletedTweetRules = Seq(
TombstoneDeletedOuterTweetRule,
TombstoneBounceDeletedOuterTweetRule,
TombstoneDeletedQuotedTweetRule,
TombstoneBounceDeletedQuotedTweetRule
),
mediaRules = VisibilityPolicy.baseMediaRules
)
case object CurationPolicyViolationsPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++ Seq(
DoNotAmplifyAllViewersDropRule,
),
userRules = Seq(
DoNotAmplifyUserRule,
TsViolationRule
)
)
case object GraphqlDefaultPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++
Seq(
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
) ++ LimitedEngagementBaseRules.tweetRules
)
case object GryphonDecksAndColumnsSharingPolicy
extends VisibilityPolicy(
userRules = Seq(
AuthorBlocksViewerDropRule,
ProtectedAuthorDropRule,
SuspendedAuthorRule
),
tweetRules = Seq(DropAllRule)
)
case object UserSettingsPolicy
extends VisibilityPolicy(
userRules = Seq(ViewerIsNotAuthorDropRule),
tweetRules = Seq(DropAllRule)
)
case object BlockMuteUsersTimelinePolicy
extends VisibilityPolicy(
userRules = Seq(SuspendedAuthorRule),
tweetRules = Seq(DropAllRule)
)
case object TopicRecommendationsPolicy
extends VisibilityPolicy(
tweetRules =
Seq(
NsfwHighRecallTweetLabelRule,
NsfwTextHighPrecisionTweetLabelDropRule
)
++ RecommendationsPolicy.tweetRules,
userRules = RecommendationsPolicy.userRules
)
case object RitoActionedTweetTimelinePolicy
extends VisibilityPolicy(
tweetRules =
VisibilityPolicy.baseTweetTombstoneRules
++ Seq(
AuthorBlocksViewerTombstoneRule,
ProtectedAuthorTombstoneRule
),
deletedTweetRules = Seq(
TombstoneDeletedOuterTweetRule,
TombstoneBounceDeletedOuterTweetRule,
TombstoneDeletedQuotedTweetRule,
TombstoneBounceDeletedQuotedTweetRule,
),
)
case object EmbeddedTweetsPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetTombstoneRules
++ Seq(
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
)
++ LimitedEngagementBaseRules.tweetRules,
deletedTweetRules = Seq(
TombstoneDeletedOuterTweetRule,
TombstoneBounceDeletedOuterTweetRule,
TombstoneDeletedQuotedTweetRule,
TombstoneBounceDeletedQuotedTweetRule,
),
userUnavailableStateRules = Seq(
SuspendedUserUnavailableTweetTombstoneRule,
DeactivatedUserUnavailableTweetTombstoneRule,
OffBoardedUserUnavailableTweetTombstoneRule,
ErasedUserUnavailableTweetTombstoneRule,
ProtectedUserUnavailableTweetTombstoneRule,
AuthorBlocksViewerUserUnavailableInnerQuotedTweetTombstoneRule,
)
)
case object EmbedTweetMarkupPolicy
extends VisibilityPolicy(
tweetRules = Seq(DropStaleTweetsRule) ++
VisibilityPolicy.baseTweetTombstoneRules
++ Seq(
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
)
++ LimitedEngagementBaseRules.tweetRules,
deletedTweetRules = Seq(
TombstoneDeletedOuterTweetRule,
TombstoneBounceDeletedOuterTweetRule,
TombstoneDeletedQuotedTweetRule,
TombstoneBounceDeletedQuotedTweetRule,
),
)
case object ArticleTweetTimelinePolicy
extends VisibilityPolicy(
tweetRules =
VisibilityPolicy.baseTweetRules ++
Seq(
ViewerHasMatchingMutedKeywordForHomeTimelineRule,
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
) ++ LimitedEngagementBaseRules.tweetRules,
userRules = Seq(
AuthorBlocksViewerDropRule,
ViewerBlocksAuthorRule,
ViewerMutesAuthorRule,
ProtectedAuthorDropRule,
SuspendedAuthorRule
)
)
case object ConversationFocalPrehydrationPolicy
extends VisibilityPolicy(
deletedTweetRules = Seq(
TombstoneBounceDeletedOuterTweetRule,
TombstoneBounceDeletedQuotedTweetRule,
)
)
case object ConversationFocalTweetPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetTombstoneRules
++ Seq(
DynamicProductAdDropTweetLabelRule,
AuthorBlocksViewerTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.AdultMediaNsfwHighPrecisionTweetLabelDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.ViolentMediaGoreAndViolenceHighPrecisionDropSettingLeveTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.AdultMediaNsfwReportedHeuristicsTweetLabelDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.ViolentMediaGoreAndViolenceReportedHeuristicsDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.AdultMediaNsfwCardImageTweetLabelDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.OtherSensitiveMediaNsfwUserTweetFlagDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.OtherSensitiveMediaNsfwAdminTweetFlagDropSettingLevelTombstoneRule,
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
ReportedTweetInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwHighPrecisionTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceHighPrecisionInterstitialRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwReportedHeuristicsTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceReportedHeuristicsInterstitialRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwCardImageTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwUserTweetFlagInterstitialRule,
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwAdminTweetFlagInterstitialRule,
GoreAndViolenceHighPrecisionAvoidAllUsersTweetLabelRule,
NsfwReportedHeuristicsAvoidAdPlacementAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAvoidAdPlacementAllUsersTweetLabelRule,
NsfwCardImageAvoidAdPlacementAllUsersTweetLabelRule,
MutedKeywordForQuotedTweetTweetDetailInterstitialRule,
ViewerMutesAuthorInnerQuotedTweetInterstitialRule,
ViewerBlocksAuthorInnerQuotedTweetInterstitialRule,
)
++ LimitedEngagementBaseRules.tweetRules
++ ConversationsAdAvoidanceRules.tweetRules,
deletedTweetRules = Seq(
TombstoneBounceDeletedOuterTweetRule,
TombstoneDeletedQuotedTweetRule,
TombstoneBounceDeletedQuotedTweetRule,
),
userUnavailableStateRules = Seq(
SuspendedUserUnavailableTweetTombstoneRule,
DeactivatedUserUnavailableTweetTombstoneRule,
OffBoardedUserUnavailableTweetTombstoneRule,
ErasedUserUnavailableTweetTombstoneRule,
ProtectedUserUnavailableTweetTombstoneRule,
AuthorBlocksViewerUserUnavailableInnerQuotedTweetTombstoneRule,
UserUnavailableTweetTombstoneRule,
ViewerBlocksAuthorUserUnavailableInnerQuotedTweetInterstitialRule,
ViewerMutesAuthorUserUnavailableInnerQuotedTweetInterstitialRule
),
policyRuleParams = ConversationsAdAvoidanceRules.policyRuleParams
++ SensitiveMediaSettingsConversationBaseRules.policyRuleParams
)
case object ConversationReplyPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetTombstoneRules
++ Seq(
LowQualityTweetLabelTombstoneRule,
SpamHighRecallTweetLabelTombstoneRule,
DuplicateContentTweetLabelTombstoneRule,
DeciderableSpamHighRecallAuthorLabelTombstoneRule,
SmyteSpamTweetLabelTombstoneRule,
AuthorBlocksViewerTombstoneRule,
ToxicityReplyFilterRule,
DynamicProductAdDropTweetLabelRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.AdultMediaNsfwHighPrecisionTweetLabelDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.ViolentMediaGoreAndViolenceHighPrecisionDropSettingLeveTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.AdultMediaNsfwReportedHeuristicsTweetLabelDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.ViolentMediaGoreAndViolenceReportedHeuristicsDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.AdultMediaNsfwCardImageTweetLabelDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.OtherSensitiveMediaNsfwUserTweetFlagDropSettingLevelTombstoneRule,
SensitiveMediaTweetDropSettingLevelTombstoneRules.OtherSensitiveMediaNsfwAdminTweetFlagDropSettingLevelTombstoneRule,
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
MutedKeywordForTweetRepliesInterstitialRule,
ReportedTweetInterstitialRule,
ViewerBlocksAuthorInterstitialRule,
ViewerMutesAuthorInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwHighPrecisionTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceHighPrecisionInterstitialRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwReportedHeuristicsTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.ViolentMediaGoreAndViolenceReportedHeuristicsInterstitialRule,
SensitiveMediaTweetInterstitialRules.AdultMediaNsfwCardImageTweetLabelInterstitialRule,
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwUserTweetFlagInterstitialRule,
SensitiveMediaTweetInterstitialRules.OtherSensitiveMediaNsfwAdminTweetFlagInterstitialRule,
GoreAndViolenceHighPrecisionAvoidAllUsersTweetLabelRule,
NsfwReportedHeuristicsAvoidAdPlacementAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAvoidAdPlacementAllUsersTweetLabelRule,
NsfwCardImageAvoidAdPlacementAllUsersTweetLabelRule,
)
++ LimitedEngagementBaseRules.tweetRules
++ ConversationsAdAvoidanceRules.tweetRules,
userRules = Seq(
LowQualityRule,
ReadOnlyRule,
LowQualityHighRecallRule,
CompromisedRule,
DeciderableSpamHighRecallRule
),
deletedTweetRules = Seq(
TombstoneDeletedOuterTweetRule,
TombstoneBounceDeletedOuterTweetRule,
TombstoneDeletedQuotedTweetRule,
TombstoneBounceDeletedQuotedTweetRule,
),
userUnavailableStateRules = Seq(
SuspendedUserUnavailableTweetTombstoneRule,
DeactivatedUserUnavailableTweetTombstoneRule,
OffBoardedUserUnavailableTweetTombstoneRule,
ErasedUserUnavailableTweetTombstoneRule,
ProtectedUserUnavailableTweetTombstoneRule,
AuthorBlocksViewerUserUnavailableInnerQuotedTweetTombstoneRule,
UserUnavailableTweetTombstoneRule,
ViewerBlocksAuthorUserUnavailableInnerQuotedTweetInterstitialRule,
ViewerMutesAuthorUserUnavailableInnerQuotedTweetInterstitialRule
),
policyRuleParams = ConversationsAdAvoidanceRules.policyRuleParams
++ SensitiveMediaSettingsConversationBaseRules.policyRuleParams
)
case object AdsBusinessSettingsPolicy
extends VisibilityPolicy(
tweetRules = Seq(DropAllRule)
)
case object UserMilestoneRecommendationPolicy
extends VisibilityPolicy(
userRules = RecommendationsPolicy.userRules ++ Seq(
)
)
case object TrustedFriendsUserListPolicy
extends VisibilityPolicy(
tweetRules = Seq(DropAllRule),
userRules = Seq(
ViewerBlocksAuthorRule
)
)
case object TwitterDelegateUserListPolicy
extends VisibilityPolicy(
userRules = Seq(
ViewerBlocksAuthorRule,
ViewerIsAuthorDropRule,
DeactivatedAuthorRule,
AuthorBlocksViewerDropRule
),
tweetRules = Seq(DropAllRule)
)
case object QuickPromoteTweetEligibilityPolicy
extends VisibilityPolicy(
tweetRules = TweetDetailPolicy.tweetRules,
userRules = UserTimelineRules.UserRules,
policyRuleParams = TweetDetailPolicy.policyRuleParams
)
case object ReportCenterPolicy
extends VisibilityPolicy(
tweetRules = ConversationFocalTweetPolicy.tweetRules.diff(
ConversationsAdAvoidanceRules.tweetRules
),
deletedTweetRules = Seq(
TombstoneBounceDeletedOuterTweetRule,
TombstoneDeletedQuotedTweetRule,
TombstoneBounceDeletedQuotedTweetRule,
TombstoneDeletedOuterTweetRule,
),
userUnavailableStateRules = Seq(
SuspendedUserUnavailableTweetTombstoneRule,
DeactivatedUserUnavailableTweetTombstoneRule,
OffBoardedUserUnavailableTweetTombstoneRule,
ErasedUserUnavailableTweetTombstoneRule,
ProtectedUserUnavailableTweetTombstoneRule,
AuthorBlocksViewerUserUnavailableInnerQuotedTweetTombstoneRule,
UserUnavailableTweetTombstoneRule,
ViewerBlocksAuthorUserUnavailableInnerQuotedTweetInterstitialRule,
ViewerMutesAuthorUserUnavailableInnerQuotedTweetInterstitialRule
),
policyRuleParams = ConversationFocalTweetPolicy.policyRuleParams
)
case object ConversationInjectedTweetPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetRules ++
Seq(
AbusePolicyEpisodicTweetLabelInterstitialRule,
EmergencyDynamicInterstitialRule,
NsfwHighPrecisionInterstitialAllUsersTweetLabelRule,
GoreAndViolenceHighPrecisionAllUsersTweetLabelRule,
NsfwReportedHeuristicsAllUsersTweetLabelRule,
GoreAndViolenceReportedHeuristicsAllUsersTweetLabelRule,
NsfwCardImageAllUsersTweetLabelRule,
) ++
LimitedEngagementBaseRules.tweetRules ++ Seq(
SkipTweetDetailLimitedEngagementTweetLabelRule
)
)
case object EditHistoryTimelinePolicy
extends VisibilityPolicy(
tweetRules = ConversationReplyPolicy.tweetRules,
policyRuleParams = ConversationReplyPolicy.policyRuleParams,
deletedTweetRules = ConversationReplyPolicy.deletedTweetRules,
userUnavailableStateRules = ConversationReplyPolicy.userUnavailableStateRules)
case object UserSelfViewOnlyPolicy
extends VisibilityPolicy(
userRules = Seq(ViewerIsNotAuthorDropRule),
tweetRules = Seq(DropAllRule)
)
case object TwitterArticleComposePolicy
extends VisibilityPolicy(
twitterArticleRules = Seq(
ViewerIsNotAuthorDropRule
)
)
case object TwitterArticleProfileTabPolicy
extends VisibilityPolicy(
twitterArticleRules = Seq(
AuthorBlocksViewerDropRule
)
)
case object TwitterArticleReadPolicy
extends VisibilityPolicy(
twitterArticleRules = Seq(
AuthorBlocksViewerDropRule,
)
)
case object ContentControlToolInstallPolicy
extends VisibilityPolicy(
userRules = UserProfileHeaderPolicy.userRules,
tweetRules = UserProfileHeaderPolicy.tweetRules
)
case object TimelineProfileSpacesPolicy
extends VisibilityPolicy(
userRules = UserProfileHeaderPolicy.userRules,
tweetRules = UserProfileHeaderPolicy.tweetRules
)
case object TimelineFavoritesSelfViewPolicy
extends VisibilityPolicy(
tweetRules = TimelineFavoritesPolicy.tweetRules.diff(Seq(DropStaleTweetsRule)),
policyRuleParams = TimelineFavoritesPolicy.policyRuleParams,
deletedTweetRules = TimelineFavoritesPolicy.deletedTweetRules,
userUnavailableStateRules = TimelineFavoritesPolicy.userUnavailableStateRules
)
case object BaseQigPolicy
extends VisibilityPolicy(
tweetRules = Seq(
AbusePolicyEpisodicTweetLabelDropRule,
AutomationTweetLabelRule,
DoNotAmplifyDropRule,
DownrankSpamReplyTweetLabelRule,
DuplicateContentTweetLabelDropRule,
DuplicateMentionTweetLabelRule,
NsfwHighPrecisionTweetLabelRule,
GoreAndViolenceHighPrecisionTweetLabelRule,
GoreAndViolenceReportedHeuristicsTweetLabelRule,
LikelyIvsLabelNonFollowerDropUserRule,
NsfwCardImageTweetLabelRule,
NsfwHighRecallTweetLabelRule,
NsfwReportedHeuristicsTweetLabelRule,
NsfwTextTweetLabelDropRule,
NsfwVideoTweetLabelDropRule,
PdnaTweetLabelRule,
SafetyCrisisLevel3DropRule,
SafetyCrisisLevel4DropRule,
SearchBlacklistHighRecallTweetLabelDropRule,
SearchBlacklistTweetLabelRule,
SmyteSpamTweetLabelDropRule,
SpamHighRecallTweetLabelDropRule,
),
userRules = Seq(
DuplicateContentRule,
EngagementSpammerHighRecallRule,
EngagementSpammerRule,
NsfwAvatarImageRule,
NsfwBannerImageRule,
NsfwHighPrecisionRule,
NsfwHighRecallRule,
NsfwSensitiveRule,
ReadOnlyRule,
RecommendationsBlacklistRule,
SearchBlacklistRule,
SpamHighRecallRule
))
case object NotificationsQigPolicy
extends VisibilityPolicy(
tweetRules = BaseQigPolicy.tweetRules ++ Seq(
DropAllCommunityTweetsRule,
DropNsfwAdminAuthorViewerOptInFilteringOnSearchRule,
HighProactiveTosScoreTweetLabelDropSearchRule,
LowQualityTweetLabelDropRule,
NsfwHighPrecisionRule,
NsfwHighRecallRule,
NsfwNearPerfectAuthorRule,
NsfwSensitiveRule,
),
userRules = BaseQigPolicy.userRules ++ Seq(
AbusiveRule,
LowQualityRule,
CompromisedRule,
ViewerBlocksAuthorViewerOptInBlockingOnSearchRule,
ViewerMutesAuthorViewerOptInBlockingOnSearchRule,
DropNsfwAdminAuthorViewerOptInFilteringOnSearchRule,
NsfwNearPerfectAuthorRule
)
)
case object ShoppingManagerSpyModePolicy
extends VisibilityPolicy(
tweetRules = Seq(
DropAllRule
),
userRules = Seq(
SuspendedAuthorRule,
DeactivatedAuthorRule,
ErasedAuthorRule,
OffboardedAuthorRule
)
)
case object ZipbirdConsumerArchivesPolicy
extends VisibilityPolicy(
tweetRules = VisibilityPolicy.baseTweetTombstoneRules,
userRules = Seq(
AuthorBlocksViewerDropRule,
ProtectedAuthorDropRule,
SuspendedAuthorRule,
),
userUnavailableStateRules = Seq(
AuthorBlocksViewerUserUnavailableTweetTombstoneRule,
ProtectedUserUnavailableTweetTombstoneRule,
SuspendedUserUnavailableTweetTombstoneRule,
),
deletedTweetRules = Seq(
TombstoneDeletedTweetRule,
TombstoneBounceDeletedTweetRule,
)
)
case class MixedVisibilityPolicy(
originalPolicy: VisibilityPolicy,
additionalTweetRules: Seq[Rule])
extends VisibilityPolicy(
tweetRules = (additionalTweetRules ++ originalPolicy.tweetRules)
.sortWith(_.actionBuilder.actionSeverity > _.actionBuilder.actionSeverity),
userRules = originalPolicy.userRules,
cardRules = originalPolicy.cardRules,
quotedTweetRules = originalPolicy.quotedTweetRules,
dmRules = originalPolicy.dmRules,
dmConversationRules = originalPolicy.dmConversationRules,
dmEventRules = originalPolicy.dmEventRules,
spaceRules = originalPolicy.spaceRules,
userUnavailableStateRules = originalPolicy.userUnavailableStateRules,
twitterArticleRules = originalPolicy.twitterArticleRules,
deletedTweetRules = originalPolicy.deletedTweetRules,
mediaRules = originalPolicy.mediaRules,
communityRules = originalPolicy.communityRules,
policyRuleParams = originalPolicy.policyRuleParams
)
case object TweetAwardPolicy
extends VisibilityPolicy(
userRules = Seq.empty,
tweetRules =
VisibilityPolicy.baseTweetRules ++ Seq(
EmergencyDropRule,
NsfwHighPrecisionTweetLabelRule,
NsfwHighRecallTweetLabelRule,
NsfwReportedHeuristicsTweetLabelRule,
NsfwCardImageTweetLabelRule,
NsfwVideoTweetLabelDropRule,
NsfwTextTweetLabelDropRule,
GoreAndViolenceHighPrecisionTweetLabelRule,
GoreAndViolenceReportedHeuristicsTweetLabelRule,
GoreAndViolenceTweetLabelRule,
AbusePolicyEpisodicTweetLabelDropRule,
AbusiveTweetLabelRule,
BystanderAbusiveTweetLabelRule
)
)