洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@[email protected]

Misskey에서 Pleroma, Hollo () ()Misskey 서버로부터 온 Markdown 揭示物(게시물)이 읽기 힘든 것은 Misskey의 HTML → Markdown 變換機(변환기)完全(완전)하지 않기 때문. (이를테면, Misskey 2025.1.0에서 고쳐졌지만, MFM에 루비 文字(문자) 機能(기능)이 이미 있음에도 不拘(불구)하고 ()Misskey 서버에서 루비 文字(문자)를 쓰면 제대로 表示(표시)하지 못하는 問題(문제)가 있었다.) Misskey끼리는 HTML을 ()하지 않고 MFM 소스 그대로 주고 받으니까 穩全(온전)表示(표시)되어서 보기 쉬운 것이고. 애()에 Misskey는 內部(내부) 表現(표현)을 MFM으로 할 거면 HTML → Markdown 變換機(변환기)를 제대로 完全(완전)하게 만들든가, 그럴 게 아니면 內部(내부) 表現(표현)을 HTML로 해야 했는데, 그렇지 않아서 생기는 일. 私見(사견)으로는 Misskey는 內部(내부) 表現(표현)을 HTML로 아예 바꾸든가, 그러기 힘들다면 적어도 內部(내부) 表現(표현)에 MFM이나 HTML ()() 한 쪽으로 保存(보존)할 수 있도록 고치는 게 나을 것 같다.

https://stella.place/notes/9bpogt7z2p

나물's avatar
나물

@[email protected]

미스키가 아니면 마크다운을 비활성화시키는 미스키 플러그인을 만들었어요

원래 있던 플러그인이면 링크주세요 제가 코딩을 제대로 배운건 아니라서 높은확률로 그게 더 나을거에요

기본적으로 미스키가 아닌 인스턴스의 마크다운(굵게, 취소선)을 제거하고, 만약 해당 인스턴스에서 마크다운이 적용된다면(trpg-o.xyz같은) 해당 유저 메뉴에서 그 인스턴스의 마크다운을 활성화시킬 수 있어요
설명에도 써놨지만 넓이없는공백을 추가시키는 방식입니다
플레로마는 한국어권에선 너무 보기 힘든데다 플레인텍스트랑 마크다운 전환이 가능하다고 해서 저도 잘 모르겠습니다

버그 있으면 제보주세요
못고칠수도 있음 ㅎㅎ; 코드는 걍 아무렇게나 가져가고 수정하셔두 돼요
수정해주시면 제가 감사하게 사용함 굳이 제작자 안남겨도 됩니다

이하 코드입니다.

/// @ 0.12.4

### {
	name: "미스키 외 인스턴스의 마크다운 제거"
	author: "@[email protected]"
	version: 1
	description: "미스키가 아닌 인스턴스에 적용된 마크다운을 제거합니다. 마크다운이 적용되는 인스턴스인 경우, 유저 메뉴에서 해당 인스턴스의 마크다운을 활성화할 수 있습니다. *과 ~로 만들어지는 마크다운을 무효화하나, 해당 문자들의 뒤에 넓이 없는 공백(​)이 추가되는 방식입니다. 따라서 해당 노트를 복사+붙여넣기하면, 당신의 미스키에서 작성해도 마크다운이 적용되지 않으니 유의 바랍니다."
}
@loadList() {
	instanceList = Mk:load("mastodonMarkdown/unapply")
	if (instanceList == null) instanceList = [] else instanceList = instanceList.split(" ")
}
@textReplace(text) {
	text = text.replace("*" "*​")
	text = text.replace("~" "~​")
	return text
}
@removeListItem(user) {
	loadList()

	if (user.host == null) {
		Mk:dialog("마크다운 제외 실패" "이 인스턴스는 당신의 인스턴스입니다!" "error")
	} elif (user.instance.softwareName == "misskey") {
		Mk:dialog("마크다운 제외 실패" "이 인스턴스는 미스키입니다!" "error")
	} else {
		if (instanceList.incl(user.host)) {
			if (Mk:confirm("마크다운 비활성화" `{user.host} 인스턴스의 마크다운을 비활성화 하시나요?` "question")) {
				instanceList = instanceList.filter(@(v) {return v != user.host})
				let text = `{user.host} 인스턴스의 마크다운이 비활성화되었습니다.`
				Mk:dialog("마크다운 비활성화" text "success")
			}
		} else {
			if (Mk:confirm("마크다운 활성화" `{user.host} 인스턴스의 마크다운을 활성화 하시나요?` "question")) {
				instanceList.push(user.host)
				let text = `{user.host} 인스턴스의 마크다운이 활성화되었습니다.`
				Mk:dialog("마크다운 활성화" text "success")
			}
		}

		Mk:save("mastodonMarkdown/unapply" instanceList.join(" "))
	}
}

var instanceList = []
loadList()
Plugin:register_user_action("이 인스턴스의 마크다운 활성화" @(user) {
	removeListItem(user)
})
Plugin:register_note_view_interruptor(@(note) {
	if (note.user.host != null) {
		if (instanceList.incl(note.user.host) == false && note.user.instance.softwareName != "misskey") {
			note.text = textReplace(note.text)
		}
	}
	if (Obj:has(note "reply")) {
		if (note.reply.user.host != null) {
			if (instanceList.incl(note.reply.user.host) == false && note.reply.user.instance.softwareName != "misskey") {
				note.reply.text = textReplace(note.reply.text)
			}
		}
	}
	return note
})