Discord Botを簡単お手軽開発する方法

DiscordBotを簡単お手軽開発 server

こんにちは、時雨風です。

開発環境の作成から、Botの導入やプロジェクトの作成まで紹介します。
テンプレートもありますので、作成後はソースコードを改変して、オリジナルのボットを作成してみてください。テンプレートプロジェクトでは、discordのチャンネルにて/nekoと発言するとにゃーんとbotが投稿します。

pythonに触れたことがない初心者でも、開発ができるようと思いこの記事をかきました。
開発環境の構築に主眼をおいています。運用については触れていません。

discord-botが完成
入力と出力の例

discord.pyについて

Discord Botは、Discord APIと複雑なやりとりをします。
このやりとりを簡単にしてくれるのが、discordpyです。

Discord開発運営とライブラリ開発者との不和discordによって開発がストップしたことが話題になりましたが、現在では開発が再開されているそうです。

公式のページです。

discord.py へようこそ。

ここを参考にテンプレートを作成しました。

クイックスタート

githubリポジトリはこちら

Rapptz/discord.py: An API wrapper for Discord written in Python.

Codespacesのベータに申し込む

2022/08/27現在
github 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」を選択

Sign up for the Codespaces beta
ボタンを押す

Visual Studio CodeとPythonを選択します。

Sign up for the Codespaces beta
アンケートに答える

「Sgin up for the beta」を選択します。

Sign 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を選択します。

image

ターミナルで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 サーバー

なければ作成してください。

Discord | 会話や交流が楽しめるプラットフォーム

手順

  1. Discord Developer Portalにアクセス

右上のNew Applicationを選択します。

image
  1. botの名前を入力します。

作成するBotの名前を入力し、Createを選択します。

image
  1. アイコンを設定します。

必須設定項目ではありませんが、わかりやすさのため設定してください。
下記は素材配布サイトです。

ICOOON MONO

Google Fonts

Unsplash

アイコンの設定が終わったら、Save Changesを選択してください。

save changes
「save」ボタンを押す
  1. Botを追加する

左のメニューからBotを選択。

Add Botを選択

Add Botを選択
Add Botを選択

yes, do it!

Yes do it!
Yes do it! を選択
  1. トークンを発行する

Reset Tokenを選択します。2回目以降は、現在のトークンが無効になります。

Reset Tokenを選択
Reset Tokenを選択

yes, do it!

Yes, do it!を選択

トークンをコピーしてメモ帳などに控えます。コピーできるのは今だけなので、かならずコピーしておきましょう。

TOKENをコピー
  1. Intentsの設定

Intentsの設定を有効にします。設定を変更したら、Save Changesを押します。

Intentsの設定を有効にする
  1. botの権限設定

OAuth2 > URL Generatorから botSend 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を選択します。

Open this codespace in VS Code Desktopを選択

ブラウザでも開発が可能ですが、vscodeによる開発をお勧めします。

なお、vscodeには下記がインストールされ、githubアカウントでログインしていることを再度確認してください。

GitHub Codespaces - Visual Studio Marketplace

2回目以降の接続の仕方

vscodeを開き、リモートエクスプローラー > Codespaces > リポジトリの順番に選択し、Codespaesを起動します。

vscodeでcodespacesを開く

スクリプトの実行方法

codespacesが開いたら、いよいよソースコードの編集になります。

discord.pyのテンプレートを実行する方法です。

  1. .envファイルの作成

.envファイルをプロジェクトルートに作成します。
エクスプローラーで右クリックから新しいファイルを選択します。

新しいファイルを作成

ファイル名は.envにします。ファイルの内容は下記の通りです。<アクセストークン>には、discord botのアクセストークンに置き換えます。

BOT_TOKEN=<アクセストークン>

ファイルの編集が終わったら、保存します。
ctrl + s(windows)または、cmd + s(mac)にて保存できます。

  1. スクリプトの実行

ターミナルが表示されているかを確認します。

ターミナル

ターミナルが表示されていない場合は、メニューバーからターミナル > 新しいターミナルを選択します。

新しいターミナルを開く

ターミナルに下記のコマンドを入力するとbotが実行されます。

python ./discord_bot/main.py

成功するとbotのログインがターミナル上で通知されます。

botが起動した
  1. discordから確認

botをインストールしたdiscordサーバーにて、/nekoとコマンドを入力します。

discord-botが完成

botから返信があれば成功です。

記事作成時のcodespaces環境は下記の通りです。

# python --version
Python 3.10.5

# which python
/usr/local/bin/python

開発に関するTips

ここより下は、開発で知っていると便利な知識などを紹介しています。

困ったら

discordpyについて困ったらqiitaの記事をみると何かヒントがあるかもしれません。

discord.py - Qiita

エラーについて

mypy,isort,black,flake8といったツールはvscodeの保存時に動作します。
エラーが出ていても、保存するとエラーが消えることがあります。

Dockerを使用して、ローカルで開発を行う

codespacesを使用しない場合は、Dockerを使用できます。

Dockerのインストール

仮想環境を作成するため、Dockerをインストールします。

windowsの場合

こちらのリンクを参考にしてください。

VisualStudioCodeリモート開発を使用したコンテナー内での開発

インストールが終わったら設定に入ります。

macの場合

homebrewをインストールしているのであれば、homeberwでインストールするのが良いです。

homebrewを使用する場合

homebrewがインストール済みであることが条件です。

brew install --cask docker

DockerをLaunchpadから起動します。

Dockerを開く
公式ドキュメントにしたがう場合

VisualStudioCodeリモート開発を使用したコンテナー内での開発

Dockerを使用して開発を行う

Dockerの設定を行います。

Dcokerの設定

Use Docker COmpose V2にチェックマークを入れてください。

Dockerの設定

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を使用してください。

  1. GitHub Desktop
  2. Git

GitHub Desktop

英語ですが、GUIから操作できるため初心者向けです。
cloneに関するドキュメントはこちらです。
ドキュメントも英語ですが、ブラウザ機能で翻訳すると読めないことはなさそうです。
Cloning a repository from GitHub to GitHub Desktop - GitHub Docs

Git

コマンドラインが使えるかた向けです。
GUIアプリより軽量で動作が速いという利点があります。

vscordで開発

クローンしたプロジェクトをvscordでひらきます。

案内が表示された場合は、Reopen in Containerを選択します。

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の設定が有効になります。

例えば、型が指定されていないとエラーを表示するといったことができます。

まとめ

最新のサービスを活用して簡単に開発環境を整えつつ、Discordbotを開発できたと思います。
Botを極めれば、Discordをプログラムから制御できるようになるのでさまざまな分野で活用できると思います。例えば、Minecraftと連動してサーバーのon/offからゲーム内のイベントで投稿が行われるというのはどうでしょうか?面白そうです。

ここまでお読みいただきありがとうございました。

蛇足

時雨風が開発中によく見るpythonの本です。
やりたいことからページを検索できるので、普通の参考書より速くソースコードにたどり着けます。
おすすめです。

Pythonコードレシピ集 [ 黒住敬之 ]

価格:2,948円
(2022/7/18 20:13時点)

コメント

タイトルとURLをコピーしました