15
9

More than 1 year has passed since last update.

Misskeyプラグインを作ってみよう

Last updated at Posted at 2023-04-03

Misskeyの一番簡単なプラグインであるノートの文字列を置換するプラグインを作成することで、プラグインを作成する方法について紹介しようと思います。

前提

  • この記事はある程度プログラミングの知識がある読者を想定して書いています
  • この記事はAiScript 0.12.4の情報を基に書かれています
  • Misskeyはサーバー(インスタンス)によってバージョンや使える機能が違う可能性があるのでこの記事の内容が参考にならない場合もあります
  • AiScriptは公式ドキュメントが少なく、インターネット上で参照可能な文献も少ないのでみなさんもぜひ知見を共有してみましょう

Misskeyとは?

MisskeyはActivityPubに対応した分散型プラットフォームです。

AiScriptとは?

主にMisskey内で使えるスクリプト言語でMisskeyのプラグインやMisskey Playはこの言語を利用して記述することが可能です

🔗AiScriptを書く上で参考になるリンク

まずはこの辺を読んでみるとかなりAiScriptについては分かりやすいです。

ここを読んでもわからないときは検索をしたりAiScriptのソースコードを見てみたり、Misskey内で#AiScript #MisskeyPluginで検索してみたりするといいです。

基本

AiScript PlaygroundではAiScriptのコードを試しに動かしてみることもできます!

プラグイン関連

その他

  • AiScriptの基本

  • いろいろ書かれてる偉大な先人のQiita

  • ライブラリ
    • AiScript周りで足りないものをいろいろ補完してくれるらしいです

  • Misskey AiScript部
    • MisskeyでAiScriptを書いている人や興味がある人が集まっているチャンネルです。
    • ここで質問すれば返信がもらえるかも…?

プラグインができること

https://misskey-hub.net/docs/api/endpoints.html
こちらに書いてありますが、主なものを簡単に紹介していきます

  • Plugin:register_post_form_action(title fn)
    • 投稿フォームにアクションを追加するもの
      • 導入後のイメージ
      • image.png
  • Plugin:register_note_action(title fn)
    • ユーザーメニューに項目を追加するもの
    • 導入後のイメージ
      • image.png
  • Plugin:register_note_view_interruptor(fn)
    • UIに表示されるノート情報を書き換えるもの
    • 投稿されたノートのオブジェクトの内容を書き換えてノートの中身やユーザー名などの書き換えが可能
  • Plugin:register_note_post_interruptor(fn)
    • ノート投稿時にノート情報を書き換えるもの
    • 自動でノートの内容を書き換えるようなものが作れる

メタデータを作成する

メタデータについて
https://misskey-hub.net/docs/advanced/create-plugin.html#%E3%83%A1%E3%82%BF%E3%83%86%E3%82%99%E3%83%BC%E3%82%BF

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

実行するとこんな感じ

上記のプラグインを[設定]>[プラグイン]>[プラグインのインストール]を開き、ペーストして[✓ インストール]をクリックすることでインストール可能です。

投稿画面
image.png

ノートの表示
image.png

さいごに

以上で簡単なプラグインが作成できました!
他のサンプルはMisskey内で#MisskeyPluginで検索するとたくさんプラグインが出てくるのでぜひ読んでみても参考になると思います!

Misskey Playに関してはこちらの記事が分かりやすいです!

Misskeyでは

などで活動しているのでお気軽にお声がけください!

Misskey周りで作ったものの宣伝

ここにもプラグインやPlayのコードを置いてあるので参考になるかもしれません。

15
9
0

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
15
9