Removes some Attestation events from the feeds, adding on others

This commit is contained in:
Vitor Pamplona
2026-03-20 17:45:45 -04:00
parent 0f921989b9
commit 817c4c7723
12 changed files with 83 additions and 30 deletions
@@ -20,6 +20,8 @@
*/ */
package com.vitorpamplona.amethyst.service.relayClient.reqCommand.account.nip01Notifications package com.vitorpamplona.amethyst.service.relayClient.reqCommand.account.nip01Notifications
import com.vitorpamplona.quartz.experimental.attestations.recommendation.AttestorRecommendationEvent
import com.vitorpamplona.quartz.experimental.attestations.request.AttestationRequestEvent
import com.vitorpamplona.quartz.experimental.ephemChat.chat.EphemeralChatEvent import com.vitorpamplona.quartz.experimental.ephemChat.chat.EphemeralChatEvent
import com.vitorpamplona.quartz.experimental.interactiveStories.InteractiveStoryPrologueEvent import com.vitorpamplona.quartz.experimental.interactiveStories.InteractiveStoryPrologueEvent
import com.vitorpamplona.quartz.experimental.interactiveStories.InteractiveStorySceneEvent import com.vitorpamplona.quartz.experimental.interactiveStories.InteractiveStorySceneEvent
@@ -85,6 +87,12 @@ val NotificationsPerKeyKinds2 =
InteractiveStorySceneEvent.KIND, InteractiveStorySceneEvent.KIND,
) )
val NotificationsPerKeyKinds3 =
listOf(
AttestationRequestEvent.KIND,
AttestorRecommendationEvent.KIND,
)
fun filterSummaryNotificationsToPubkey( fun filterSummaryNotificationsToPubkey(
relay: NormalizedRelayUrl, relay: NormalizedRelayUrl,
pubkey: HexKey?, pubkey: HexKey?,
@@ -130,7 +138,17 @@ fun filterNotificationsToPubkey(
Filter( Filter(
kinds = NotificationsPerKeyKinds2, kinds = NotificationsPerKeyKinds2,
tags = mapOf("p" to listOf(pubkey)), tags = mapOf("p" to listOf(pubkey)),
limit = 500, limit = 200,
since = since,
),
),
RelayBasedFilter(
relay = relay,
filter =
Filter(
kinds = NotificationsPerKeyKinds3,
tags = mapOf("p" to listOf(pubkey)),
limit = 10,
since = since, since = since,
), ),
), ),
@@ -171,7 +189,17 @@ fun filterJustTheLatestNotificationsToPubkeyFromRandomRelays(
Filter( Filter(
kinds = NotificationsPerKeyKinds2, kinds = NotificationsPerKeyKinds2,
tags = mapOf("p" to listOf(pubkey)), tags = mapOf("p" to listOf(pubkey)),
limit = 20, limit = 10,
since = since,
),
),
RelayBasedFilter(
relay = relay,
filter =
Filter(
kinds = NotificationsPerKeyKinds3,
tags = mapOf("p" to listOf(pubkey)),
limit = 2,
since = since, since = since,
), ),
), ),
@@ -22,6 +22,7 @@ package com.vitorpamplona.amethyst.service.relayClient.reqCommand.event.watchers
import com.vitorpamplona.amethyst.model.AddressableNote import com.vitorpamplona.amethyst.model.AddressableNote
import com.vitorpamplona.amethyst.service.relays.SincePerRelayMap import com.vitorpamplona.amethyst.service.relays.SincePerRelayMap
import com.vitorpamplona.quartz.experimental.attestations.attestation.AttestationEvent
import com.vitorpamplona.quartz.experimental.zapPolls.ZapPollEvent import com.vitorpamplona.quartz.experimental.zapPolls.ZapPollEvent
import com.vitorpamplona.quartz.nip01Core.relay.client.pool.RelayBasedFilter import com.vitorpamplona.quartz.nip01Core.relay.client.pool.RelayBasedFilter
import com.vitorpamplona.quartz.nip01Core.relay.filters.Filter import com.vitorpamplona.quartz.nip01Core.relay.filters.Filter
@@ -47,6 +48,7 @@ val RepliesAndReactionsToAddressesKinds1 =
LnZapEvent.KIND, LnZapEvent.KIND,
ZapPollEvent.KIND, ZapPollEvent.KIND,
CommentEvent.KIND, CommentEvent.KIND,
AttestationEvent.KIND,
) )
val PostsAndChatMessagesToAddresses = val PostsAndChatMessagesToAddresses =
@@ -22,6 +22,7 @@ package com.vitorpamplona.amethyst.service.relayClient.reqCommand.event.watchers
import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.service.relays.SincePerRelayMap import com.vitorpamplona.amethyst.service.relays.SincePerRelayMap
import com.vitorpamplona.quartz.experimental.attestations.attestation.AttestationEvent
import com.vitorpamplona.quartz.experimental.edits.TextNoteModificationEvent import com.vitorpamplona.quartz.experimental.edits.TextNoteModificationEvent
import com.vitorpamplona.quartz.experimental.zapPolls.ZapPollEvent import com.vitorpamplona.quartz.experimental.zapPolls.ZapPollEvent
import com.vitorpamplona.quartz.nip01Core.relay.client.pool.RelayBasedFilter import com.vitorpamplona.quartz.nip01Core.relay.client.pool.RelayBasedFilter
@@ -53,6 +54,7 @@ val RepliesAndReactionsKinds =
OtsEvent.KIND, OtsEvent.KIND,
TextNoteModificationEvent.KIND, TextNoteModificationEvent.KIND,
CommentEvent.KIND, CommentEvent.KIND,
AttestationEvent.KIND,
) )
val RepliesAndReactionsKinds2 = val RepliesAndReactionsKinds2 =
@@ -20,6 +20,7 @@
*/ */
package com.vitorpamplona.amethyst.ui.screen.loggedIn.communities.datasource package com.vitorpamplona.amethyst.ui.screen.loggedIn.communities.datasource
import com.vitorpamplona.quartz.experimental.attestations.attestation.AttestationEvent
import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.relay.client.pool.RelayBasedFilter import com.vitorpamplona.quartz.nip01Core.relay.client.pool.RelayBasedFilter
import com.vitorpamplona.quartz.nip01Core.relay.filters.Filter import com.vitorpamplona.quartz.nip01Core.relay.filters.Filter
@@ -42,6 +43,7 @@ val CommunityPostKinds =
ClassifiedsEvent.KIND, ClassifiedsEvent.KIND,
LongTextNoteEvent.KIND, LongTextNoteEvent.KIND,
CommunityPostApprovalEvent.KIND, CommunityPostApprovalEvent.KIND,
AttestationEvent.KIND,
) )
fun filterCommunityPosts( fun filterCommunityPosts(
@@ -65,9 +65,6 @@ class HomeNewThreadFeedFilter(
LiveChessGameChallengeEvent.KIND, LiveChessGameChallengeEvent.KIND,
LiveChessGameEndEvent.KIND, LiveChessGameEndEvent.KIND,
AttestationEvent.KIND, AttestationEvent.KIND,
AttestationRequestEvent.KIND,
AttestorRecommendationEvent.KIND,
AttestorProficiencyEvent.KIND,
) )
} }
@@ -23,6 +23,7 @@ package com.vitorpamplona.amethyst.ui.screen.loggedIn.home.datasource.nip01Core
import com.vitorpamplona.amethyst.model.topNavFeeds.aroundMe.LocationTopNavPerRelayFilterSet import com.vitorpamplona.amethyst.model.topNavFeeds.aroundMe.LocationTopNavPerRelayFilterSet
import com.vitorpamplona.amethyst.service.relays.SincePerRelayMap import com.vitorpamplona.amethyst.service.relays.SincePerRelayMap
import com.vitorpamplona.amethyst.ui.screen.loggedIn.home.datasource.nip22Comments.filterHomePostsByScopes import com.vitorpamplona.amethyst.ui.screen.loggedIn.home.datasource.nip22Comments.filterHomePostsByScopes
import com.vitorpamplona.quartz.experimental.attestations.attestation.AttestationEvent
import com.vitorpamplona.quartz.experimental.interactiveStories.InteractiveStoryPrologueEvent import com.vitorpamplona.quartz.experimental.interactiveStories.InteractiveStoryPrologueEvent
import com.vitorpamplona.quartz.nip01Core.relay.client.pool.RelayBasedFilter import com.vitorpamplona.quartz.nip01Core.relay.client.pool.RelayBasedFilter
import com.vitorpamplona.quartz.nip01Core.relay.filters.Filter import com.vitorpamplona.quartz.nip01Core.relay.filters.Filter
@@ -36,7 +37,6 @@ import com.vitorpamplona.quartz.nip54Wiki.WikiNoteEvent
import com.vitorpamplona.quartz.nip84Highlights.HighlightEvent import com.vitorpamplona.quartz.nip84Highlights.HighlightEvent
import com.vitorpamplona.quartz.nip99Classifieds.ClassifiedsEvent import com.vitorpamplona.quartz.nip99Classifieds.ClassifiedsEvent
import com.vitorpamplona.quartz.nipA0VoiceMessages.VoiceEvent import com.vitorpamplona.quartz.nipA0VoiceMessages.VoiceEvent
import com.vitorpamplona.quartz.nipA0VoiceMessages.VoiceReplyEvent
val HomePostsByGeohashKinds = val HomePostsByGeohashKinds =
listOf( listOf(
@@ -46,11 +46,11 @@ val HomePostsByGeohashKinds =
LongTextNoteEvent.KIND, LongTextNoteEvent.KIND,
ClassifiedsEvent.KIND, ClassifiedsEvent.KIND,
HighlightEvent.KIND, HighlightEvent.KIND,
InteractiveStoryPrologueEvent.KIND,
WikiNoteEvent.KIND, WikiNoteEvent.KIND,
CommentEvent.KIND, CommentEvent.KIND,
VoiceEvent.KIND, VoiceEvent.KIND,
VoiceReplyEvent.KIND, AttestationEvent.KIND,
InteractiveStoryPrologueEvent.KIND,
) )
fun filterHomePostsByGeohashes( fun filterHomePostsByGeohashes(
@@ -23,7 +23,8 @@ package com.vitorpamplona.amethyst.ui.screen.loggedIn.home.datasource.nip01Core
import com.vitorpamplona.amethyst.model.topNavFeeds.global.GlobalTopNavPerRelayFilterSet import com.vitorpamplona.amethyst.model.topNavFeeds.global.GlobalTopNavPerRelayFilterSet
import com.vitorpamplona.amethyst.service.relays.SincePerRelayMap import com.vitorpamplona.amethyst.service.relays.SincePerRelayMap
import com.vitorpamplona.amethyst.ui.screen.loggedIn.home.datasource.nip65Follows.HomePostsConversationKinds import com.vitorpamplona.amethyst.ui.screen.loggedIn.home.datasource.nip65Follows.HomePostsConversationKinds
import com.vitorpamplona.amethyst.ui.screen.loggedIn.home.datasource.nip65Follows.HomePostsNewThreadKinds import com.vitorpamplona.amethyst.ui.screen.loggedIn.home.datasource.nip65Follows.HomePostsNewThreadKinds1
import com.vitorpamplona.amethyst.ui.screen.loggedIn.home.datasource.nip65Follows.HomePostsNewThreadKinds2
import com.vitorpamplona.quartz.nip01Core.relay.client.pool.RelayBasedFilter import com.vitorpamplona.quartz.nip01Core.relay.client.pool.RelayBasedFilter
import com.vitorpamplona.quartz.nip01Core.relay.filters.Filter import com.vitorpamplona.quartz.nip01Core.relay.filters.Filter
@@ -43,11 +44,20 @@ fun filterHomePostsByGlobal(
relay = relayUrl, relay = relayUrl,
filter = filter =
Filter( Filter(
kinds = HomePostsNewThreadKinds, kinds = HomePostsNewThreadKinds1,
limit = 50, limit = 50,
since = since ?: newThreadSince, since = since ?: newThreadSince,
), ),
), ),
RelayBasedFilter(
relay = relayUrl,
filter =
Filter(
kinds = HomePostsNewThreadKinds2,
limit = 5,
since = since ?: newThreadSince,
),
),
RelayBasedFilter( RelayBasedFilter(
relay = relayUrl, relay = relayUrl,
filter = filter =
@@ -23,6 +23,7 @@ package com.vitorpamplona.amethyst.ui.screen.loggedIn.home.datasource.nip01Core
import com.vitorpamplona.amethyst.model.topNavFeeds.hashtag.HashtagTopNavPerRelayFilterSet import com.vitorpamplona.amethyst.model.topNavFeeds.hashtag.HashtagTopNavPerRelayFilterSet
import com.vitorpamplona.amethyst.service.relays.SincePerRelayMap import com.vitorpamplona.amethyst.service.relays.SincePerRelayMap
import com.vitorpamplona.amethyst.ui.screen.loggedIn.home.datasource.nip22Comments.filterHomePostsByScopes import com.vitorpamplona.amethyst.ui.screen.loggedIn.home.datasource.nip22Comments.filterHomePostsByScopes
import com.vitorpamplona.quartz.experimental.attestations.attestation.AttestationEvent
import com.vitorpamplona.quartz.experimental.audio.header.AudioHeaderEvent import com.vitorpamplona.quartz.experimental.audio.header.AudioHeaderEvent
import com.vitorpamplona.quartz.experimental.interactiveStories.InteractiveStoryPrologueEvent import com.vitorpamplona.quartz.experimental.interactiveStories.InteractiveStoryPrologueEvent
import com.vitorpamplona.quartz.experimental.nipsOnNostr.NipTextEvent import com.vitorpamplona.quartz.experimental.nipsOnNostr.NipTextEvent
@@ -39,7 +40,6 @@ import com.vitorpamplona.quartz.nip54Wiki.WikiNoteEvent
import com.vitorpamplona.quartz.nip84Highlights.HighlightEvent import com.vitorpamplona.quartz.nip84Highlights.HighlightEvent
import com.vitorpamplona.quartz.nip99Classifieds.ClassifiedsEvent import com.vitorpamplona.quartz.nip99Classifieds.ClassifiedsEvent
import com.vitorpamplona.quartz.nipA0VoiceMessages.VoiceEvent import com.vitorpamplona.quartz.nipA0VoiceMessages.VoiceEvent
import com.vitorpamplona.quartz.nipA0VoiceMessages.VoiceReplyEvent
val HomePostsBuHashtagsKinds = val HomePostsBuHashtagsKinds =
listOf( listOf(
@@ -50,12 +50,12 @@ val HomePostsBuHashtagsKinds =
ClassifiedsEvent.KIND, ClassifiedsEvent.KIND,
HighlightEvent.KIND, HighlightEvent.KIND,
AudioHeaderEvent.KIND, AudioHeaderEvent.KIND,
InteractiveStoryPrologueEvent.KIND,
CommentEvent.KIND, CommentEvent.KIND,
WikiNoteEvent.KIND, WikiNoteEvent.KIND,
NipTextEvent.KIND, NipTextEvent.KIND,
VoiceEvent.KIND, VoiceEvent.KIND,
VoiceReplyEvent.KIND, AttestationEvent.KIND,
InteractiveStoryPrologueEvent.KIND,
) )
fun filterHomePostsByHashtags( fun filterHomePostsByHashtags(
@@ -24,9 +24,6 @@ import com.vitorpamplona.amethyst.model.topNavFeeds.noteBased.author.AuthorsTopN
import com.vitorpamplona.amethyst.model.topNavFeeds.noteBased.muted.MutedAuthorsTopNavPerRelayFilterSet import com.vitorpamplona.amethyst.model.topNavFeeds.noteBased.muted.MutedAuthorsTopNavPerRelayFilterSet
import com.vitorpamplona.amethyst.service.relays.SincePerRelayMap import com.vitorpamplona.amethyst.service.relays.SincePerRelayMap
import com.vitorpamplona.quartz.experimental.attestations.attestation.AttestationEvent import com.vitorpamplona.quartz.experimental.attestations.attestation.AttestationEvent
import com.vitorpamplona.quartz.experimental.attestations.proficiency.AttestorProficiencyEvent
import com.vitorpamplona.quartz.experimental.attestations.recommendation.AttestorRecommendationEvent
import com.vitorpamplona.quartz.experimental.attestations.request.AttestationRequestEvent
import com.vitorpamplona.quartz.experimental.ephemChat.chat.EphemeralChatEvent import com.vitorpamplona.quartz.experimental.ephemChat.chat.EphemeralChatEvent
import com.vitorpamplona.quartz.experimental.interactiveStories.InteractiveStoryPrologueEvent import com.vitorpamplona.quartz.experimental.interactiveStories.InteractiveStoryPrologueEvent
import com.vitorpamplona.quartz.experimental.nipsOnNostr.NipTextEvent import com.vitorpamplona.quartz.experimental.nipsOnNostr.NipTextEvent
@@ -54,7 +51,7 @@ import com.vitorpamplona.quartz.nipA0VoiceMessages.VoiceEvent
import com.vitorpamplona.quartz.nipA0VoiceMessages.VoiceReplyEvent import com.vitorpamplona.quartz.nipA0VoiceMessages.VoiceReplyEvent
import kotlin.math.min import kotlin.math.min
val HomePostsNewThreadKinds = val HomePostsNewThreadKinds1 =
listOf( listOf(
TextNoteEvent.KIND, TextNoteEvent.KIND,
RepostEvent.KIND, RepostEvent.KIND,
@@ -62,18 +59,19 @@ val HomePostsNewThreadKinds =
ClassifiedsEvent.KIND, ClassifiedsEvent.KIND,
LongTextNoteEvent.KIND, LongTextNoteEvent.KIND,
HighlightEvent.KIND, HighlightEvent.KIND,
WikiNoteEvent.KIND,
NipTextEvent.KIND,
ZapPollEvent.KIND, ZapPollEvent.KIND,
PollEvent.KIND, PollEvent.KIND,
WikiNoteEvent.KIND,
AttestationEvent.KIND,
NipTextEvent.KIND,
)
val HomePostsNewThreadKinds2 =
listOf(
InteractiveStoryPrologueEvent.KIND, InteractiveStoryPrologueEvent.KIND,
ChessGameEvent.KIND, ChessGameEvent.KIND,
LiveChessGameChallengeEvent.KIND, LiveChessGameChallengeEvent.KIND,
LiveChessGameEndEvent.KIND, LiveChessGameEndEvent.KIND,
AttestationEvent.KIND,
AttestationRequestEvent.KIND,
AttestorRecommendationEvent.KIND,
AttestorProficiencyEvent.KIND,
) )
val HomePostsConversationKinds = val HomePostsConversationKinds =
@@ -99,12 +97,22 @@ fun filterNewHomePostsByAuthors(
relay = relay, relay = relay,
filter = filter =
Filter( Filter(
kinds = HomePostsNewThreadKinds, kinds = HomePostsNewThreadKinds1,
authors = authorList, authors = authorList,
limit = min(authorList.size * 10, 500), limit = min(authorList.size * 10, 500),
since = since, since = since,
), ),
), ),
RelayBasedFilter(
relay = relay,
filter =
Filter(
kinds = HomePostsNewThreadKinds2,
authors = authorList,
limit = min(authorList.size * 10, 5),
since = since,
),
),
) )
} }
@@ -29,6 +29,7 @@ import com.vitorpamplona.amethyst.model.filterIntoSet
import com.vitorpamplona.amethyst.ui.dal.AdditiveFeedFilter import com.vitorpamplona.amethyst.ui.dal.AdditiveFeedFilter
import com.vitorpamplona.amethyst.ui.dal.DefaultFeedOrder import com.vitorpamplona.amethyst.ui.dal.DefaultFeedOrder
import com.vitorpamplona.amethyst.ui.dal.FilterByListParams import com.vitorpamplona.amethyst.ui.dal.FilterByListParams
import com.vitorpamplona.quartz.experimental.attestations.request.AttestationRequestEvent
import com.vitorpamplona.quartz.experimental.audio.track.AudioTrackEvent import com.vitorpamplona.quartz.experimental.audio.track.AudioTrackEvent
import com.vitorpamplona.quartz.experimental.forks.IForkableEvent import com.vitorpamplona.quartz.experimental.forks.IForkableEvent
import com.vitorpamplona.quartz.experimental.nipsOnNostr.NipTextEvent import com.vitorpamplona.quartz.experimental.nipsOnNostr.NipTextEvent
@@ -87,6 +88,7 @@ class NotificationFeedFilter(
VideoVerticalEvent.KIND, VideoVerticalEvent.KIND,
VideoHorizontalEvent.KIND, VideoHorizontalEvent.KIND,
WikiNoteEvent.KIND, WikiNoteEvent.KIND,
AttestationRequestEvent.KIND,
) )
val NOTIFICATION_KINDS = val NOTIFICATION_KINDS =
@@ -24,9 +24,6 @@ import com.vitorpamplona.amethyst.model.LocalCache
import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.model.User
import com.vitorpamplona.amethyst.service.relays.SincePerRelayMap import com.vitorpamplona.amethyst.service.relays.SincePerRelayMap
import com.vitorpamplona.quartz.experimental.attestations.attestation.AttestationEvent import com.vitorpamplona.quartz.experimental.attestations.attestation.AttestationEvent
import com.vitorpamplona.quartz.experimental.attestations.proficiency.AttestorProficiencyEvent
import com.vitorpamplona.quartz.experimental.attestations.recommendation.AttestorRecommendationEvent
import com.vitorpamplona.quartz.experimental.attestations.request.AttestationRequestEvent
import com.vitorpamplona.quartz.experimental.interactiveStories.InteractiveStoryPrologueEvent import com.vitorpamplona.quartz.experimental.interactiveStories.InteractiveStoryPrologueEvent
import com.vitorpamplona.quartz.experimental.nipsOnNostr.NipTextEvent import com.vitorpamplona.quartz.experimental.nipsOnNostr.NipTextEvent
import com.vitorpamplona.quartz.experimental.publicMessages.PublicMessageEvent import com.vitorpamplona.quartz.experimental.publicMessages.PublicMessageEvent
@@ -71,9 +68,6 @@ val UserProfilePostKinds2 =
ZapPollEvent.KIND, ZapPollEvent.KIND,
PinListEvent.KIND, PinListEvent.KIND,
AttestationEvent.KIND, AttestationEvent.KIND,
AttestationRequestEvent.KIND,
AttestorRecommendationEvent.KIND,
AttestorProficiencyEvent.KIND,
) )
fun filterUserProfilePosts( fun filterUserProfilePosts(
@@ -128,6 +128,10 @@ import com.vitorpamplona.amethyst.ui.theme.StdVertSpacer
import com.vitorpamplona.amethyst.ui.theme.ThemeComparisonRow import com.vitorpamplona.amethyst.ui.theme.ThemeComparisonRow
import com.vitorpamplona.amethyst.ui.theme.bitcoinColor import com.vitorpamplona.amethyst.ui.theme.bitcoinColor
import com.vitorpamplona.amethyst.ui.theme.redColorOnSecondSurface import com.vitorpamplona.amethyst.ui.theme.redColorOnSecondSurface
import com.vitorpamplona.quartz.experimental.attestations.attestation.AttestationEvent
import com.vitorpamplona.quartz.experimental.attestations.proficiency.AttestorProficiencyEvent
import com.vitorpamplona.quartz.experimental.attestations.recommendation.AttestorRecommendationEvent
import com.vitorpamplona.quartz.experimental.attestations.request.AttestationRequestEvent
import com.vitorpamplona.quartz.experimental.audio.header.AudioHeaderEvent import com.vitorpamplona.quartz.experimental.audio.header.AudioHeaderEvent
import com.vitorpamplona.quartz.experimental.audio.track.AudioTrackEvent import com.vitorpamplona.quartz.experimental.audio.track.AudioTrackEvent
import com.vitorpamplona.quartz.experimental.edits.TextNoteModificationEvent import com.vitorpamplona.quartz.experimental.edits.TextNoteModificationEvent
@@ -529,6 +533,10 @@ private fun kindDisplayName(kind: Int): Int =
AppSpecificDataEvent.KIND -> R.string.kind_user_settings AppSpecificDataEvent.KIND -> R.string.kind_user_settings
AudioHeaderEvent.KIND -> R.string.kind_audio_header AudioHeaderEvent.KIND -> R.string.kind_audio_header
AudioTrackEvent.KIND -> R.string.kind_audio_track AudioTrackEvent.KIND -> R.string.kind_audio_track
AttestationEvent.KIND -> R.string.attestation
AttestationRequestEvent.KIND -> R.string.attestation_request
AttestorRecommendationEvent.KIND -> R.string.attestor_recommendation
AttestorProficiencyEvent.KIND -> R.string.attestor_proficiency
BadgeAwardEvent.KIND -> R.string.kind_badge_awards BadgeAwardEvent.KIND -> R.string.kind_badge_awards
BadgeDefinitionEvent.KIND -> R.string.kind_badge_definitions BadgeDefinitionEvent.KIND -> R.string.kind_badge_definitions
BadgeProfilesEvent.KIND -> R.string.kind_profile_badges BadgeProfilesEvent.KIND -> R.string.kind_profile_badges