こんにちは、時雨風です。
開発環境の作成から、Botの導入やプロジェクトの作成まで紹介します。
テンプレートもありますので、作成後はソースコードを改変して、オリジナルのボットを作成してみてください。テンプレートプロジェクトでは、discordのチャンネルにて/neko
と発言するとにゃーん
とbotが投稿します。
pythonに触れたことがない初心者でも、開発ができるようと思いこの記事をかきました。
開発環境の構築に主眼をおいています。運用については触れていません。
discord.pyについて
Discord Botは、Discord APIと複雑なやりとりをします。
このやりとりを簡単にしてくれるのが、discordpyです。
Discord開発運営とライブラリ開発者との不和によって開発がストップしたことが話題になりましたが、現在では開発が再開されているそうです。
公式のページです。
ここを参考にテンプレートを作成しました。
githubリポジトリはこちら
Rapptz/discord.py: An API wrapper for Discord written in Python.
Codespacesのベータに申し込む
Codespacesは、githubが提供するオンライン開発環境です。
使用してるパソコンに影響されることなく、開発環境を自動で構築できます。
Bot開発ではCodespacesを使用するため、利用申請を行います。2022/7/2現在、ベータ版のためパブリックリポジトリでの個人利用は無料です。
もし、Codespcacesが使えない/使いたくないという方はローカルでの開発になります。
これにはDockerが必要になります。中級者向けとはなりますが、記事の後ろにあるDockerを使用して開発を行うをご覧ください。
申し込み手順
申し込みページにアクセスし、「ベータ版に申込む」から申し込みができます。
https://github.co.jp/features/codespaces
「Sign in to sign up for the beta」を選択
Visual Studio CodeとPythonを選択します。
「Sgin up for the beta」を選択します。
完了画面が表示されます。
githubから、CodeSpaceの案内メールが届いたら登録完了です。1時間ほどで届くようです。
先にvscodeの設定をやってしまいましょう。
Visual Studio Codeのインストール
下記のURLからダウンロードもできますが、できればパッケージマネージャーを使用する方法をお勧めします。
ダウンロードする場合
Visual Studio Code - Code Editing. Redefined
パッケージマネージャーを使用してインストールする場合(中級者向け)
パッケージマネージャを利用してインストールするとコマンドによって環境が構築できるため、管理が楽になります。windowsとmacの方法を紹介します。
windowsの場合
公式パッケージマネージャーwingetを使用します。wingetは最新のwindowsであれば、インストール済みです。
ターミナルを使用しますので、Windows Terminalをインストールしてください。こちらは標準でバンドルされていませんが、公式から出ているターミナルソフトで、コマンドプロンプトより便利です。
vscordのインストール
ターミナルにコマンドを入力します。
winget install -q vscode
macの場合
Homebrewがインストールされていることが条件です。
インストールされていない場合は、公式ページのインストールスクリプトをターミナルより実行してください。Launchpad > その他 > ターミナルよりターミナルが開けます。
vscordのインストール
brew install --cask visual-studio-code
ターミナルでcode
コマンドが使用できることを確認する
ターミナル上でcode --version
を打ちこんで動作する場合はこの項目を飛ばしてください。
% code --version
1.68.1
30d9c6cd9483b2cc586687151bcbcd635f373630
arm64
使用できない場合は、codeのインストールを行います。
vscordでcmd + shift + P
でコマンドパレットを開き、>shell command
と入力します。候補のinstall 'code' command in PATH
を選択します。
ターミナルでcode --version
と打ち込み、バージョンなどが表示されたら完了です。
vscodeの設定
拡張機能のインストール
vscordと拡張機能がいくつか必要になりますので全てインストールしてください。
ターミナルからインストールする場合
ターミナルにコマンドを入力します。
code --install-extension MS-CEINTL.vscode-language-pack-ja
code --install-extension GitHub.codespaces
手動インストールする場合
「ターミナルからインストール」がうまくいかない場合は、下記のリンクからインストールを行なってください。
Japanese Language Pack for Visual Studio Code - Visual Studio Marketplace
GitHub Codespaces - Visual Studio Marketplace
ログイン
vscodeを起動し、左下のアカウントマークからgithubアカウントでログインを行なってください。
botの作成
開発環境が整ったので、Botの開発にうつります。
Discord Developer Portalにて、botの登録を行います。
必要なもの
- discordアカウント
- 管理者権限を持つDiscord サーバー
なければ作成してください。
手順
右上のNew Applicationを選択します。
- botの名前を入力します。
作成するBotの名前を入力し、Createを選択します。
- アイコンを設定します。
必須設定項目ではありませんが、わかりやすさのため設定してください。
下記は素材配布サイトです。
アイコンの設定が終わったら、Save Changes
を選択してください。
- Botを追加する
左のメニューからBotを選択。
Add Botを選択
yes, do it!
- トークンを発行する
Reset Tokenを選択します。2回目以降は、現在のトークンが無効になります。
yes, do it!
トークンをコピーしてメモ帳などに控えます。コピーできるのは今だけなので、かならずコピーしておきましょう。
- Intentsの設定
Intentsの設定を有効にします。設定を変更したら、Save Changes
を押します。
- botの権限設定
OAuth2
> URL Generatorから
bot
とSend Messages
にチェックを入れ、生成されたURLにアクセスします。
botをインストールするサーバーの選択画面が表示されます。
権限を確認し、認証します。
discordからサーバーにbotが入ったことを確認してください。
テンプレートからリポジトリを作成
下記にアクセスします。(2022/12/07 動かなくなっていたので手入れしました。)
https://github.com/tokiukaze/discordpy-template
Use this templateを選択します。
リポジトリの名前を入力し、パブリック(公開設定)で作成します。
リポジトリの名前は、半角英数で決めてください。
しばらくするとリポジトリが作成されます。
ブラウザで開発する場合は、作成されるまでしばらく待ちます。
vscodeで開発を行う場合には、Open this codespace in VS Code Desktopを選択します。
ブラウザでも開発が可能ですが、vscodeによる開発をお勧めします。
なお、vscodeには下記がインストールされ、githubアカウントでログインしていることを再度確認してください。
GitHub Codespaces - Visual Studio Marketplace
2回目以降の接続の仕方
vscodeを開き、リモートエクスプローラー > Codespaces > リポジトリの順番に選択し、Codespaesを起動します。
スクリプトの実行方法
codespacesが開いたら、いよいよソースコードの編集になります。
discord.py
のテンプレートを実行する方法です。
.env
ファイルの作成
.envファイルをプロジェクトルートに作成します。
エクスプローラーで右クリックから新しいファイルを選択します。
ファイル名は.env
にします。ファイルの内容は下記の通りです。<アクセストークン>
には、discord botのアクセストークンに置き換えます。
BOT_TOKEN=<アクセストークン>
ファイルの編集が終わったら、保存します。ctrl + s
(windows)または、cmd + s
(mac)にて保存できます。
- スクリプトの実行
ターミナルが表示されているかを確認します。
ターミナルが表示されていない場合は、メニューバーからターミナル
> 新しいターミナル
を選択します。
ターミナルに下記のコマンドを入力するとbotが実行されます。
python ./discord_bot/main.py
成功するとbotのログインがターミナル上で通知されます。
- discordから確認
botをインストールしたdiscordサーバーにて、/neko
とコマンドを入力します。
botから返信があれば成功です。
記事作成時のcodespaces環境は下記の通りです。
# python --version
Python 3.10.5
# which python
/usr/local/bin/python
開発に関するTips
ここより下は、開発で知っていると便利な知識などを紹介しています。
困ったら
discordpyについて困ったらqiitaの記事をみると何かヒントがあるかもしれません。
エラーについて
mypy,isort,black,flake8といったツールはvscodeの保存時に動作します。
エラーが出ていても、保存するとエラーが消えることがあります。
Dockerを使用して、ローカルで開発を行う
codespacesを使用しない場合は、Dockerを使用できます。
Dockerのインストール
仮想環境を作成するため、Dockerをインストールします。
windowsの場合
こちらのリンクを参考にしてください。
VisualStudioCodeリモート開発を使用したコンテナー内での開発
インストールが終わったら設定に入ります。
macの場合
homebrewをインストールしているのであれば、homeberwでインストールするのが良いです。
homebrewを使用する場合
homebrewがインストール済みであることが条件です。
brew install --cask docker
DockerをLaunchpadから起動します。
公式ドキュメントにしたがう場合
VisualStudioCodeリモート開発を使用したコンテナー内での開発
Dockerを使用して開発を行う
Dockerの設定を行います。
Dcokerの設定
Use Docker COmpose V2
にチェックマークを入れてください。
Visual Studio Codeの設定
下記の拡張機能をvscodeにインストールします。ターミナルからコマンドを打ちこむか、ブラウザかvscodeからインストールしてください。
Remote - Containers - Visual Studio Marketplace
code --install-extension ms-vscode-remote.remote-containers
プロジェクトのclone
自分のリポジトリからプロジェクトをcloneします。いくつか方法があります。
クローンとはgitを使用して、githubからソースコードをダウンロードすることです。
ファイルのアクセス権がないことによるエラーなどのトラブルを防ぐため、デスクトップやダウンロードフォルダは避けた方が良いです。ドライブに任意のフォルダーを作成し、cloneを行なってください。
クローンには下記のアプリがおすすめです。初心者の方はGitHub Desktopを使用してください。
GitHub Desktop
英語ですが、GUIから操作できるため初心者向けです。
cloneに関するドキュメントはこちらです。
ドキュメントも英語ですが、ブラウザ機能で翻訳すると読めないことはなさそうです。
Cloning a repository from GitHub to GitHub Desktop - GitHub Docs
Git
コマンドラインが使えるかた向けです。
GUIアプリより軽量で動作が速いという利点があります。
vscordで開発
クローンしたプロジェクトをvscordでひらきます。
案内が表示された場合は、Reopen in Containerを選択します。
案内が消えてしまったり、表示されない場合は下記を参考にしてください。
cmd + shift + P
(mac) または ctr + shift + P
にてコマンドパレットをひきます。>Remote-Containers: Reopen in Container
を入力します。Remote-Containers: Reopen in Container
を選び実行します。
プロジェクトが仮想環境で開きます。
開発を続けるには、Botを作成するにもどります。
Pythonパッケージの管理ソフトについて
パッケージ管理ソフトでは、公開されているpythonのライブラリを自分のプロジェクトに導入することができます。すでに開発されたプログラムであるライブラリを活用することで、すでにあるのに再開発を行う現象”車輪の再発明”を防ぐことができます。
テンプレートプロジェクトでは、pythonパッケージの管理にpip
ではなく、Poetryを使用しています。これを簡単に説明するとpipを拡張したものです。
pipとはコマンドが少しずつ違うので、注意してください。
4つほどコマンドの例を挙げます。ここにないコマンドは下記のurlが参考になります。
コマンド - Poetry documentation (ver. 1.1.6 日本語訳)
パッケージのインストール
pipの場合はinstall
ですが、poetryだとadd
を使用します。
# pipの場合
pip install requests
# poetryの場合
poetry add requests
なお、poetryでは開発に使用するパッケージを別管理することができます。
# 開発のみで使用するパッケージの場合
poetry add -D black
パッケージのアンインストール
uninstall
ではなくremove
になります。
# pipの場合
pip uninstall requests
# poetryの場合
poetry remove requests
poetryでは、開発パッケージが別管理されています。remove
でも-D
が使用できます。
# 開発のみで使用するパッケージの場合
poetry remove -D black
パッケージの一覧表示
list
ではなく、show
になります。
# pipの場合
pip list
# poetryの場合
poetry show
パッケージの一括書き出しと一括インストール
poetryでは、管理が簡単になります。
pipの場合
# パッケージの書き出し
pip freeze > requirements.txt
# 一括インストール
pip install -f requirements.txt
poetryの場合
# パッケージの書き出し
# なし
# 一括インストール
poetry install
以上です。
Pythonで型を活用する
mypyを活用することで、Pythonでも型を強制することができます。
Pythonでも型をつけることによって、エラーを見つけやすくなります。
まずはPythonで型を指定する方法を解説します。
def counter(count: int) -> str:
display: str = "現在のカウント : " + str(count)
return display
print(counter(1))
関数では-> str
の表記から返り値がstr型であることがわかります。
引数ではcounter(count: int)
でint型であることを指定しています。
変数ではdisplay: str
でstrを指定しています。
Typingを使う
また、型がわからない場合はUnionやAnyが使用できます。
Union
# new
display: str | int = zisho.get("test")
# old
dispaly: Union[str,int] = zisho.get("test")
Unionは、指定した複数の型を代入できます。
Any
display: Any = zisho["test"]
Any
は型のチェックをしません。
mypyを設定する
プロジェクトのpyproject.toml
には、mypyの設定がコメントアウトされています。
これをコメントインすることで、mypyの設定が有効になります。
例えば、型が指定されていないとエラーを表示するといったことができます。
この記事やサンプルを作るにあたって参考にしたサイト
Pythonで実用Discord Bot(discordpy解説) - Qiita
まとめ
最新のサービスを活用して簡単に開発環境を整えつつ、Discordbotを開発できたと思います。
Botを極めれば、Discordをプログラムから制御できるようになるのでさまざまな分野で活用できると思います。例えば、Minecraftと連動してサーバーのon/offからゲーム内のイベントで投稿が行われるというのはどうでしょうか?面白そうです。
ここまでお読みいただきありがとうございました。
蛇足
時雨風が開発中によく見るpythonの本です。
やりたいことからページを検索できるので、普通の参考書より速くソースコードにたどり着けます。
おすすめです。
価格:2,948円 |
コメント