【Discord.py】書き込まれたメッセージ(message)の取得方法【Bot】
チャンネル上に書き込まれたメッセージを
取得して使いたい時がありますよね。
記録として保存したり、簡単なゲームを作ったりする際には
必要不可欠な機能です。
自分自身、Bot作りを始めてから取得方法に関する情報が
乏しくて悩み苦しんだ記憶があります。
Discord.pyのドキュメント(平たく言えば説明書)には
掲載されていたとは思うのですが内容が難解で
当時Python自体全くの初心者だった自分では理解できませんでした。
しかし、どうしてもこの機能を実装したくて
色々なサイトで模索しているうちになんとか解決することができました。
調べるのに丸一日費やした日もありましたね^^;
そんな同じ苦しみをこの記事を閲覧している方には
抱えて欲しくありませんのでそのやり方をこの記事にサクッと掲載します!
使用例についても載せるのでご安心ください!そのまま流用すればOKです!
この記事を閲覧すれば
チャンネル上のメッセージをBotが取得して
使用することができるようになります!
Discord.pyでメッセージを取得する方法
1 2 3 4 5 6 7 | @client.event async defon_message(message): defcheck(msg): returnmsg.author==message.author wait_message=await client.wait_for("message",check=check) |
これでメッセージを取得することができます!
と言われても何がなんだかわからないですね^^;
因みに上記の形で使用するとエラーが起きます。
ですので、わかりやすく全文を書いてみます!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #Discord.pyの読み込み import discord #Discordへ接続するのに必要 client=discord.Client() #自分のBotのアクセストークンを記入 TOKEN="" #Bot起動時に実行される @client.event async def on_ready(): print('ログインしました') #メッセージを取得した時に実行される @client.event async def on_message(message): #条件に当てはまるメッセージかチェックし正しい場合は返す def check(msg): returnmsg.author==message.author #ユーザーからのメッセージを待つ wait_message=await client.wait_for("message",check=check) #取得したメッセージを書き込まれたチャンネルへ送信 await message.channel.send(wait_message.content) #Botの実行 client.run(TOKEN) |
アクセストークンを記入して上記のコードを実行すると
チャンネル上に文章を入力すると
Botをログアウトさせるまで絶え間なくオウム返し
してくるのでこのまま使用することはお勧めしません^^;
もっと実用的な取得方法については後述します!
とりあえず理屈はこんな感じです!
Discord.pyでメッセージを取得する際の注意点
23 24 25 26 27 | #ユーザーからのメッセージを待つ wait_message=await client.wait_for("message",check=check) #取得したメッセージを書き込まれたチャンネルへ送信 await message.channel.send(wait_message.content) |
取得したメッセージを出力する際は
変数をそのまま使用してはいけないです!
(上記の場合は"wait_message")
もしも使用してしまうと"Message id"や"TextChannel id"や"MessageType"
などメッセージの情報が出力されてしまい
肝心の取得したメッセージが表示されません!
ですから、取得した文章を出力する際は変数の後に
必ず”.content"と記載しましょう!
(上記の場合は"wait_message.content")
補足ですが、変数名が"wait_message"じゃなくても
メッセージは取得できます。
例えば"get_message"や"set_msg"や"Nmessage"など
自分がわかりやすいと思った変数名に書き換えてもOKです!
ただメッセージの内容を出力する際は
必ず”.content"を付けてくださいね!
Discord.pyでメッセージを実用的に取得
上記のコードのままだと
絶えずオウム返しをしてくる荒らしBotでしかないので
まともに使用することはできません!
そこでオウム返ししないよう
もっと実用的にメッセージを取得してみます!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #Discord.pyの読み込み import discord #Discordへ接続するのに必要 client=discord.Client() #自分のBotのアクセストークンを記入 TOKEN="" #Bot起動時に実行される @client.event async def on_ready(): print('ログインしました') #メッセージを取得した時に実行される @client.event async def on_message(message): #Botのメッセージは除外 ifmessage.author.bot: return #条件に当てはまるメッセージかチェックし正しい場合は返す def check(msg): returnmsg.author==message.author #/getとチャンネル上に打ち込むとBotが反応を示す ifmessage.content.startswith("/get"): #/getと打ち込まれたチャンネル上に下記の文章を出力 await message.channel.send("こんにちは!保存したいメッセージを入力してね!") #ユーザーからのメッセージを待つ wait_message=await client.wait_for("message",check=check) #メッセージを打ち込まれたのを確認すると下記の文章を出力 await message.channel.send("保存したメッセージはこちらになるよ!") #取得したメッセージを書き込まれたチャンネルへ送信 await message.channel.send(wait_message.content) #Botの実行 client.run(TOKEN) |
アクセストークンを記入して上記のコードを実行すると
ただの荒らしBotから穏やかなオウム返しBotに進化しました!
19 20 21 | #Botのメッセージは除外 ifmessage.author.bot: return |
上記のコードを挿入することにより
他のBotのメッセージを取得されないようになります!
サーバーに複数のBotが導入されている場合は
忘れずに記載しましょう!