見出し画像

Misskey の絵文字通知 Bot を Rust で作ってみた話

※日記くらいのふわふわした内容です


はじめに

みなさんこんにちは、箱詰九分です。僕のことは覚えていますか。生きています、それだけは伝えたかった。

インターネットの荒波から離れ、 Misskey の自鯖で生活をするようになってかなりの月日が流れました。平穏とは感情を閉じることだったのかもしれない。そんなことを思いながら雨の音とともに暮らしています。

去年の末に Misskey 用の絵文字通知 Bot を作ってみたのですが、これは Python で実装したものでした。Python の勉強を兼ねていたのですけれど。

今回作成したものはそれを Rust で書き直したものです。こちらです。Github に置きました。

Github って何…?っていうと…ソースコードを置くところ、そんな雰囲気でいいです。

Python で実装したものはとりあえずは動くのですけれど、とりあえず動くというだけであまり良い実装にはなりませんでした。ソースコードを整理するのであれば…どうせなら別の言語で書き直した方がいいと思ったんです。Rust 言語は前から気になっていたのでそれで実装することにしました。勉強するには良い題材ですよね。

動作させるとこんな感じで通知してくれます。

なんかいいかんじだよね

追加や更新をしたユーザーを教えてくれるところが特徴です。あとは、投稿の公開範囲を変えられるところがいい点かな。サーバー管理者だけに通知することもできます。そこそこ便利。

使い方は Github においたやつの README に書いてあります。よかったらみてみてね。

絵文字通知 Bot といいつつ、アバターデコレーションというアイコンを飾り立てるやつも通知してくれます。絵文字およびアバターデコレーション通知 Bot… 長いのでそうは呼びません。

絵文字通知 Bot の需要

需要はそれなりにあると思ってて。前もちらっと書いたのですが、カスタム絵文字は Misskey において重要な機能なんです。カスタム絵文字を使いたいから Misskey を選んだ人は多いのでは、少なくとも僕はそうです。

Misskey はいくつものサーバーに分かれていて、そのうちのいくつかではカスタム絵文字を誰でも自由に追加できるところがあるんです。変なことをされるおそれがあるので安全ではないのですが、面白い絵文字がいくつも登録されてていい感じ、悪さをする人はまだあまりいないようです。

誰かが新しい絵文字を追加したときに通知してくれたらうれしいですよね。そこで絵文字通知 Bot が活躍します。また、やばいことをする人が現れたらそれも通知されてしまうので、その抑止にもなります。絵文字自由追加と絵文字通知機能はセットのようなものですね。

とはいえ、中規模〜大規模のサーバーの多くでは絵文字は申請制となっています。そういうサーバーでは一般ユーザーが自分で絵文字通知 Bot を作ることもあるようです。今回僕が作った Bot は管理者権限が必要な Bot ですので一般ユーザーでは動作させることができません。仕組みが少し違うんですよね。まあそれでも、通知機能が便利なのには変わりはないんじゃないかな。

仕組み

一般ユーザーが作成する Bot の場合は「絵文字一覧を取得する」API を使うのですが、僕が作った Bot は「モデレーションログを取得する」API を使用しています。その点はかせいすきーというサーバーの Bot を参考にしています。参考にしているというか…そのままなんですけど。

モデレーションログというのはモデレーター(管理者みたいなもの)が行った操作の記録です。カスタム絵文字やデコレーションが操作されたときはモデレーションログに記録されますが、それ以外の操作も記録されます。

かせいすきーの Bot は Typescript で書かれているんですけど、それも前作った Python のやつも今回作った Rust のやつも仕組みは同じです。モデレーションログを取得して順番に見ていき、カスタム絵文字かデコレーションの操作のログの場合は通知する、というだけです。

