Minaminの日記

趣味を記事にしてる。

Discordのボットを作って、Herokuで稼働させてみる。(discord.py)

こんにちは。みなみんです。

筆者は先月から2週間程、Discordのボット開発に取り組んでいました。

ある程度完成して来たので、Herokuでそのボットを稼働させてみようと思い、記事にしました。

f:id:Minamin1234:20220208184808p:plain

目次

 

筆者のDiscordボットについて

名称
  • Dispy

 

GitHub

github.com

 

API
  • discord.py
    • すでに、開発終了ではあるが...

 

プログラミング言語

 

機能
  • コマンド機能
    • 標準モジュール
      • 入力したテキストをそのまま返信
      • コマンド一覧
    • 数学モジュール
      • 基本的な数学関数 等
      • コマンド一覧
    • 開発者用モジュール
      • 特定のチャンネルにテキストを送信
      • 全てのチャンネルにテキストを送信
      • ボットの停止処理 等

他にも機能は追加予定。

 

ファイル配置
  • Dispy
    • Dispy.py
    • Compy.py
    • main.py

 

必要な環境

Visual Studio(IDE)の仮想Python環境 → requirements.txtから。

実際に使われているのは数点だと思われる。

  • aiohttp==3.7.4.post0
  • async-timeout==3.0.1
  • attrs==21.2.0
  • chardet==4.0.0
  • discord.py==1.7.3
  • gunicorn==20.1.0
  • idna==3.2
  • install==1.3.5
  • multidict==5.1.0
  • pip==21.3.1
  • setuptools==47.1.0
  • typing-extensions==3.10.0.2
  • yarl==1.6.3

 

Herokuで動かす準備

Herokuでのデプロイ(ここでは、ボットをHerokuに配置する事)には、

  • GitHubによるデプロイ
  • Heroku CUIによるデプロイ

の二つの方法があるが、今回は

を採用した。

(とても簡単)

 

Herokuの登録

公式サイトに従って登録します。

jp.heroku.com

 

必要なファイルを作成

Herokuにデプロイするにあたって、必要なファイルは以下の三つです。

  • requirements.txt
  • Procfile
  • runtime.txt

 

  • requirements.txt
    • 必要な環境とそのバージョンを記述します※1
  • Procfile
    • 拡張子無しでファイルを作成。
    • 中身には以下のコードを記述

worker: python [エントリファイル]

[エントリファイル]には最初に稼働させたい.pyファイルを指定します。

筆者の場合は以下のように記述しました。

worker: python main.py

  • runtime.txt
    • ここではPythonで動かすので、

python-[バージョン]

で[バージョン]にはPython環境のバージョンを入力します。

筆者の場合は以下のように記述しました。

python-3.8.5

 

※1 requirements.txtの作成

Visual Studio(IDE)をお使いの方で、仮想Python環境のお使いの方は以下の写真のようにプロジェクトの Python環境 → Python[バージョン] の部分を右クリックから作成できます。

f:id:Minamin1234:20220208174453j:plain

プロジェクトの「Python環境」 → 「Python[バージョン]」を右クリック

 

GitHubに作ったボットをアップロードする。

Discordのトークンも含まれるので当然、Privateリポジトリを作成します。

(ここでの、GitHubの使い方は割愛)

 

そこで、リポジトリに入れるべきファイルは以下のものです。

(筆者が作成したボットの場合)

 

先ほどの項目でも示したが、最初の3つは必須ファイルです。

  • requirements.txt
  • Procfile
  • runtime.txt

  • main.py
  • Dispy.py
  • Compy.py

 

Herokuで新規にアプリを作成

右上の「New」で「Create new app」をクリック。

 

「App name」は特に決めてなければ、空白でもOK。

(適当に名前が当てられます)

「Choose a region」はアメリカのままで構いません。

「Create app」をクリック。

 

GitHub」をクリック。

※初めての方は、GitHubとの連携を求められるので連携しておきましょう。

 

先ほど作ったリポジトリを選択します。

f:id:Minamin1234:20220208180716j:plain

このようになっているはずです

 

 

下の「Manual deploy」にて、ブランチを選んで「Deploy Brunch」をクリック。

 

デプロイが始まります。

f:id:Minamin1234:20220208181813j:plain

デプロイが完了

 

結果

実際にDiscordでコマンドを入力してボットの反応をみる

f:id:Minamin1234:20220208182815j:plain

コマンドを入力したら,ボットから出力が送信された.

きちんと作動していますね.

 

ログ

デプロイ後の「View」からログを見ようとしても,見れない...

 

これはWebアプリケーションとしてデプロイした訳ではなく,単にHeroku上で作動するアプリケーションとしてデプロイしたので,見れないようです.

ログを見るには,Heroku CLIを使います.

公式からHeroku CLIをインストールしましょう.

 

 

細かい話

ログを見たい

CMDで,

heroku logs --app [アプリ名]

と入力すれば,出てきます.

さらに,--tailを付加すればリアルタイムで見ることができます.

heroku logs --app [アプリ名] --tail

f:id:Minamin1234:20220208184303j:plain

heroku logs --app [アプリ名] を実行

 

ログに何か,エラーらしき表示がある...

これも同様にWebアプリケーションがデプロイされていないのでエラーが出ているようです.

 

筆者の環境でも今のところ,ボット自体には何も影響はなさそうです.

 

 

 

この記事に誤りがあるかもしれません。その辺はご了承ください。

本記事で紹介されている方法・手法はあくまでも個人的なものです。