Misskey Remote Renote Plugin
注意事項
アクセストークンを利用する関係上、最悪の場合に他人に好き勝手にノートされる可能性があります。そのような場合は、アクセストークンを削除しましょう。
また、このプラグインの使用を一切合切やめる場合もアクセストークンを削除しましょう。使用されていないアクセストークンを放置するのは悪用の危険性があります。
これは何?
これはMisskey系サーバーでのサーバーを跨いだリノートを容易にするプラグインです。
Misskey系サーバーでリノートをするためには、「ノートURLの取得→照会→リノート」のようにページを跨いだ操作が必要になります。
このような不便を解消する目的で作成されました。
コード
各々のバージョンにあったものを選択してください。
AiScriptのバージョンなんかはコンソールで<: Core:v
することで確認できます。
@ 0.16.0(新しいバージョン)
/// @ 0.16.0
### {
name: "Misskey Remote Renote"
id: "9ca5b819-3769-4a5e-ab2c-604cfcc1f93c"
version: "1.0.0"
author: "@yamada_20020924@voskey.icalo.net"
description: "MisskeyのRemoteRenoteを実現するプラグイン"
permissions: []
config: {
targetServers: {
type: "string"
label: "targets"
description: "host: リノートしたいサーバー、token: アクセストークン。JSON形式で記述"
default: '[{"host": "https://misskey.io/", "token": ""}]'
}
}
}
@showError(error){
if (error.info.code=="RATE_LIMIT_EXCEEDED") {
Mk:dialog("リノートしすぎ" "しばらく時間をおいてください。")
}
elif (error.info.code=="AUTHENTICATION_FAILED") {
Mk:dialog("アクセストークンエラー" "アクセストークンに誤りがあるか、あるいは権限が適切ではありません。")
}
elif (error.info.code=="INTERNAL_ERROR") {
Mk:dialog("内部エラー" "連合オフなどによってアクセスできていない可能性があります。")
}
else {
Mk:dialog("原因不明!" "とりあえずエラーコードを添えて @yamada_20020924@voskey.icalo.net に連絡して!")
Mk:dialog(error.name Json:stringify(error.info))
}
}
@remoteRenote(note, pair){
//照会
let noteData = Mk:apiExternal(pair.host "ap/show" {uri: `{SERVER_URL}/notes/{note.id}`} pair.token)
if (Core:type(noteData)=="error") {
showError(noteData)
}
else {
//リノート
let result = Mk:apiExternal(pair.host "notes/create" {renoteId: noteData.object.id} pair.token)
if (Core:type(result)=="error") {
showError(result)
}
else {
Mk:dialog("完了通知" "リノートに成功しました。")
}
}
}
let targetServers = Json:parse(Plugin:config.targetServers)
each let pair targetServers {
Plugin:register_note_action(`Renote to {pair.host}` @(note){remoteRenote(note, pair)})
}
@ 0.13.0(古いバージョン向け)
/// @ 0.13.0
### {
name: "Misskey Remote Renote"
id: "9ca5b819-3769-4a5e-ab2c-604cfcc1f93c"
version: "1.0.0"
author: "@yamada_20020924@voskey.icalo.net"
description: "MisskeyのRemoteRenoteを実現するプラグイン(AiScriptが古い鯖向け)"
permissions: []
config: {
targetServers: {
type: "string"
label: "targets"
description: "host: リノートしたいサーバー、token: アクセストークン。JSON形式で記述"
default: '[{"host": "https://misskey.io/", "token": ""}]'
}
}
}
let SERVER_URL = Mk:api("meta" {}).uri
@showError(error){
if (error.info.code=="RATE_LIMIT_EXCEEDED") {
Mk:dialog("リノートしすぎ" "しばらく時間をおいてください。")
}
elif (error.info.code=="AUTHENTICATION_FAILED") {
Mk:dialog("アクセストークンエラー" "アクセストークンに誤りがあるか、あるいは権限が適切ではありません。")
}
elif (error.info.code=="INTERNAL_ERROR") {
Mk:dialog("内部エラー" "連合オフなどによってアクセスできていない可能性があります。")
}
else {
Mk:dialog("原因不明!" "とりあえずエラーコードを添えて @yamada_20020924@voskey.icalo.net に連絡して!")
Mk:dialog(error.name Json:stringify(error.info))
}
}
@remoteRenote(note, pair){
//照会
let noteData = Mk:api(`{pair.host}api/ap/show` {uri: `{SERVER_URL}/notes/{note.id}`} pair.token)
if (Core:type(noteData)=="error") {
showError(noteData)
}
else {
//リノート
let result = Mk:api(`{pair.host}api/notes/create` {renoteId: noteData.object.id} pair.token)
if (Core:type(result)=="error") {
showError(result)
}
else {
Mk:dialog("完了通知" "リノートに成功しました。")
}
}
}
let targetServers = Json:parse(Plugin:config.targetServers)
each let pair targetServers {
Plugin:register_note_action(`Renote to {pair.host}` @(note){remoteRenote(note, pair)})
}
@ 0.11.0(Firefish向け)
/// @ 0.11.0
### {
name: "Misskey Remote Renote"
id: "9ca5b819-3769-4a5e-ab2c-604cfcc1f93c"
version: "1.0.1"
author: "@yamada_20020924@voskey.icalo.net"
description: "MisskeyのRemoteRenoteを実現するプラグイン"
permissions: []
config: {
targetServers: {
type: "string"
label: "targets"
description: "host: リノートしたいサーバー、token: アクセストークン。JSON形式で記述"
default: "[{\"host\": \"https://misskey.io/\", \"token\": \"\"}]"
}
}
}
#metaData = Mk:api("meta" {})
#SERVER_URL = metaData.uri
@remoteRenote(note, pair){
#noteData = Mk:api(`{pair.host}api/ap/show` {uri: `{SERVER_URL}/notes/{note.id}`} pair.token)
? (Core:type(noteData)="error") {
Mk:dialog(_ "error")
}
. {
#result = Mk:api(`{pair.host}api/notes/create` {renoteId: noteData.object.id} pair.token)
? (Core:type(result)="error") {
Mk:dialog(_ "error")
}
. {
Mk:dialog("完了通知" "リノートに成功しました。")
}
}
}
#targetServers = Json:parse(Plugin:config.targetServers)
~~ #pair targetServers {
Plugin:register_note_action(`Renote to {pair.host}` @(note){remoteRenote(note, pair)})
}
使い方
プラグインを導入する
プラグインの導入は以下の手順で行います。
- 「設定」を開く。
- "クライアント設定"の項目にある「プラグイン」を開く。
- 「プラグインをインストール」を開く。
- 上記のコードをコピーアンドペーストして、「インストール」を押す。
以上で完了です。
サーバーとアクセストークンを設定する
アクセストークンは絶対に他人に公開しないでください。
プラグインの「管理」に"Misskey Remote Renote"という名前でプラグインが追加されていると思います。
そのプラグインの 「設定」を押すと、targetsという名前のテキスト入力欄が出現すると思います。
ここで、リノートしたいサーバーとアクセストークンを設定していきます。
[{"host": "https://misskey.io/", "token": "BU8BUI3uuiIUu8UBisctykK2boOI3bui"}, {"host": "https://misskey.backspace.fm/", "token": "cbiuIU9UBIbde8bjBIV9gdbIbijbdei7"}]
このようにJSON形式でサーバーを設定していきます。
アクセストークンを生成する
先ほど指定したサーバーに対して、リノートを行うためにはトークンを設定する必要があります。
プラグインの導入は以下の手順で行います。
- 「設定」を開く。
- "その他の設定"の項目にある「API」を開く。
- 「アクセストークンの発行」を開く。
- 名前を「Misskey Remote Renote Token」に設定する。
- 「ノートを作成・削除する」を有効にする。
- ✅を押す。
- 確認コードが表示されるので、それを以下のように設定する。
[{"host": "https://misskey.io/", "token": "BU8BUI3uuiIUu8UBisctykK2boOI3bui"}, {"host": "https://misskey.backspace.fm/", "token": "cbiuIU9UBIbde8bjBIV9gdbIbijbdei7"}]
リノートする
リノートしたいノート下部の3点リーダー(…)をクリック、通報の下にRenote to ~~みたいなのが出るので、それを押すと、「完了通知」がくるか、それ以外のダイアログが出るはずです。
FAQ
うんともすんとも言わない
以下の要因が考えられます。
- apiExternalが使えるバージョンではない。
→@ 0.13.0
のものを使いましょう。 - JSONの形式が間違っている
→直しましょう。
MisskeyからFirefishでのRNの呼び出しはできる?
Misskey APIを使っている場合はできると思います。
Firefishでも使える?
Firefish同士だとうまく行ったりしますが、Misskeyとだとうまくいかなかったりします。