🤖

mo4jiから始めるMisskey時報Botの作り方 上編

2023/12/18に公開

この記事はぼすきーアドベントカレンダー12/18の記事です。

はじめに

「もう4時か......」


なぜか特定の時間に一斉にもう4時かと投稿するユーザーたち。
ノリで作ったらいつのまにか根づいてしまったもう4時か。今回はこれを例にMisskeyにおけるbotの作り方を説明していきます。
本記事はぼすきーアドベントカレンダーの記事です。また初心者を想定して書いているので冗長な部分があります。ご了承ください。

用意するもの

  1. Postman(などhttpリクエストを送信するためのソフト)
  2. 何かしらのプログラミング言語の知識
  3. AWSアカウント

1 Botを作ろう

1.1 WebAPIとは何か?

「Botを作るって何を.....何をすれば良いんだ?」

まず、Misskeyの通信を見てみましょう。通信はブラウザの開発者ツールなどで見ることができます。

この画面はFirefoxですが大体どのブラウザでも同じ感じだと思います
この200とか204とかの行一つ一つが送信したリクエストです。
MisskeyのAPIはWebAPIと呼ばれるAPIの一種で、HTTPリクエストを要求すると結果がjsonで応答されるというシステムです。
HTTPリクエストとは何か......を語ると記事一本では終わらなくなるので、なんか1つの通信で何かの結果が一つ返ってくる、みたいな認識で大丈夫です。
MisskeyはAPIフレンドリーで、大抵のことはAPIから操作できます。非公式クライアントはこのAPIを呼ぶようにできていますし、公式(Misskeyサーバーから配信されるWebページ)も同じAPIを呼びます。
そしてこの一覧がmisskey-hubにまとめられています。

https://misskey-hub.net/docs/api/endpoints.html

これらはそれぞれ「操作したいこと」のためのURLの後半部分です。このURLの後半部分をエンドポイントと呼びます。
例えばnotes/createは、ノートの作成のエンドポイントです。
そして、通信を監視しながらノートを投稿すると、こんな感じの通信が発生します。

https://voskey.icalo.net/api/notes/create を呼び出している図

前半部分がサーバーのアドレス、apiを挟んで後半にエンドポイントを持ってきます。

つまりBotを作るには、このAPIのエンドポイントにHTTPリクエストを要求すればよいのです。

1.2 実践

「オーケーわかった......じゃあそのHTTPリクエストとやらはどうやって?」

はじめは
https://misskey-hub.net/docs/api/endpoints/ping.html
を要求してみましょう。

HTTPリクエストを要求するソフトは色々ありますが(頑張ればブラウザでもできます)、私はPOSTMANをお薦めしています。

https://www.postman.com/

開くとこんな感じになります。newを押して......

HTTPを押して......

こんな感じの画面になります。
misskeyでは[アドレス]/api/[要求するAPIエンドポイント]の形式で呼ぶので、例えばhttps://misskey.io/api/pingのようなアドレスにします。
次にHTTPリクエストの種類(メソッド)です。GETPOSTPUTDELETEなど色々ありますが、misskeyAPIを呼ぶ場合はPOSTにします。

ちなみにブラウザで開く場合はGETの要求がされています。

次に、パラメータを書きます。

pingのパラメータはないので、
Bodyを選択→rawを選択→textをjsonに変更して

{}

を入れます。

こんな感じで結果が返って来れば成功です。

1.2.1 自分探し

次にiを呼んでみます。
さっきと同じ方法でできる......と思いきや。

クレデンシャル必須

このAPIにはクレデンシャルと呼ばれる認証情報が必要です。
設定からAPIトークンを発行します。

このトークンは絶対に公開しないでください

さて、Misskeyのクレデンシャルは、jsonにiの項目に含めます。[1]

{
    "i":"XXXXXXXXXXXXXXXXXX"
}

1.3 Botを作る

まず作りたいBotがどういう動作をするか考えます。
ここではノートを投稿するBotにします。
https://misskey-hub.net/docs/api/endpoints.html
ノート投稿するエンドポイントを探して......

https://misskey-hub.net/docs/api/endpoints/notes/create.html
を要求します。
必要なパラメータは鍵と本文、権限。これをJSONフォーマットに入れて送信します。権限はホーム以下にした方がよいでしょう。

これをPOSTMANなどでHTTPリクエストをテストして......
投稿ができたらこれをプログラムにします。
一般的に使用されるプログラミング言語であればHTTPリクエストの送受信ができると思うので作ります。
私はpythonで書きました。

TOKEN = "XXXXXXXXXXXXXXXX"
data = {'visibility': 'home', 'text': "もう4時か", 'i': TOKEN}
response = requests.post(
    'https://voskey.icalo.net/api/notes/create',
    headers={'Content-Type': 'application/json'},
             data=json.dumps(data))

なお、ループを挟んでHTTPリクエストを呼ぶ場合必ず1秒以上のsleepやwaitを入れましょう。
最悪の場合、BANや警察のお世話になる可能性があります。

さて、プログラムが完成したら実行して......

完成!

次章!定期実行する方法!たぶん明日(12/19)上がります!!

脚注
  1. この仕様はここに記述されています。
    https://misskey-hub.net/docs/api/ ↩︎

Discussion