1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Misskey Remote Renote Plugin

Last updated at Posted at 2023-10-11

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)})
}

使い方

プラグインを導入する

プラグインの導入は以下の手順で行います。

  1. 「設定」を開く。
  2. "クライアント設定"の項目にある「プラグイン」を開く。
  3. 「プラグインをインストール」を開く。
  4. 上記のコードをコピーアンドペーストして、「インストール」を押す。

以上で完了です。

サーバーとアクセストークンを設定する

アクセストークンは絶対に他人に公開しないでください。

プラグインの「管理」に"Misskey Remote Renote"という名前でプラグインが追加されていると思います。
そのプラグインの 「設定」を押すと、targetsという名前のテキスト入力欄が出現すると思います。
ここで、リノートしたいサーバーとアクセストークンを設定していきます。

[{"host": "https://misskey.io/", "token": "BU8BUI3uuiIUu8UBisctykK2boOI3bui"}, {"host": "https://misskey.backspace.fm/", "token": "cbiuIU9UBIbde8bjBIV9gdbIbijbdei7"}]

このようにJSON形式でサーバーを設定していきます。

アクセストークンを生成する

先ほど指定したサーバーに対して、リノートを行うためにはトークンを設定する必要があります。
プラグインの導入は以下の手順で行います。

  1. 「設定」を開く。
  2. "その他の設定"の項目にある「API」を開く。
  3. 「アクセストークンの発行」を開く。
  4. 名前を「Misskey Remote Renote Token」に設定する。
  5. 「ノートを作成・削除する」を有効にする。
  6. ✅を押す。
  7. 確認コードが表示されるので、それを以下のように設定する。
[{"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とだとうまくいかなかったりします。

1
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?