[discord.py] RoboDanny コードリーディング メモ(随時更新)

RoboDanny

https://github.com/Rapptz/RoboDanny/blob/rewrite/bot.py


discord.pyの開発リーダーDanny氏の作成しているbot。コードがgithub上で公開されている。
モジュール開発者直々にコーディングしているbotなので、良質なdiscord.pyのサンプルコードです。
(余談)ちょっと呼び捨てにしづらい。

Clickモジュール

import clickとある。
これはコマンドラインインターフェースを軽快にコーディングするためのPythonモジュール。
便利だったので別記事にまとめました。

AutoSharedBot

通常のBotクラスが、Clientをベースクラスとするのに対し、AutoSharedClientをベースクラスとしたBotクラス。
単一のプロセスとして扱えるいっぽうで、マルチプロセスを内部で自動的に実現してくれるクラス。
1000サーバ以上に参加するようなbot以外は使う必要なしとのこと。

prefix

prefixには、2通りの指定方法がある。

固定文字列で指定

たとえば、「$」「!」を指定すると、それぞれの文字列で始まるメッセージを受け取った時、prefixにmatchすると判定される。

動的に指定

メッセージごとにprefixを動的に生成し、matchするかを確かめる。mentionされたことをprefix扱いしたければ、これを用いる必要がある。
文字列を渡すかわりに、以下のような引数を持つfunctionを定義し、渡す。
第一引数:Botオブジェクト
第二引数:Messageオブジェクト

inspect

python標準のモジュール。
モジュールのメンバ一覧を取得したりできる。

inspect は、活動中のオブジェクト (モジュール、クラス、メソッド、関数、トレースバック、フレームオブジェクト、コードオブジェクトなど) から情報を取得する関数を定義しており、クラスの内容を調べたり、メソッドのソースコードを取得したり、関数の引数リストを取り出して整形したり、詳細なトレースバックを表示するのに必要な情報を取得したりするために利用できます。

cog

discord.ext.commands.Botを実装するための方法のひとつ。
cogのしくみに則って、規定の関数を持つモジュール(=cog)を追加していく方法を取ることで、複雑な機能を整理されたコードで実装することができる。