【Python】DiscordのBotを作ってみた

はじめに

どもー。
今年新卒入社したりょりょです。

エンジニア

りょりょ

季節の変わり目で体調崩しがちです。
皆さんお気をつけ。。。

エンジニア

りょりょ

記念すべき初記事となるわけですが、
今回はPythonを使ってDiscordのBotを使ってみようと思います。

Discordとは…
SkypeやSlackのように通話やチャットができるアプリケーション。
ゲームをやる人が使っているイメージ。

今回はこちらがキーワードを送信すると返信してくれる、一番基本的なBotを作っていきます。

〜環境〜
・Python 3.10.7
・pip 22.2.2
・discord.py 2.0.1

Pythonを書く前に

実はPythonで実際にプログラムを書く前にやることがあります。
それはTokenの作成です。
TokenはBotとプログラムを紐つけているようなもので、Bot作成には不可欠です。
何ならこれからの作業を行えばBotの招待自体はできるので、Bot作成完了と言っても過言ではありません。(もちろんまだ動きませんが…)

まず、DiscordDeveloperPortalにアクセスします。

右上の”NewApplication”をクリックしてApplicationを作成します。

次に左のサイドバーメニューから”Bot”をクリックします。

“AddBot”をクリックしてBotを作成します。

ここではBotの名前や画像などを設定するわけですが
今回はLogicalStudioのマスコットキャラクター”ロージー“で設定してみます。

あらかわいい♡

下にある項目も必要に応じて設定してあげてください。
結構詳しめに説明書いてあるので、読めばなんとなくわかると思います。

“ResetToken”をクリックするとTokenが生成されます。(このTokenはプログラミングで使います)

このTokenは絶対に第三者に漏らさないようにしてください。
Tokenが漏れてしまうとBotにアクセスされてしまいます。

次に設定したBotを招待するためのURLを生成します。

“OAuth2″→”URL Generator”と進みます

次にSCOPESを設定します。
今回はBotですので”bot”にチェックを入れます。

するとBotの権限を設定する項目が出てきます。
権限は使う機能に合わせて設定してください。

ここまでできたら、GENERATED URLのURLをコピーして、ブラウザのURL欄に貼り付けて遷移します。

これで招待完了です。サーバーを確認して作ったBotがいれば、早速プログラミングを始めましょう!!

プログラミングしよう

さっそくプログラムを書いていきましょう!!

discord.pyのドキュメントに書いてあるサンプルを動かしてみましょう!!

# This example requires the 'message_content' intent.
import discord
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)

@client.event
async def on_ready():
	print(f'We have logged in as {client.user}')

@client.event
async def on_message(message):
	if message.author == client.user:
		return
	if message.content.startswith('$hello'):
		await message.channel.send('Hello!')

client.run('your token here')

‘your token here’の部分には自分のBotTokenを入れてあげてくださいね。

できたらこのプログラムを実行!!

ロージーがオンラインになりましたね!

クイックスタートのプログラムは”$hello”と入力すると”Hello!”と返してくれるシンプルなプログラムです。
実際に”$hello”と入力してみると・・・

こんな感じで返事をしてくれます(かわいい)

-おまけ- 改造して簡単なおみくじ機能を作ろう

ここまでできたら色々プログラムを追加していくだけなのですが、
今回はちょっとだけ改造して、おみくじ機能を実装してみようと思います!!

# This example requires the 'message_content' intent.
import discord
# 乱数を使うのでimport忘れずに!!
import random
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)
# ここも追加分
OMIKUJI = ['大吉', '吉', '中吉', '小吉', '末吉', '凶', '大凶']

@client.event
async def on_ready():
    print(f'We have logged in as {client.user}')

@client.event
async def on_message(message):
    if message.author == client.user:
        return
    if message.content.startswith('$hello'):
        await message.channel.send('Hello!')
    # ここから追加分
    if message.content == '$おみくじ':
        await message.channel.send(f'あなたの運勢は"{OMIKUJI[random.randrange(len(OMIKUJI))]}"しゅこ~')
    # ここまで追加分
client.run('your token here')

おみくじの中身を配列で持っておいて、乱数で吐き出しています。
こんな感じで、コマンド→処理→アウトプットという感じで、簡単にコードを実装できます。

コードを実行してみると…

こんな感じでおみくじを楽しめます!!

おわりに

今回はPythonでDiscordBotを作ってみました。
Pythonの他のライブラリや、discordpyの他の機能を使うことで、本当に様々なものを作れるのでよかったら遊んでみてください!!

ロジカルスタジオではエンジニアを募集しています。

興味を持っていただけたら、是非採用サイトからご応募ください!