Misskeyの一番簡単なプラグインであるノートの文字列を置換するプラグインを作成することで、プラグインを作成する方法について紹介しようと思います。
前提
- この記事はある程度プログラミングの知識がある読者を想定して書いています
- この記事はAiScript 0.12.4の情報を基に書かれています
- Misskeyはサーバー(インスタンス)によってバージョンや使える機能が違う可能性があるのでこの記事の内容が参考にならない場合もあります
- AiScriptは公式ドキュメントが少なく、インターネット上で参照可能な文献も少ないのでみなさんもぜひ知見を共有してみましょう
Misskeyとは?
MisskeyはActivityPubに対応した分散型プラットフォームです。
AiScriptとは?
主にMisskey内で使えるスクリプト言語でMisskeyのプラグインやMisskey Playはこの言語を利用して記述することが可能です
🔗AiScriptを書く上で参考になるリンク
まずはこの辺を読んでみるとかなりAiScriptについては分かりやすいです。
ここを読んでもわからないときは検索をしたりAiScriptのソースコードを見てみたり、Misskey内で#AiScript
#MisskeyPlugin
で検索してみたりするといいです。
基本
-
aiscript/get-started.md
- AiScriptの書き方はまずはここを読んでみましょう
-
aiscript/syntax.md
- 基本的な記法はこれを読むとなんとなくわかります
-
aiscript/std.md
- AiScriptで扱える関数一覧が書いてあります
AiScript PlaygroundではAiScriptのコードを試しに動かしてみることもできます!
プラグイン関連
- プラグインの作成
- プラグインAPIリファレンス
- MisskeyのAPIリファレンス
その他
- AiScriptの基本
- いろいろ書かれてる偉大な先人のQiita
- ライブラリ
- AiScript周りで足りないものをいろいろ補完してくれるらしいです
- Misskey AiScript部
- MisskeyでAiScriptを書いている人や興味がある人が集まっているチャンネルです。
- ここで質問すれば返信がもらえるかも…?
プラグインができること
https://misskey-hub.net/docs/api/endpoints.html
こちらに書いてありますが、主なものを簡単に紹介していきます
- Plugin:register_post_form_action(title fn)
- Plugin:register_note_action(title fn)
- Plugin:register_note_view_interruptor(fn)
- UIに表示されるノート情報を書き換えるもの
- 投稿されたノートのオブジェクトの内容を書き換えてノートの中身やユーザー名などの書き換えが可能
- Plugin:register_note_post_interruptor(fn)
- ノート投稿時にノート情報を書き換えるもの
- 自動でノートの内容を書き換えるようなものが作れる
メタデータを作成する
AiScriptのメタデータ埋め込み機能を利用してプラグインのメタデータを定義します。
書式
/// @ 0.12.4
### {
name: "プラグイン名"
version: "0.1.0"
author: "書いた人"
description: "説明"
permissions: ["write:notes"] //Misskey APIにリクエストする際の権限
config: {
someKey: {
type: 'string' // ここに設定の型(AiScriptの型とは違うので注意)string number boolean のいずれか
label: '設定の名前・ラベル'
description: '設定の説明'
default: 'デフォルト値'
}
}
}
上記のメタデータをスクリプトの先頭に記述しておきます。
Misskey APIの権限一覧はこちら
ここで設定したコンフィグは
Plugin:config.someKey
のように呼び出すことで利用できます(今回は使用しません)
コード本体を書く
表示するノートの文字列を置換するプラグインを作成していきます。
メタデータ
まず、メタデータですが今回はAPIに対する権限・設定は必要ないのでこのような感じのメタデータになります。
/// @ 0.12.4
### {
name: "ノートの偉業をカスタム絵文字に変換する"
version: "0.0.1"
author: "@taichan@misskey.io"
description: "ノート中に現れる偉業の文字列をカスタム絵文字に変換します。"
permissions: [] //Misskey APIにリクエストする際の権限
config: {}
}
バージョン番号のつけ方に迷ったときは、個人的にはセマンティックバージョニングに従うのがおすすめです。
コードを書く
今回は、表示するノートの内容を書き換えたいのでPlugin:register_note_view_interruptor(fn)
を利用していきます。
記事内の解説はこちら
Plugin:register_note_view_interruptor(fn)
は次のような関数です。
コールバック関数には、第一引数に対象のノートオブジェクトが渡されます。
コールバック関数の返り値でノートが書き換えられます。
引用元: プラグインAPIリファレンス
Plugin:register_note_view_interruptor(@(note){
note.text = note.text.replace("偉業", ":igyo:")
note
})
このコードでは、noteが持つテキストの中の「偉業」という文字を「:igyo:」に置き換えて、ノートオブジェクトを返却する関数をPlugin:register_note_view_interruptor
に渡すことでノートの表示時に「偉業」の文字列を置き換えます。
ノートオブジェクトの詳細はこちら
完成図
/// @ 0.12.4
### {
name: "ノートの偉業をカスタム絵文字に変換する"
version: "0.0.1"
author: "@taichan@misskey.io"
description: "ノート中に現れる偉業の文字列をカスタム絵文字に変換します。"
permissions: [] //Misskey APIにリクエストする際の権限
config: {}
}
Plugin:register_note_view_interruptor(@(note){
note.text = note.text.replace("偉業", ":igyo:")
note
})
実行するとこんな感じ
上記のプラグインを[設定]>[プラグイン]>[プラグインのインストール]
を開き、ペーストして[✓ インストール]
をクリックすることでインストール可能です。
さいごに
以上で簡単なプラグインが作成できました!
他のサンプルはMisskey内で#MisskeyPlugin
で検索するとたくさんプラグインが出てくるのでぜひ読んでみても参考になると思います!
Misskey Playに関してはこちらの記事が分かりやすいです!
Misskeyでは
などで活動しているのでお気軽にお声がけください!
Misskey周りで作ったものの宣伝
ここにもプラグインやPlayのコードを置いてあるので参考になるかもしれません。