Adds support for Custom Reaction selection on new posts and direct GIF url usage.
This commit is contained in:
@@ -50,6 +50,24 @@ class Nip30CustomEmoji {
|
||||
|
||||
fun createEmojiMap(tags: ImmutableListOfLists<String>): Map<String, String> = tags.lists.filter { it.size > 2 && it[0] == "emoji" }.associate { ":${it[1]}:" to it[2] }
|
||||
|
||||
fun findAllEmojis(input: String): List<String> {
|
||||
val matcher = customEmojiPattern.matcher(input)
|
||||
val emojiNamesInOrder = mutableListOf<String>()
|
||||
while (matcher.find()) {
|
||||
emojiNamesInOrder.add(matcher.group())
|
||||
}
|
||||
return emojiNamesInOrder
|
||||
}
|
||||
|
||||
fun findAllEmojiCodes(input: String): List<String> {
|
||||
val matcher = customEmojiPattern.matcher(input)
|
||||
val emojiNamesInOrder = mutableListOf<String>()
|
||||
while (matcher.find()) {
|
||||
matcher.group(1)?.let { emojiNamesInOrder.add(it) }
|
||||
}
|
||||
return emojiNamesInOrder
|
||||
}
|
||||
|
||||
fun assembleAnnotatedList(
|
||||
input: String,
|
||||
allTags: ImmutableListOfLists<String>?,
|
||||
@@ -65,12 +83,7 @@ class Nip30CustomEmoji {
|
||||
input: String,
|
||||
emojiPairs: Map<String, String>,
|
||||
): ImmutableList<Renderable>? {
|
||||
val matcher = customEmojiPattern.matcher(input)
|
||||
val emojiNamesInOrder = mutableListOf<String>()
|
||||
while (matcher.find()) {
|
||||
emojiNamesInOrder.add(matcher.group())
|
||||
}
|
||||
|
||||
val emojiNamesInOrder = findAllEmojis(input)
|
||||
if (emojiNamesInOrder.isEmpty()) {
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -62,6 +62,7 @@ class ChannelMessageEvent(
|
||||
directMentions: Set<HexKey> = emptySet(),
|
||||
geohash: String? = null,
|
||||
imetas: List<IMetaTag>? = null,
|
||||
emojis: List<EmojiUrl>? = null,
|
||||
isDraft: Boolean,
|
||||
onReady: (ChannelMessageEvent) -> Unit,
|
||||
) {
|
||||
@@ -88,6 +89,7 @@ class ChannelMessageEvent(
|
||||
imetas?.forEach {
|
||||
tags.add(Nip92MediaAttachments.createTag(it))
|
||||
}
|
||||
emojis?.forEach { tags.add(it.toTagArray()) }
|
||||
tags.add(
|
||||
arrayOf("alt", ALT),
|
||||
)
|
||||
|
||||
@@ -84,6 +84,7 @@ class ChatMessageEvent(
|
||||
signer: NostrSigner,
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
imetas: List<IMetaTag>? = null,
|
||||
emojis: List<EmojiUrl>? = null,
|
||||
isDraft: Boolean,
|
||||
onReady: (ChatMessageEvent) -> Unit,
|
||||
) {
|
||||
@@ -103,6 +104,7 @@ class ChatMessageEvent(
|
||||
imetas?.forEach {
|
||||
tags.add(Nip92MediaAttachments.createTag(it))
|
||||
}
|
||||
emojis?.forEach { tags.add(it.toTagArray()) }
|
||||
// tags.add(arrayOf("alt", alt))
|
||||
|
||||
if (isDraft) {
|
||||
|
||||
@@ -115,6 +115,7 @@ class ClassifiedsEvent(
|
||||
zapRaiserAmount: Long?,
|
||||
geohash: String? = null,
|
||||
imetas: List<IMetaTag>? = null,
|
||||
emojis: List<EmojiUrl>? = null,
|
||||
signer: NostrSigner,
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
isDraft: Boolean,
|
||||
@@ -190,9 +191,8 @@ class ClassifiedsEvent(
|
||||
}
|
||||
zapRaiserAmount?.let { tags.add(arrayOf("zapraiser", "$it")) }
|
||||
geohash?.let { tags.addAll(geohashMipMap(it)) }
|
||||
imetas?.forEach {
|
||||
tags.add(Nip92MediaAttachments.createTag(it))
|
||||
}
|
||||
imetas?.forEach { tags.add(Nip92MediaAttachments.createTag(it)) }
|
||||
emojis?.forEach { tags.add(it.toTagArray()) }
|
||||
tags.add(arrayOf("alt", ALT))
|
||||
|
||||
if (isDraft) {
|
||||
|
||||
@@ -98,6 +98,7 @@ class CommentEvent(
|
||||
addressesMentioned: Set<ATag> = emptySet(),
|
||||
eventsMentioned: Set<ETag> = emptySet(),
|
||||
imetas: List<IMetaTag>? = null,
|
||||
emojis: List<EmojiUrl>? = null,
|
||||
geohash: String? = null,
|
||||
zapReceiver: List<ZapSplitSetup>? = null,
|
||||
markAsSensitive: Boolean = false,
|
||||
@@ -120,7 +121,7 @@ class CommentEvent(
|
||||
tags.add(removeTrailingNullsAndEmptyOthers("e", replyingTo.event.id, replyingTo.relay, replyingTo.event.pubKey))
|
||||
tags.add(arrayOf("k", "${replyingTo.event.kind}"))
|
||||
|
||||
create(msg, tags, usersMentioned, addressesMentioned, eventsMentioned, imetas, geohash, zapReceiver, markAsSensitive, zapRaiserAmount, isDraft, signer, createdAt, onReady)
|
||||
create(msg, tags, usersMentioned, addressesMentioned, eventsMentioned, imetas, emojis, geohash, zapReceiver, markAsSensitive, zapRaiserAmount, isDraft, signer, createdAt, onReady)
|
||||
}
|
||||
|
||||
fun replyComment(
|
||||
@@ -130,6 +131,7 @@ class CommentEvent(
|
||||
addressesMentioned: Set<ATag> = emptySet(),
|
||||
eventsMentioned: Set<ETag> = emptySet(),
|
||||
imetas: List<IMetaTag>? = null,
|
||||
emojis: List<EmojiUrl>? = null,
|
||||
geohash: String? = null,
|
||||
zapReceiver: List<ZapSplitSetup>? = null,
|
||||
markAsSensitive: Boolean = false,
|
||||
@@ -147,7 +149,7 @@ class CommentEvent(
|
||||
tags.add(removeTrailingNullsAndEmptyOthers("e", replyingTo.event.id, replyingTo.relay, replyingTo.event.pubKey))
|
||||
tags.add(arrayOf("k", "${replyingTo.event.kind}"))
|
||||
|
||||
create(msg, tags, usersMentioned, addressesMentioned, eventsMentioned, imetas, geohash, zapReceiver, markAsSensitive, zapRaiserAmount, isDraft, signer, createdAt, onReady)
|
||||
create(msg, tags, usersMentioned, addressesMentioned, eventsMentioned, imetas, emojis, geohash, zapReceiver, markAsSensitive, zapRaiserAmount, isDraft, signer, createdAt, onReady)
|
||||
}
|
||||
|
||||
fun createGeoComment(
|
||||
@@ -157,6 +159,7 @@ class CommentEvent(
|
||||
addressesMentioned: Set<ATag> = emptySet(),
|
||||
eventsMentioned: Set<ETag> = emptySet(),
|
||||
imetas: List<IMetaTag>? = null,
|
||||
emojis: List<EmojiUrl>? = null,
|
||||
zapReceiver: List<ZapSplitSetup>? = null,
|
||||
markAsSensitive: Boolean = false,
|
||||
zapRaiserAmount: Long? = null,
|
||||
@@ -169,7 +172,7 @@ class CommentEvent(
|
||||
geohash?.let { tags.addAll(rootGeohashMipMap(it)) }
|
||||
tags.add(arrayOf("K", "geo"))
|
||||
|
||||
create(msg, tags, usersMentioned, addressesMentioned, eventsMentioned, imetas, null, zapReceiver, markAsSensitive, zapRaiserAmount, isDraft, signer, createdAt, onReady)
|
||||
create(msg, tags, usersMentioned, addressesMentioned, eventsMentioned, imetas, emojis, null, zapReceiver, markAsSensitive, zapRaiserAmount, isDraft, signer, createdAt, onReady)
|
||||
}
|
||||
|
||||
private fun create(
|
||||
@@ -179,6 +182,7 @@ class CommentEvent(
|
||||
addressesMentioned: Set<ATag> = emptySet(),
|
||||
eventsMentioned: Set<ETag> = emptySet(),
|
||||
imetas: List<IMetaTag>? = null,
|
||||
emojis: List<EmojiUrl>? = null,
|
||||
geohash: String? = null,
|
||||
zapReceiver: List<ZapSplitSetup>? = null,
|
||||
markAsSensitive: Boolean = false,
|
||||
@@ -202,6 +206,8 @@ class CommentEvent(
|
||||
|
||||
findURLs(msg).forEach { tags.add(arrayOf("r", it)) }
|
||||
|
||||
emojis?.forEach { tags.add(it.toTagArray()) }
|
||||
|
||||
zapReceiver?.forEach {
|
||||
tags.add(arrayOf("zap", it.lnAddressOrPubKeyHex, it.relay ?: "", it.weight.toString()))
|
||||
}
|
||||
|
||||
@@ -62,6 +62,8 @@ data class EmojiUrl(
|
||||
) {
|
||||
fun encode(): String = ":$code:$url"
|
||||
|
||||
fun toTagArray() = arrayOf("emoji", code, url)
|
||||
|
||||
companion object {
|
||||
fun decode(encodedEmojiSetup: String): EmojiUrl? {
|
||||
val emojiParts = encodedEmojiSetup.split(":", limit = 3)
|
||||
@@ -71,5 +73,12 @@ data class EmojiUrl(
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
fun parse(tag: Array<String>): EmojiUrl? =
|
||||
if (tag.size > 2 && tag[0] == "emoji") {
|
||||
EmojiUrl(tag[1], tag[2])
|
||||
} else {
|
||||
null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,6 +42,10 @@ class EmojiPackSelectionEvent(
|
||||
const val FIXED_D_TAG = ""
|
||||
const val ALT = "Emoji selection"
|
||||
|
||||
fun createAddressATag(pubKey: HexKey): ATag = ATag(KIND, pubKey, AdvertisedRelayListEvent.FIXED_D_TAG, null)
|
||||
|
||||
fun createAddressTag(pubKey: HexKey): String = ATag.assembleATag(KIND, pubKey, AdvertisedRelayListEvent.FIXED_D_TAG)
|
||||
|
||||
fun create(
|
||||
listOfEmojiPacks: List<ATag>?,
|
||||
signer: NostrSigner,
|
||||
|
||||
@@ -164,7 +164,7 @@ open class Event(
|
||||
ATag.parse(aTagValue, relay)
|
||||
}
|
||||
|
||||
override fun taggedEmojis() = tags.filter { it.size > 2 && it[0] == "emoji" }.map { EmojiUrl(it[1], it[2]) }
|
||||
override fun taggedEmojis() = tags.filter { it.size > 2 && it[0] == "emoji" }.mapNotNull { EmojiUrl.parse(it) }
|
||||
|
||||
override fun isSensitive() =
|
||||
tags.any {
|
||||
|
||||
@@ -92,6 +92,7 @@ class GitReplyEvent(
|
||||
directMentions: Set<HexKey> = emptySet(),
|
||||
geohash: String? = null,
|
||||
imetas: List<IMetaTag>? = null,
|
||||
emojis: List<EmojiUrl>? = null,
|
||||
forkedFrom: Event? = null,
|
||||
signer: NostrSigner,
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
@@ -152,6 +153,7 @@ class GitReplyEvent(
|
||||
imetas?.forEach {
|
||||
tags.add(Nip92MediaAttachments.createTag(it))
|
||||
}
|
||||
emojis?.forEach { tags.add(it.toTagArray()) }
|
||||
tags.add(arrayOf("alt", "a git issue reply"))
|
||||
|
||||
if (isDraft) {
|
||||
|
||||
@@ -53,6 +53,7 @@ open class InteractiveStoryBaseEvent(
|
||||
zapRaiserAmount: Long? = null,
|
||||
geohash: String? = null,
|
||||
imetas: List<IMetaTag>? = null,
|
||||
emojis: List<EmojiUrl>? = null,
|
||||
): Array<Array<String>> {
|
||||
val tags = mutableListOf<Array<String>>()
|
||||
findHashtags(content).forEach {
|
||||
@@ -75,6 +76,7 @@ open class InteractiveStoryBaseEvent(
|
||||
imetas?.forEach {
|
||||
tags.add(Nip92MediaAttachments.createTag(it))
|
||||
}
|
||||
emojis?.forEach { tags.add(it.toTagArray()) }
|
||||
return tags.toTypedArray()
|
||||
}
|
||||
|
||||
|
||||
@@ -75,6 +75,7 @@ class LiveActivitiesChatMessageEvent(
|
||||
zapRaiserAmount: Long?,
|
||||
geohash: String? = null,
|
||||
imetas: List<IMetaTag>? = null,
|
||||
emojis: List<EmojiUrl>? = null,
|
||||
isDraft: Boolean,
|
||||
onReady: (LiveActivitiesChatMessageEvent) -> Unit,
|
||||
) {
|
||||
@@ -96,6 +97,7 @@ class LiveActivitiesChatMessageEvent(
|
||||
imetas?.forEach {
|
||||
tags.add(Nip92MediaAttachments.createTag(it))
|
||||
}
|
||||
emojis?.forEach { tags.add(it.toTagArray()) }
|
||||
tags.add(arrayOf("alt", ALT))
|
||||
|
||||
if (isDraft) {
|
||||
|
||||
@@ -82,6 +82,7 @@ class NIP17Factory {
|
||||
zapRaiserAmount: Long? = null,
|
||||
geohash: String? = null,
|
||||
imetas: List<IMetaTag>? = null,
|
||||
emojis: List<EmojiUrl>? = null,
|
||||
draftTag: String? = null,
|
||||
onReady: (Result) -> Unit,
|
||||
) {
|
||||
@@ -100,6 +101,7 @@ class NIP17Factory {
|
||||
geohash = geohash,
|
||||
isDraft = draftTag != null,
|
||||
imetas = imetas,
|
||||
emojis = emojis,
|
||||
) { senderMessage ->
|
||||
if (draftTag != null) {
|
||||
onReady(
|
||||
|
||||
@@ -81,6 +81,7 @@ class PollNoteEvent(
|
||||
zapRaiserAmount: Long?,
|
||||
geohash: String? = null,
|
||||
imetas: List<IMetaTag>? = null,
|
||||
emojis: List<EmojiUrl>? = null,
|
||||
isDraft: Boolean,
|
||||
onReady: (PollNoteEvent) -> Unit,
|
||||
) {
|
||||
@@ -108,6 +109,7 @@ class PollNoteEvent(
|
||||
imetas?.forEach {
|
||||
tags.add(Nip92MediaAttachments.createTag(it))
|
||||
}
|
||||
emojis?.forEach { tags.add(it.toTagArray()) }
|
||||
tags.add(arrayOf("alt", ALT))
|
||||
|
||||
if (isDraft) {
|
||||
|
||||
@@ -58,6 +58,7 @@ class TextNoteEvent(
|
||||
directMentions: Set<HexKey> = emptySet(),
|
||||
geohash: String? = null,
|
||||
imetas: List<IMetaTag>? = null,
|
||||
emojis: List<EmojiUrl>? = null,
|
||||
forkedFrom: Event? = null,
|
||||
signer: NostrSigner,
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
@@ -123,9 +124,8 @@ class TextNoteEvent(
|
||||
}
|
||||
zapRaiserAmount?.let { tags.add(arrayOf("zapraiser", "$it")) }
|
||||
geohash?.let { tags.addAll(geohashMipMap(it)) }
|
||||
imetas?.forEach {
|
||||
tags.add(Nip92MediaAttachments.createTag(it))
|
||||
}
|
||||
imetas?.forEach { tags.add(Nip92MediaAttachments.createTag(it)) }
|
||||
emojis?.forEach { tags.add(it.toTagArray()) }
|
||||
|
||||
if (isDraft) {
|
||||
signer.assembleRumor(createdAt, KIND, tags.toTypedArray(), msg, onReady)
|
||||
|
||||
@@ -63,6 +63,7 @@ class TorrentCommentEvent(
|
||||
zapRaiserAmount: Long?,
|
||||
geohash: String? = null,
|
||||
imetas: List<IMetaTag>? = null,
|
||||
emojis: List<EmojiUrl>? = null,
|
||||
forkedFrom: Event? = null,
|
||||
isDraft: Boolean,
|
||||
onReady: (TorrentCommentEvent) -> Unit,
|
||||
@@ -126,6 +127,7 @@ class TorrentCommentEvent(
|
||||
imetas?.forEach {
|
||||
tags.add(Nip92MediaAttachments.createTag(it))
|
||||
}
|
||||
emojis?.forEach { tags.add(it.toTagArray()) }
|
||||
tags.add(arrayOf("alt", ALT))
|
||||
|
||||
if (isDraft) {
|
||||
|
||||
Reference in New Issue
Block a user