【Discord.py】書き込まれたメッセージ(message)の取得方法【Bot】

2020年5月24日




 

チャンネル上に書き込まれたメッセージを
取得して使いたい時がありますよね。


記録として保存したり、簡単なゲームを作ったりする際には
必要不可欠な機能です。

 

自分自身、Bot作りを始めてから取得方法に関する情報が
乏しくて悩み苦しんだ記憶があります。


Discord.pyのドキュメント(平たく言えば説明書)には
掲載されていたとは思うのですが内容が難解で
当時Python自体全くの初心者だった自分では理解できませんでした。

 

しかし、どうしてもこの機能を実装したくて
色々なサイトで模索しているうちになんとか解決することができました。
調べるのに丸一日費やした日もありましたね^^;

 

そんな同じ苦しみをこの記事を閲覧している方には
抱えて欲しくありませんのでそのやり方をこの記事にサクッと掲載します!
使用例についても載せるのでご安心ください!そのまま流用すればOKです!

 

この記事を閲覧すれば
チャンネル上のメッセージをBotが取得して
使用することができるようになります!

 




Discord.pyでメッセージを取得する方法

 

これでメッセージを取得することができます!
と言われても何がなんだかわからないですね^^;
因みに上記の形で使用するとエラーが起きます。 
ですので、わかりやすく全文を書いてみます!

 

 

アクセストークンを記入して上記のコードを実行すると

Discord.pyのメッセージ画像1

チャンネル上に文章を入力すると
Botをログアウトさせるまで絶え間なくオウム返し
してくるのでこのまま使用することはお勧めしません^^;

 

もっと実用的な取得方法については後述します!
とりあえず理屈はこんな感じです!

 

Discord.pyでメッセージを取得する際の注意点

 

取得したメッセージを出力する際は
変数をそのまま使用してはいけないです!
(上記の場合は"wait_message")

 

もしも使用してしまうと"Message id"や"TextChannel id"や"MessageType"
などメッセージの情報が出力されてしまい
肝心の取得したメッセージが表示されません!

 

ですから、取得した文章を出力する際は変数の後に
必ず”.content"と記載しましょう!
(上記の場合は"wait_message.content")

 

補足ですが、変数名が"wait_message"じゃなくても
メッセージは取得できます。
例えば"get_message"や"set_msg"や"Nmessage"など
自分がわかりやすいと思った変数名に書き換えてもOKです!
ただメッセージの内容を出力する際は
必ず”.content"を付けてくださいね!

 

Discord.pyでメッセージを実用的に取得

上記のコードのままだと
絶えずオウム返しをしてくる荒らしBotでしかないので
まともに使用することはできません!

そこでオウム返ししないよう
もっと実用的にメッセージを取得してみます!

 

アクセストークンを記入して上記のコードを実行すると

Discord.pyのメッセージ画像2

ただの荒らしBotから穏やかなオウム返しBotに進化しました!

 

 

上記のコードを挿入することにより
他のBotのメッセージを取得されないようになります!
サーバーに複数のBotが導入されている場合は
忘れずに記載しましょう!