前書き
この初心者による初心者のためのDiscord.pyでは、
Discord.pyを習得したいけどよく分からない!
という人のために、初心者が、初心者のための解説をしていきます。
書き方、使い方、構文などを記載していきます。
この記事を書こうと思った理由は、動くけど情報が古かったり、だいぶ昔に作成された記事がヒットしたりと、最近の記事が少なかったので、先駆者様への恩返しなども込めた記事となっております。
ちなみに初投稿です。至らない部分もあると思いますが、問題点などあれば教えて下さると幸いです。
対象:初心者(パソコンのタイピングができて、pythonを触ったことがある程度の人)
##基本構文
まず初めに、Discord.pyとは、Discord BotをPythonで動かすためのライブラリのことを指します。
まず、
# Windows環境
py -3 -m pip install discord.py
# その他
python3 -m pip install discord.py
でdiscord.pyをpythonで使えるようにインストールします。
では、次は実際にコードの例を見ていきましょう。
import discord #Discord.pyをimport
client = discord.Client() #クライアントを定義。
token = "ここにdiscord tokenを貼り付ける"
#処理
client.run(token) #botを走らせる
と言った形です。これでとりあえずbotはオンラインになります。
では、次に実際に処理を書いていきましょう。
処理は、
@client.event
async def 使いたいもの:
#処理1
という構文で書いていきます。
例として、次のものは、!helloと発言した際に、こんにちは。と返すコードです。
import discord
client = discord.Client()
token = ""
@client.event
async def on_message(message):
if message.content == "!hello": #もしメッセージがhelloだったら
await message.channel.send("こんにちは。") #こんにちはを送信
では、詳しい解説をしていきます。
async def on_message(message):
このコードは、メッセージが送られてきた時に反応するという意味のコードです。
async defにはそれぞれ名前があるのですが、初心者がこれを最初から詰め込んでしまうと多分パンクしてしまうので、飛ばします。
if message.content == "!hello":
このコードは、message.content(送信されたメッセージの内容。)が、もしも!helloと等しかったら(==という演算子。!=などもある。)処理を実行するというif文です。
このif文というのはよく使うので、覚えておきましょう。
await message.channel.send("こんにちは。")
このコードは、message.channel.sendで、このメッセージが送信されたチャンネルに、こんにちはとメッセージを送信するコードです。
この message.channel.sendというのは、Discord.pyをする上ですごくよく使うコードなので、これも覚えておきましょう。
##よくやってしまう間違い
次に、よくやってしまう間違いを見ていきましょう。
@client.event
async def on_message(message):
#処理
@client.event
async def on_message(message):
#処理2
のように、同じイベントを2つ書いてしまう人がめちゃくちゃ多いのですが、やめましょう。
どちらかが動きませんし、もし動いたとしても可読性が悪く、コードのバグが見つけにくいです。
次のよくある間違いは、
@client.event
async def on_message(message):
if message.content == "!hello":
await channel.send("こんにちは。")
はい。インデントエラーですね。
ここまで極端な例は無いと思いますが、もし動かなかったときのエラー文にindentという文字があったら、まっさきに確認しましょう。
次のよくある間違いは、
@client.event
async def on_ready():
channel = 定義
await message.channel.send("起動しました!")
はい。この何がダメかと言うと、messageが定義されていないのに、message.channel.sendを使おうとしていますね。
これだとエラーを吐いてしまいます。
正しくは、channel.sendです。間違えないようにしましょう。
##最後に
ここまで読んでいただいてありがとうございます。
今回は構文を説明しただけですが、次回からはコードを動かすサーバーや、実用性のあるコードを記述していきます!
役に立った方は、LGTMやストックなどよろしくお願いします!