-
Notifications
You must be signed in to change notification settings - Fork 0
/
CiteThisNote.misskeyplugin
136 lines (117 loc) · 6.24 KB
/
CiteThisNote.misskeyplugin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/// @ 0.13.0
### {
name: "このノートを引用する"
version: "2.2.2"
author: "@[email protected]"
description: "Misskeyでの投稿を參考文獻として引用したいときなど用に、BibLaTeX形式でノートのメタデータを出力します。"
permissions: []
config: {}
}
//
// {notes.text} みたいに書けば Misskey API の https://misskey.io/api-doc#tag/notes/operation/notes/show にある{"text": "string", ...} などから情報を讀み取れる?らしい(よくわかってない)(こんにゃのみんにゃどうやってわかるんだふええ)
//
// var note... みたいなのは變數宣言 (たとへば notes.username みたいなのは https://misskey.io/api-doc#tag/notes/operation/notes/show の Response samples 内にある`"user": {"id": "xxxxxxxxxx","name": "藍", ...}`を參考にした )
//
//ここからCiteThisNote關數。これは最終的にPlugin:register_note_actionから呼び出される
@functionCiteThisNote(notes){
// var noteUserName = `{notes.user.username}` //@username の username部分
// var noteUserDisplayName = `{notes.user.name}` //表示名
var noteCreatedAt = `{notes.createdAt}` // ノートが生成された日時
var noteCreatedAtUnix = Date:parse(noteCreatedAt) //ノート生成日時をUnix通秒にする
var noteCreatedAtYear = Date:year(noteCreatedAtUnix) //ノート生成年を計算する
// var noteText = `{notes.text}` // ノートの内容
// var noteURL = `{notes.url}` //使っちゃダメ
// var noteFileName = `{notes.files.name}` //添付ファイルの名
// var noteFileURL = `{notes.files.url}` // 添付ファイルのURL
// var noteFileMD5 = `{notes.files.md5}` //添付ファイルのMD5
// var noteTags = `{notes.tags}` //ノートのタグ
var siteName = Mk:api("meta" {}).name
//しせるにゃんの助言を基にノートのURLを生成
//ありがとうしせるにゃんにゃん♥️ https://misskey.io/notes/9lhy3ug03g
//追記:改變は山田結城氏の助言を參考にした https://misskey.io/notes/9lkt7p500p
//再追記:にゃんかAPIに負荷をかけるのはよくないらしいので、
//APIを使はずにMk:url()を改變した、しせるにゃんの殊をここにて使用する
// https://misskey.io/notes/9lkv102djq
var curentURL = Mk:url().split('/').slice(0 3).join('/')
// var metaURI = Mk:api("meta" {}).uri
var noteURL = `{curentURL}/notes/{notes.id}`
// var noteURL = `{Mk:url()}`
// {} `などの越化
var leftCurlyBraces = "{" //このテクニックはMisskey Pagesで學んだ。
var rightCurlyBraces = "}" //ありがとう、しゅいろ。
var threeBackticks = "```"
// Reference: https://github.com/aiscript-dev/aiscript/blob/master/docs/std.md#datenow-num
//Tkg氏の助言を基にした https://misskey.io/notes/9lhwq42479
//今年を入れる
var currentYear = Date:year()
var currentMonth = Date:month()
var currentDay = Date:day()
// @[email protected] の example.com部分。
//ここは紗々さんから教へてもらふた https://misskey.io/notes/9lhsh1umas
var SERVER_NAME = Mk:url().split('/')[2]
//地元鯖が初期値として入ってる仕組み
var noteUserHost = `{SERVER_NAME}`
var noteURI = ""
//notes.user.hostがnull以外だと{notes.user.host}を入れる
//このif文はしせるにゃんの助言 https://misskey.io/notes/9lgj0l6d02 を基にした
if (notes.user.host != null) {
noteUserHost = `{notes.user.host}`
noteURI = `{notes.uri}`
}
//ここから文件の處理
var noteFileNameArray = []
var noteFileURLArray = []
var noteFileMD5Array = []
//もしnotes.filesが空の場合 ここは無視される氣がする
//もしnotes.filesが空っぽじゃなかったら
//notes.filesの要素回數分だけこの殊塊を周す
//1周每にnoteFile*Arrayの中へ[file].*の要素をpushする
//ここは特に紗々@salano_ym氏の助言を參考にした
// https://misskey.io/notes/9ljwy62lqa
each let file, notes.files {
noteFileNameArray.push(file.name)
noteFileURLArray.push(file.url)
noteFileMD5Array.push(file.md5)
}
//
var noteFileNameArrayJoined = noteFileNameArray.join(", ")
var noteFileURLArrayJoined = noteFileURLArray.join(", ")
var noteFileMD5ArrayJoined = noteFileMD5Array.join(", ")
//未實裝機能
/*
fileurl = {leftCurlyBraces}{notes.files.url}{rightCurlyBraces},
filemd5 = {leftCurlyBraces}{notes.files.md5}{rightCurlyBraces},
*/
// notes.text内に```があったら取り除く
// notes.text = null だったら壞れることが判明。知らなかったそんなの...
// もし notes.text が空っぽじゃなかったら、replaceをしてほしい
var noteTextNoCodeBlock = ""
if (notes.text != null) {
noteTextNoCodeBlock = notes.text.replace(threeBackticks, "")
}
//蟲捕り用
//Mk:dialog("" `@online{leftCurlyBraces}{notes.user.username}_{Date:year()},`) //This works
//この殊の核心となる部分がこちらです↓
Mk:dialog("" `{threeBackticks}
@online{leftCurlyBraces}{notes.user.username}_{noteCreatedAtUnix},
title = {leftCurlyBraces}{leftCurlyBraces}{notes.user.name}@{notes.user.username}{rightCurlyBraces}の投稿{rightCurlyBraces},
url = {leftCurlyBraces}{noteURL}{rightCurlyBraces},
abstract = {leftCurlyBraces}{leftCurlyBraces}{noteTextNoCodeBlock}{rightCurlyBraces}{rightCurlyBraces},
titleaddon = {leftCurlyBraces}{siteName}{rightCurlyBraces},
type = {leftCurlyBraces}microblogging{rightCurlyBraces},
author = {leftCurlyBraces}@{notes.user.username}@{noteUserHost}{rightCurlyBraces},
urldate = {leftCurlyBraces}{Date:year()}-{Date:month()}-{Date:day()}{rightCurlyBraces},
date = {leftCurlyBraces}{notes.createdAt}{rightCurlyBraces},
keywords = {leftCurlyBraces}{notes.tags}{rightCurlyBraces},
note = {leftCurlyBraces}
filename = {leftCurlyBraces}{noteFileNameArrayJoined}{rightCurlyBraces},
fileurl = {leftCurlyBraces}{noteFileURLArrayJoined}{rightCurlyBraces},
filemd5 = {leftCurlyBraces}{noteFileMD5ArrayJoined}{rightCurlyBraces},
uri = {leftCurlyBraces}{noteURI}{rightCurlyBraces},
currenturldate = {leftCurlyBraces}{Date:now()}{rightCurlyBraces}
{rightCurlyBraces}
{rightCurlyBraces}
{threeBackticks}`)
}
//ノートに項目を追加。押すと17行目の@functionCiteThisNoteが走る。
Plugin:register_note_action(`このノートを引用する` functionCiteThisNote)