モデレーションログを利用したときの利点は操作を行ったユーザーがわかるところです。絵文字一覧を取得する API では誰が追加した絵文字なのかわからないのですが、モデレーションログを利用した場合はそれがわかります。といっても、絵文字が申請制となっているサーバーでは絵文字追加は管理者が行うので、ログに残るのも管理者の名前であり、あまり意味はありません。絵文字を自由に追加できるサーバーだからこそ活かせる機能ですね。通知は投稿というかたちで残りますので、サーバー上で検索することにより誰が追加した絵文字か調べられます。そこもいいですよね。

(メモ)  モデレーションログを取得すると普通は「新しい→古い」ログにソートされるんですけど、 sinceId というパラメータだけ指定した場合は「古い→新しい」にソートされます。あと、sinceId と untilId は"0000000000000000"や"zzzzzzzzzzzzzzzz"なんて適当な指定をしても動くっぽいです。どういうこと…?

使用感

いい感じ。自分のサーバーも絵文字自由追加にしてみたのですが、いい感じに動いてくれています…といっても、これは Python 版での話、 Rust 版はこれから稼働させます。機能は全く同じなんで使用感も同じかな。

絵文字を申請制にしてたら他のユーザーにとっては手間だし、審査も手間ですからね…信頼できる人が集まっている小さなサーバーではこれでいいのかも。

ただ、ある程度大きなサーバーではリスクもあるので、申請制が向いてそうです。ひとそれぞれ、鯖それぞれ、それでいいんですけどね。

Rust で実装してみてどうだったか

利点もあり、欠点もあり、といったところ。

Misskey の API は少しルーズなところがあって、返ってくる値が存在したり存在しなかったり、ころころ変わるところがあります。それは Misskey の性質というよりかは Typescript … のもとになった Javascript の性質なのですが。同じ Typescript や Python などではある程度柔軟に対応できるのですが、 Rust ではそれが難しいです。もし API の仕様が破壊的変更をされてしまったらコードの修正が大変そう。

ただ、構造の整理されていて安全なコードを書くには向いているんじゃないかと思いました。Rust で書いたぞ、っていうのがある種の信頼なのかな…コンパイラがしっかりしてるからですね。

今後 Bot のメンテナンスをするなら今回の Rust 版にしようかな。

さいごに

これで Rust でなんか作ったって言えますね、やったー。言ってどうにかなるものではないですけど。

カスタム絵文字について思うことはいろいろある。Misskey の良さがカスタム絵文字なのであれば、 Misskey の悪さもカスタム絵文字なのだと思います。

たしかに楽しいかもしれない。ただ、人によっては賑やかすぎる。センシティブな表現もある。そんな絵文字のサーバーはある。

たしかに落ち着いてるかもしれない。ただ、人によってはつまらない。刺激が足りない。そんな絵文字のサーバーもある。

個々が自分にとって「都合のいい世界」を生きたいのであればサーバーという単位は不都合なんです。究極言えば全員住み分けたい。ただ、そうも言っていられないのが SNS… ぼくらは厳しい世界に生きているなって。

個人的には、カスタム絵文字を通じて各自の世界観を押し付けられる、あるいは押し付けるのが苦手なんです。カスタム絵文字はサーバー内で共有される、だから登録するには周りへの配慮が必要なはずなのですが、そこが絵文字自由追加の難しいところですよね。みんながそんな配慮をしてるわけじゃない。まあ、配慮配慮って言っても疲れてしまいますもんね。最終的にはサーバー管理者が小さな世界をチューニングするしかないんだろうな。


絵文字通知 Bot を作っておきながらそんなことを思うのか…


気が向いたら、通報を discord に通知する Bot も作ってみたいですね。たぶん今回作った Bot の流用で作れると思う。そっちのほうが便利かも。絵文字通知も discord へにして、管理者用に割り切った機能にしてもいいかもしれませんね。

それでは今回はこの辺で、ありがとうございました。生きてたらまた会いましょうね。

お薬飲んだ?

いいなと思ったら応援しよう!