Fix repost detection

This commit is contained in:
styppo 2023-02-09 11:47:37 +00:00
parent 28ea16298d
commit 289c37f91e
No known key found for this signature in database
GPG Key ID: 3AAA685C50724C28
2 changed files with 31 additions and 3 deletions

View File

@ -114,4 +114,8 @@ export default class Event {
eventRefs() { eventRefs() {
return new EventRefs(this.eventTags()) return new EventRefs(this.eventTags())
} }
hasAncestor() {
return this.eventTags().some(tag => tag.marker !== 'mention')
}
} }

View File

@ -62,21 +62,45 @@ export default class Note {
} }
contentTagRefs() { contentTagRefs() {
return Note.contentTagRefs(this)
}
static contentTagRefs(event) {
const regex = /#\[([0-9]+)]/g const regex = /#\[([0-9]+)]/g
let refs = [] let refs = []
let match let match
while ((match = regex.exec(this.content))) { while ((match = regex.exec(event.content))) {
refs.push(match[1]) refs.push(match[1])
} }
return refs return refs
} }
isRepost() {
return Note.isRepost(this)
}
static isRepost(event) {
if (!/^#\[([0-9]+)]$/.test(event.content)) return false
return event.tags[Note.contentTagRefs(event)[0]]?.type === TagType.EVENT
}
static mentionsPubkey(event, pubkey) {
if (event.tags.some(tag => tag.type === TagType.PUBKEY
&& tag.ref === pubkey
&& tag.marker === 'mention'
)) return true
return Note.contentTagRefs(event)
.map(idx => event.tags[idx])
.some(tag => tag.type === TagType.PUBKEY && tag.ref === pubkey)
}
isRepostOrTag() { isRepostOrTag() {
return Note.isRepostOrTag(this) return Note.isRepostOrTag(this)
} }
static isRepostOrTag(event) { static isRepostOrTag(event) {
return /#\[([0-9]+)]/.test(event.content) return /^#\[([0-9]+)]$/.test(event.content)
} }
isReaction() { isReaction() {
@ -85,7 +109,7 @@ export default class Note {
static isReaction(event) { static isReaction(event) {
return event.kind === EventKind.REACTION return event.kind === EventKind.REACTION
|| (!event.eventRefs().isEmpty() && Note.isReactionContent(event.content)) || (event.hasAncestor() && Note.isReactionContent(event.content))
} }
static isReactionContent(content) { static isReactionContent(content) {