PythonでDiscord bot 「3.botを実行しよう!」

スポンサーリンク

前回までで、「botの作成/Discordへの導入」「Pythonのインストール」が終わりました。
今回は、bot用のプログラムを記述し、実際にDiscordで実行します。
まだ下準備が必要で、色々なアプリやサイトを行き来しますが、頑張ってついてきてください。

discord.pyのインストール

discord.pyは、DiscordとPythonをつなぐ接着剤のようなものだと思ってください。
discord.pyを導入することで、Discordに入れたbotがPythonで動作するようになります。

WIndowsのスタートメニュー右側の検索ボックスに「cmd」と入力してEnterを押し、コマンドプロンプトを起動します。

コマンドプロンプトが起動したら、以下のコマンドをコピー&ペーストし、Enterを押してください。
pip install discord.py
pipという見慣れない単語が出てきたので、自分の理解の範囲で少しだけ補足します。
discord.pyはPythonのパッケージと呼ばれるものの一つですが、それをインストールする際にpipという機能を使っている、という理解をしています。(間違っていたらごめんなさい。)
今後、discord.py以外のパッケージをインストールする場面が出てくるかもしれませんが、pipは多用しますので、頭の片隅に入れておいてください。

「Successfully installed ~ discord.py」と表示されればOKです。
画面は閉じてもらって大丈夫です。
その下に、「pipのバージョンが古い」という警告が出る場合がありますが、あまり気にしなくて良いかと思います。とは言え、バージョンは最新にしておきたい、という方は指示に従ってバージョンアップしてくださいね。

IDLEの設定その1

Pythonをインストールすると、プログラムを書くエディタであるIDLEが合わせてインストールされます。IDLEを起動して設定を行います。

以下がIDLEの起動画面です。

New FIleを選択すると、プログラムを記述する画面が表示されます。

画面左端に行番号を表示させます。これは初回のみ実施すればOKです。

表示されているまっさらな画面に、以下をコピー&ペーストしてみましょう。

BOT_TOKEN = "*********************************"
 
import discord
import datetime

client = discord.Client()

#起動時のshellメッセージ 
@client.event
async def on_ready():
       print('Logged in as')
       print('BOT-NAME :', client.user.name)
       print('BOT-ID   :', client.user.id)
       print('Time     :', datetime.datetime.now())
       print('------')


@client.event
async def on_message(message):

 if client.user == message.author:
   return

 if message.content.startswith('k1/hello'):
  await message.channel.send("Hello, world!")


client.run(BOT_TOKEN)

実際はプログラムが自動で色分けされます。

BOT_TOKEN取得

コピーしたプログラムの一番上に*****が付いていますが、ここには各bot固有の文字列が入ります。 IDLEはひとまずそのままにしておいて、「Developer Portal」 (https://discord.com/developers/applications)にアクセスしてください。
「Developer Portal」 アクセスについての詳細は 「1.Discord Developer Portalでbotを作成しよう!」を参考にしてください。

ここで表示されるTokenは、絶対に他人に知られないようにしてください。
自分のbotが乗っ取られる恐れがあります。

Copyボタンでコピーできます。

IDLEの設定その2

IDLEに戻り、 ***** になっているBOT_TOKENを置き換えます。
その際、文字列を意味する”(ダブルクォーテーション)は消さないようにしてください。
置き換えが終わったら、ファイルに名前を付けて保存してください。

保存場所は、以下のようにユーザー名フォルダの直下にしてください。

保存が終わったらいよいよbotの起動です。IDLEから起動できます。

IDLEの起動画面の表示が変わり、以下のような文字列が表示されたら起動成功です。
DIscord上でbotがオンラインになっていると思います。

DIscordでコマンド実行

上でコピーしたプログラムをそのまま使う場合、botが有効なチャンネルで「k1/hello」と打つと、「Hello, world!」と返ってくるはずです。

うまく返事は返ってきましたか?
返事が返ってこない場合、IDLEの画面上に何らかのエラーが出ていると思いますので、頑張って読み解いてください。

<おまけ>自動復旧バッチファイル

ここまでで当初の目標は達成できたことになりますが、もう少しだけお付き合いください。
botをIDLEから実行しましたが、IDLEは基本的にはエディタであり、botを実行し続けるのには向いていないと思われます。また、何らかのトラブルによりbotが落ちた場合、手動で再起動する必要があります。入門編の締めくくりとして、自動復旧バッチファイルの作り方について触れておきたいと思います。

botの本体であるpyファイルがあるフォルダに、空のtxtファイルを作成してください。

次に、txtファイルに以下のように記述してください。
「koge」は単なるラベルなので、1行目と4行目が同じであれば何でも良いです。

:koge
cd C:\Users\[ユーザー名]
python [ファイル名].py
goto koge

上記記述は、指定したフォルダにあるpyファイルを実行し、1行目に戻る、という動作を延々と行わせる命令です。botが落ちても自動復旧してくれます。
記述し終わったら、ファイルの拡張子をtxtからbatに変更します。

batファイルを実行する前に、IDLEを終了させます。
終了させないとbotが二重起動します。

batファイルを起動します。

コマンドプロンプトが起動し、以下のような表記が出たらbot起動完了です。

なお、IDLEでプログラムを書きながら、batファイルを動かすことも可能です。
プログラムを更新した後でbotの再起動をする場合は、毎回コマンドプロンプトを終了させなくても、以下のいずれかの操作でbot再起動が可能です。
・Ctrl + Break → N → Enter
・Ctrl + Fn + B → N → Enter

終わりに

皆さん、いかがだったでしょうか。
ここまでの3回の記事で、とりあえず「Hello, world!」が返ってきた、というところでしょうか。今回、使ったプログラムそのものの意味には一切触れずにここまで来てしまったので、消化不良の方もいらっしゃるかと思います。
そのあたりについては別の回に譲ることにしたいと思います。

思い起こせば約3年前、PythonでDiscord botを作ろうと思い立った時、やり方がわからずに随分とネットサーフィンをしました。
今回の記事が、初めてPythonやbotに触れる方のお役に立てば幸いです。

よろしければ記事のシェアをお願いします!