質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

2982閲覧

Herokuを使ってDiscordBotを作る際のエラーについて

su_496

総合スコア8

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/08/27 13:46

編集2020/08/27 14:35

discordのbotを作る

herokuとdiscord.pyを用いてbotを作成したい。

環境

ディレクトリ構成
.
├── Procfile
├── bot
├ ├── bot.py
├── requirements.txt
└── runtime.txt

まず、こちらの記事よりheroku側にトークンを設定した。(トークンは直接書いて動作確認済み)

pythonのversion

3.8.5

runtime.txt

python-3.8.5

Procfile

worker: python bot/bot.py

bot.py

from discord.ext import commands import os token = os.environ['DISCORD_BOT_TOKEN'] #class definition class Bot(commands.Bot): #call when ready async def on_ready(self): print('-----') print(self.user.name) print(self.user.id) print('-----') #Bot instantiation and launch process if __name__ == '__main__': bot = Bot(command_prefix='!') bot.run(token)

エラーコード

Traceback (most recent call last): File "bot.py", line 4, in <module> token = os.environ['DISCORD_BOT_TOKEN'] File "/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/os.py", line 675, in __getitem__ raise KeyError(key) from None KeyError: 'DISCORD_BOT_TOKEN'

試したこと

runtime.txtはもともと、3.7.6が記述されていたので3.8.5に変更した。
bot.pyにパスが通っていないのかなと考えたため、公式リファレンス等より、Procfileを上記のように変更したが、変化がなかった。(こちらの記事を参考にした。)

また、エラーコードを検索したが、解決に結びつくものを見つけられなかった。

最後に

足りない情報等あれば、教えて下さい。適宜追加します。
よろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

「bot.run(token)」にインデントが付いてるからではないでしょうか?

投稿2020/09/13 07:35

makaron_py

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

herokuの環境変数にDISCORD_BOT_TOKENという環境変数がないためそのエラーが発生します。
こちらの記事を参考にして、環境変数を設定してください。
herokuのappに紐付けられているgitディレクトリでこのようなコマンドを実行します。
heroku config:set DISCORD_BOT_TOKEN="token"
tokenの部分はBotのトークンに置き換えてください。
また、Webダッシュボードからも設定できます。
appを選択し、Settings -> Reveral Config Vars -> KEYの部分にDISCORD_BOT_TOKENを、VALUEの部分にトークンを入力する -> Add
これでできます。
os.environが何者なのか調べてみるともっと理解が深まるかもしれませんね!

投稿2020/08/27 14:17

daima3629

総合スコア163

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

su_496

2020/08/27 14:38 編集

設定してあります > まず、こちらの記事よりheroku側にトークンを設定した。(トークンは直接書いて動作確認済み) ※追記:画像を追加しておきました。
daima3629

2020/08/27 14:48 編集

ではWebダッシュボードから右上の「More」を押し、「Run Console」を押して出てきた枠に echo $DISCORD_BOT_TOKEN と入力し、Enterを押してください。 正常に設定できていればトークン文字列が出てくるはずですが、できていないと何も表示されずに「Process exited」と表示されます。
su_496

2020/08/27 14:48

トークン文字列が表示されました。
daima3629

2020/08/27 14:51 編集

ふーむ... ではリデプロイをしてみましょうか gitでからコミットを作成してpushしましょう git commit --allow-empty これで空コミットが作成できます
su_496

2020/08/27 21:48 編集

わかりました。 ※追記:そのコマンドを実行し、pushまで行いました。
daima3629

2020/08/27 22:47

少々荒業ですが、--no-verifyというオプションを使うとcommitlintをすり抜けてコミットができるようです。 git commit --allow-empty --no-verify でどうでしょう。
su_496

2020/08/27 22:50

commitlintの設定をオフにして、空コミットし、pushまでしました。(先程、コメントを編集したのでまだ反映されてないようですが...)
daima3629

2020/08/28 09:55

あぁ、更新されてませんでした、すいません() では今一度試してみてください
su_496

2020/08/28 11:34

同じエラーが出ました。変わってないです。
daima3629

2020/08/29 06:11

ふーむ...では、コードのos.environが入ってる行を自分の手で書き直してみてください。 もしかしたら表示はされない特殊なUnicode文字列が混じってしまっているとか...あり得るかもしれません。
daima3629

2020/08/29 06:15

もしそれでもできなければ、上で説明したRun Consoleで python -c "import os; print(os.environ['DISCORD_BOT_TOKEN'])" を実行してみてください。
su_496

2020/08/29 10:14

書き直しましたが、変わらなかったので、`python -c "import ....."を実行したところ、トークン文字列が表示されました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問