Quiet

PythonでMisskeyのBotFrameWorkを作ってみた

これは Misskey Advent Calendar 21 日目の記事です。

# はじめに

Python で Misskey の Bot を作って見る際に第一に選択肢に出てくるのが、 YuzuRyo61 さんの Misskey.py です。ですが、私は WebSocket を受信してリアルタイムにタイムラインや通知の情報を取得したかったため、この BotFrameWork を作ってみました。

# 使い方

まず、今回作成したライブラリ Mi.py をインストールします

pip install mi.py

次に実際に実行するためのコードを書きます。

import asyncio
from mi import Note
from mi.ext import commands
from mi.router import Router

class MyBot(commands.Bot):
def __init__(self, cmd_prefix: str):
super().__init__(cmd_prefix)

async def on_ready(self, ws):
print(f'{self.i.username}' に接続しました)
await Router(ws).connect_channel(['global', 'main'])

async def on_message(self, note: Note):
print(f'{note.author.username}: {note.content}')

if __name__ == '__main__':
uri = "wss://example.com/streaming"
token = "This is your token"

bot = MyBot('!')
asyncio.run(bot.start(url, token))

これで、グローバルタイムラインを受信する初期的な bot ができました。

# 投稿をしてみる

今度は投稿をしてみましょう、先程のコードを一部書き換えてみます

async def on_ready(self, ws):
print(f'{self.i.username}' に接続しました)
await Router(ws).connect_channel(['global', 'main'])
+ res = await self.post_note('hello~')
+ print(res.author.username, res.content)

このように、自分で投稿し、そのレスポンスをオブジェクトとして取得することが可能です。

# 大変だったこと

今回のライブラリは絶賛開発中なのですが、Python の循環参照がとにかく最初の頃多く発生してとても大変でした。他には、非同期の websocket ライブラリが少なかったことなど、色々とあり、作成にとても時間がかかりました。(まだできてないですけど)

# ドキュメントについて

warning

まだドキュメントは作成途中であり、一部のモデルが不足しています。

ここ に commit したら自動で生成するようにしてあるドキュメントがあるので、何かわからないことがあれば参考にしてみてください。

# 最後に

このプロジェクトは一応頑張って作っているつもりなので、もしよければ、使った感想などを 私の Misskey アカウント に送ってくださるとモチベーションも上がってとても嬉しいです。
あと、MIT License で GitHub にて公開しています。 pull request なども歓迎していますので、もしよければやってみてください。

最後になりますが、Misskey は リアクションなどをインスタンスごとのカスタム絵文字で貰うことができ、自分のつぶやきに Twitter のようなハート以外のリアクションがほしいという方にも楽しめると思うので、Misskey にご興味がある場合は joinmisskey をぜひご覧ください。

ここまでご覧頂きありがとうございました。

前の投稿

現在の記事が最新の記事です