Quiet

MisskeyのBotをPythonで開発できるBotFrameWorkを公開しました

# はじめに

Misskey って何?って人もいると思うのでまず Misskey のご紹介から
Misskey は ActivityPub というプロトコルを用いて作成された分散型 SNS です。特徴として誰でもサーバーを作成し自分自身で運営することができます。
義類のアプリでは Mastodon と言われるものもあります。今回はそんな分散型 SNS の Misskey で Python を用いて開発ができる BotFrameWork を開発したのでご紹介します。

# Misskey.py ってのがあるけど何が違うの?

はい、Misskey.py というライブラリが実はすでに存在します。ですが、これはあくまで WebSocket を用いない方法を使っており,これで Bot を作るには自分で WebSocket の接続部分
や帰ってきた情報を処理するパーサーを作成しないといけません。正直な話一度作ってしまえばいいだけですが、どうせやるなら使いまわしたいですよね。
そんなこんなで開発したのが今回紹介する Mi.py です。

# Mi.py の主な特徴

はい、最後のバグが多いは事実です、悲しいですね。正直な話私一人で開発しているのでテストしてる人物が私しかいないという状況です。

# 実際に使ってみる

pip install mi.py
from mi.ext.commands import Bot
from mi.note import Note
from mi.router import Router

uri = 'ws://localhost:3300/streaming'
token = ''

class MyBot(Bot):
def __init__(self):
super().__init__(command_prefix='!')

async def on_ready(self, ws):
await Router(ws).channels(['home'])
print(self.i.username)

async def on_message(self, ctx: Note):
print(f'{ctx.created_at} | {ctx.author.instance.name} | {ctx.author.username}がノートしました: {ctx.text}')
await self.process_commands(ctx)

if __name__ == '__main__':
bot = MyBot()
bot.run(uri, token)

このようにある程度少ないコードでノートを受け取るだけの Bot が作成できます。
ノートの投稿をするには次のようなコードを用います。

await Note(text='Hello Mi.py').send()

もちろんファイルのアップロードにも対応しています。

res = Drive().upload('/home/example/example.png', 'example.png')  # ドライブに画像をアップロード
print(res.url)

これらを先程のノートに追加することでノートに画像を乗っけることもできます。

# ドキュメントなど

Mi.py ではなるべく多くの情報を皆さんに見ていただくために Sphinx を用いたドキュメントと MkDocs を用いた私自身が一つ一つ書いた 2 つのサイトがあります。
この 2 つを用いることでより多くの情報を入手することが可能です。

API ドキュメント
チュートリアルなど

# 最後に

Mi.py では現状私が欲しい機能だけをちょこちょこと追加しています。そのため機能が少ないという問題があります。なので皆さんが実際に使ってみてこんな機能がほしい、
こんなバグが有るなどと行った情報をくださると開発の励みになります。ぜひ Mi.py を使ってみてください。

# バグ報告など

私の Misskey アカウント
Mi.py の Issues
Discord サーバー

前の投稿

本ブログの更新内容