3
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Discord Bot】Pycordを使ってSlashCommandの使えるBOTの作り方

Last updated at Posted at 2022-03-26

今までDiscord.pyを使ってBotを作成してきたが、今後Updateがされないと発表されていることからPycordに乗り換えて、比較的SlashCommandも対応しやすいことが確認できたので共有したい。

現時点でdiscord.pyの開発はされているため、選択肢としてpy-cordを選択するのは良いですが、日本語のドキュメントも充実しているdiscord.pyのほうが良いかもしれません。
私個人は現在(2023/01/26)でもpy-cordで開発しています。(結構構文違うのでマイグレーションメンドイ)

初心者でも0から構築できるように説明していきますのでよろしくおねがいします。

まず準備から

以下のインストールをしていきます

  • Python 3.10
  • Visual Studio Code

Pythonの準備

Python今回はPythonを使ってDiscord向けのコマンドを作成するのでインストールしていきます。
下の記事を参考にしながらインストールしていけばOKですが、バージョンが少し古いので現在(2022/03/26)の最新バージョンの3.10をインストールするのをオススメします。
2023/01/26時点でpy-cordがPython3.11で動作しないなどサポートされていない事確認しましたので3.10が現時点でおそらく一番無難です。

コマンドプロンプトはWindowsボタンを押してcmdと打つとすぐに開くことができます

Visual Studio Codeの準備

Visual Studio Codeでコーディングをする前提なので以下の記事などを参考にしながらインストールします。

個人的には以下のチェックはいれる事を推奨しています

  • エクスプローラーのファイルコンテキストメニューに[Code で開く] アクションを追加する
  • エクスプローラーのディレクトリコンテキストメニューに[Code で開く] アクションを追加する

image.png

上記のチュートリアル通りに勧めばPythonの実行までが確認できると思います。

Discord BOTの準備

まずDiscord Developer Portalでログインします

ログインすると右上にNewApplicationというボタンがあるのでそれをクリックし、
image.png

任意の名前を入力してCreateをクリックします
image.png

左のメニューバーにあるBotをクリックし、Add Botをクリックします
image.png

Yes, do itをクリックして作成します
image.png

すると以下のような画面が出てきますので、Reset Tokenを押してトークンを取得します
image.png

Yes, do itをクリックすると
image.png

以下の画面でTOKENをCopyできるようになるので、
image.png

一度BOTを入れておくフォルダを作成しておき、適当な名前のテキストファイルに
image.png

以下のようにTOKEN = という文字を頭に付けて、""で囲った状態で保存します
image.png

保存し終わったらサーバーに対してBOTを追加していきます。

まず、左のメニューからOAuth2を選択し、URL Generatorを選択、
チェックボックスのbotapplications.commandsを有効にしておきます。
image.png

また、下にスクロールするとBOT PERMISSONSというものがあるので、今回はSend Messagesのみ選択してください。
(Administratorを選択すると全ての権限が付与されるのですが、悪意のあるユーザーにTOKENを知られた際にサーバーを荒らされるなどのリスクがあります)
image.png

すると下部にURLが生成されているので、Copyします。
image.png

サーバー管理者の場合は以下の通りに実行します

サーバーの管理者でない場合は以下スキップしてください

ブラウザのアドレスバーにURLを入力すると以下の画面になるので、
自分の呼び込みたいサーバーを選択してはいを押します。
image.png
ここでAdministratorなどを選択していた場合は管理者権限を与える事になりますので、今回はメッセージを送信のみがチェックされていることを確認してください。
image.png
あなたが人間かをチェックします
image.png
すると以下のように新しいBotが追加されるのが確認できると思います。
image.png

サーバー管理者ではない場合

サーバー管理者ではない場合はセルフで追加ができません。
なので、サーバー管理者に入れて貰う必要があります。

先程コピーしたURLをDiscordに貼り付けしてもらうとサーバー管理者がBOTを導入することができます。
このときに管理者権限が無いことを確認してもらう事が重要なので、その旨を伝えていただけると良いと思います。

個人的には上記で示した権限であれば全然問題ないレベルだと思っています
(最悪連投荒らし的に使われたりする可能性は十分にありますが)

もう少し準備があります。

BOTのTOKENをテキストファイルに保存した際に新しいフォルダを作成したものがあると思いますので、それを右クリックしCode で開くを選択しVisual Studio Codeを起動します。
image.png

