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

Hexoを使ってブログを構築

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

HexoっていうSSGが気になったので試してみた。

えっ?なんで学生が深夜にこんなことしてるかって? おっと、それ以上はいけない

Hexoってなんだよ

Node.js製の強力なブログフレームワークらしいです。

プラグインで拡張できたり、もちろんテーマも使えます。

テーマ

公式サイトだったりGitHubのトピックだったりで探すのがおすすめ。

おすすめなのは、Icarusです。日本でも使っている方がたまにいるのでトラブルが起きてもどうにかなりそうなので…

プラグイン

sitemap.xmlを自動生成してくれるhexo-generator-sitemapとかは入れたほうがいいと思います。 hexo-generator-sitemapだとGoogleに登録できませんでした…ちゃんと動くhexo-generator-seo-friendly-sitemapがいいと思います。

構築

※Node.jsがインストールされている前提で進みます。

まず、npm install hexo-cli -gでHexoのCLIをインストールします。

インストールしたら、ブログ用のファイルを生成したいディレクトリに移動して、hexo init .を実行します。

以下のようなファイル構成になると思います。

1
2
3
4
5
6
7
8
├─.github
├─node_modules
│ └─...
├─scaffolds
├─source
│ └─_posts
├─package.json
└─themes

一応この状態でも_posts直下に.mdを作成してyarn serverすれば起動できます。

でもせっかくなので、テーマを変えてみます。

テーマを変える

今回は、Icarusを利用します。
npm install hexo-theme-icarusしてhexo config theme icarusします。
でも、テーマによっては中華フォント(Microsoft YaHeiなど)になっている場合があります。

icarusならnode_modules\hexo-theme-icarus\include\style\base.stylに行き、Microsoft Yaheiと書いてある部分をすべてsans-serifなどに変更します。そうすれば治ります。

記事を書くときに覚えておくといいこと

タグやカテゴリーは以下のように書く。

1
2
3
4
5
6
title: Hexo
date: 0000-00-00 00:00
categories:
- tech
tags:
- hexo

カスタマイズ

テーマは_config.{テーマ名}.ymlである程度カスタマイズできるようです。

方法は自分で調べてください(丸投げ)

生成

htmlを出力するにはhexo generateを入力してください。入力すると、publicフォルダにhtmlが生成されます。

めっちゃ書くのつかれた...