見出し画像

100の言葉で褒めてくれる全肯定botをBlueskyで作った

こんにちは、suibariです。

青い鳥の面影を残すSNS、Blueskyが巷で流行っています。
Blueskyは現在API利用にほぼ制限がなく、開発者にとってはかなり楽しい遊び場になっています。

自分もTwitter APIで遊んでいた者なので、Blueskyでも何か作りたいと思いました。
今回作ったのは全肯定botです。

アカウントは以下です。
概要、実装について説明します。

どんなもの?

Blueskyのbotアカウントであり、フォローするとフォロバし返します。
全肯定botがフォローしているユーザがポストした場合、100パターンの言葉で全肯定のリプライを送信します。
こんな感じ。

なんでもほめてくれます

着想は既存のLINE botと、Blueskyで「bot 欲しい」とかで検索して多かった意見から得ました。

LINE botの実装は公開されていないので、自分でフルスクラッチしました。

どう作った?

Google App Scriptで実装しました。
GASを選んだ理由は以下です。

  • 趣味利用のPaaSが別アプリケーションの運用でインスタンス時間的に新規アプリを入れられなさそうなこと

  • 今回のアルゴリズム的に、簡単なDBを持ち時間トリガーで関数を実行するだけで済み、かつ処理時間もかからなさそうなこと

botのフローチャートは以下です。


フローチャート

このフローチャートを実装した関数を、GASのトリガー機能で定期実行しています。

勘のいいひとなら、いちいち「現在の全フォロワーを取得」しなくても、真っ先に「Fをフォローする」で全フォロワーをフォローしてから処理を開始すれば? と思うかもしれません。
最初そのように実装したのですが、Bluesky APIの仕様上、フォローしてる人を更にフォローできるようです。そのたびに通知が飛びます。これはいかんということで、こういう処理にしました。

実装はGitHubに上げていますのでご覧ください。
MITライセンスなので、folkもコピペも自己責任でご自由に!
使った報告していただけると泣いて喜びます。

実装のポイントは以下です。

  • BlueskyのGASライブラリが見つからなかったので自前で実装した

    • createSessionしてBearerを取得し、それを使って別のAPIをたたく、この繰り返し

    • Bearerは一度取れば一定時間使いまわせるはずだが、めんどくさかったので毎回取り直している。1フローでのセッション使いまわしに対応しました。

    • Bluesky APIには「認証は不要」と書いてあるAPIもあるが、すべてのAPIがBearerを要求するので、結局認証は必要になる気がする

  • スプレッドシートをDB的に運用できる汎用的なAPIを実装

スプレッドシートには「affirmative_word」シートと「followers」シートがあり、前者は誉め言葉をひたすら書いていて、後者はユーザDBです。
前者はこんな感じ。

ならべるとおもしろい

元はChatGPTに誉め言葉100個考えてもらいましたが、ワンパターンでいまいちだったので、自分が大幅に手を加えました。
ご覧の通り大量にネタを仕込んでるので楽しめる…はず!

課題

  • GAS処理時間の制限。フォロワーが増えるほど処理時間が1次関数的に増加します。ポストしているフォロワーが多数いた場合さらに増えます。GASは1日の総実行時間に制限があるので、そこに引っかかる可能性がでてきます。一応、トリガー間隔を伸ばすことで一時しのぎはできますが…。

  • APIのレートリミット。今はあってないようなものですが、今後Blueskyユーザが増えてくるときつくなるかもしれません。

おわりに

ぜひフォローして使ってみてね。
励みになるので、いいね、コメントお願いします。めちゃくちゃうれしいです。

Bluesky最高!!!