インストール時にチェックを入れ忘れていた場合はこの項目は出てきません。
Visual Studio Codeを再度インストールしてチェックを付けておくと使いやすいです。

するとこのような画面で起動すると思いますので、
image.png
下のターミナルの部分のPS H:\discordbot> となっている部分をクリックしてカーソルをもっていきます。
image.png

この部分はコマンドプロンプトとほぼ同等の機能が提供されているので、ここにコマンドを打ち込むことでプログラムの実行などが可能になっています。

ここに今回使うライブラリのインストールコマンドを入力します。

py -3 -m pip install py-cord
py -3 -m pip install python-dotenv

今回紹介するSlashCommandはプレリリース版が必要なため --pre の引数が追加されます。
現時点では正式にSlashCommandが利用できるので --preは必要ありません

以下のようにSuccessfullyと出ればOKです(現在(2023/01/26)はバージョン2.3.xが最新となります)

Successfully installed py-cord-2.0.0b5
Successfully installed python-dotenv-0.20.0

これで準備万端です!

ライブラリというのは基本的にはプログラムを簡略化して書くことができるようにいろんな人が作ってくれてるものです。
これがないとプログラムを作るのは至難の業となりますので、製作者やコントリビュートしてくれる方に感謝しながら使いましょう

やっとBOTのが作れる!

Visual Studio Codeで適当な名前のpythonファイルを作成しましょう、
こちらではbot.pyとしましたが.py拡張子がついていれば基本的にどんな名前でも大丈夫なはずです。
image.png

とりあえず最初はコピペでOKです!

import discord
from discord import Option
import os
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv("TOKEN")

bot = discord.Bot()
GUILD_IDS = [0000000000000]  # ← BOTのいるサーバーのIDを入れます


@bot.event
async def on_ready():
    print(f"Bot名:{bot.user} On ready!!")


@bot.slash_command(description="あなたの名前か入力した名前に挨拶します", guild_ids=GUILD_IDS)
async def hello(
    ctx: discord.ApplicationContext,
    name: Option(str, required=False, description="名前を入力してね", )
):
    if not name:
        name = ctx.author
    await ctx.respond(f"こんにちは! {name} さん!")

bot.run(TOKEN)

SlashCommandではサーバーID(Guild ID)が必要になるためBOTのいるサーバーを右クリックしてIDをコピーしてきます
image.png
先程のソースの以下の部分を変更します

GUILD_IDS = [0000000000000]  # ←ここの000...と置き換えます

基本的な処理部分は完成です!

dotenvを使えるようにします

ソース上の以下命令は「.envファイルからTOKENを取得してきなさい。」という命令なので、.envファイルがない場合は機能しません。

import os
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv("TOKEN")

準備でメモしておいたTOKENが書いてあるテキストファイルは.envの書式で書いたものになるので、
ファイル名を変えることで対応します。
image.png
ファイルを選択した状態でF2キーを押すとファイル名の変更ができるので.envとしてファイル名を変更します。
すると歯車状のアイコンに変化して文字に色がついてくれるので間違いがないことが確認できます。
image.png

あとは実行するだけです!

ターミナルに以下のコマンドを入れて実行します
bot.pyの部分はあなたの作ったPythonファイル名を入力します

py -3 bot.py

すると、以下のような実行結果が出て準備が完了していることがわかります

Bot名:New Bot#2308 On ready!!

この状態で/helloと入力するとあなたの入力したBOTが起動している事がわかります
image.png
そのままエンターを押すとコマンドを呼び出した人が表示されていることがわかります
image.png
また今回は任意引数としてnameという値を一緒に受け取ることができるので
image.png
任意の名前を呼ぶことができるようになっています!
image.png

ここまで読んでくれた方に感謝

けっこう長い説明になってしまいましたが、読んでくれてありがとうございます!

詳しいPycordの仕様や、Pythonの書き方などは別途説明できる機会があれば説明しようと思いますが、今回はここまでです。

Pycordの詳しいドキュメントは英語で書いているので読みにくいかもしれませんが、詳しくはそちらを見ると何ができるか?などが書かれていますので、こんなものが作りたいなどあればWord検索などを駆使して読んでみると良いと思います!

3
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?