Misskey8ヶ月目の人がMisskeyのPythonラッパーを作っている話

ブログページを移行しました。現在はこちらから最新版を閲覧できます。

この記事はMisskey Advent Calendar 2023 の24日目の記事です。

はじめに

僕はmisspyというライブラリを書いています。 今回はそのmisspyについて書いていこうと思います。

えっ?別の名前のライブラリ作ってたじゃないかって?このライブラリと名前が紛らわしいから消しました…(ちなみにMisskey Advent Calendar 9日目の方です)

なんで作った

なぜ作ったかを簡単に言うと、Misskey.pyにwebsocketが実装されていないから(4.1.0現在)です。

別にそれだけなら外部で実装すればいいんですけど、僕は面倒臭いので自分でライブラリごと作ることにしました。それに、一から自分で作ったほうが自分が思うように作れるので。(コードがいまいちわからないもの(ほかの方が作ったライブラリとか)を改造することは苦手なんです…)

misspyのソースコードについて

最初期のmisspyのコード

※これは何も出力しません。タイムラインに接続してないので。

最初期のmisspyは今のような形式ではなく、classに特定の名称の関数を作成してその下にコードを書く脳筋実装でした。また、httpxを非同期リクエストに利用していたので今より多少速度は遅かったと思います。

当時の僕はクラス式の実装(?)に納得がいかなかったみたいで、新しくhookっていうクラスを追加しました。

リクエスト部分とWebSocket部分をmisspy-dev/coreに移動して、httpの非同期リクエスト部分をaiohttpに置き換えて高速化しました。websocketはaiohttpが対応していたのですが、エラーがすごい出るので今のところwebsocketsを利用しています。

だけど、当時の僕はそれに納得がいかなかったみたいで、新しくhookっていうクラスを追加しました(何で!?)。これもやっぱり脳筋実装です。

現在

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import misspy

bot = misspy.Bot("misskey.io", "")

async def on_ready():
await bot.connect(misspy.localTimeline)

async def on_note(ctx, message):
print("------------")
print(message)
print("------------")

bot.add_hook("ready", on_ready)
bot.add_hook("note", on_note)

bot.run()

いろいろした結果、こんな感じになりました。
ちなみに、こんな構造になったことで、別のファイルに関数を分けておくことができるようになりました。
ただし、botにアクセスできないと何もできない( )ので、ちょっと改良中です。

今後やりたいこと

今後は、上に書いたように、discord.pyのCogsとextensionのように別ファイルでもbotを利用できるようにしたりしたいと思います。

links

Misskey8ヶ月目の人がMisskeyのPythonラッパーを作っている話

https://blog.sonyakun.com/post/misspy/

Author

sonyakun

Posted on

2023-12-24

Updated on

2024-04-26

Licensed under

コメント