Help us understand the problem. What is going on with this article?

DiscordのBotをPythonで作ってみた

More than 1 year has passed since last update.

はじめに

友達とゲームをするときにボイスチャットって重要ですよね.ボイチャアプリを色々ネットで探してたらDiscordが強いということを小耳にはさみました.せっかくDiscordを使うならBotを使って便利にしてみようと思いました.

今回作るもの

友達がDiscordのサーバに接続(≒ゲームを開始)したら「○○さんがonlineになりました!」みたいな投稿するBotがあれば便利そうなので作ってみます.

下準備

DiscordのBotを作るには以下のことをしておく必要があります.
1. Discordのアカウントを作成
2. Botのトークンキー取得
3. discord.pyのダウンロード

1.はアカウントを作るだけなので省略します.以下で,2-3について述べていきます.

Botのトークンキー取得

Discordの開発者用のページで新しいBotを登録します.

  1. マイアプリの新しいアプリをクリック

    Discordのこういうところ好き

  2. アプリケーション名のところにBotの名前を記入

  3. Botユーザを作成をクリック

  4. トークンキーを確認(後で使います)

  5. Generate OAuth2 URLをクリック
    キャプチャ6.PNG

  6. 表示されたURLに飛ぶ

  7. 自分のサーバにBotを追加

こんな感じに追加できていたら準備完了です.
キャプチャ9.PNG

discord.pyのダウンロード

pipを使ってインストールします.

$ pip install discord.py

Bot作成

discord.pyをインポートし,トークンキーとテキストチャットのチャンネルIDを書いておきます.

import discord

TOKEN = "**************************" # トークンキー
TEXT_CHANNEL = **************************** # テキストチャットのチャンネルID

client = discord.Client()

text_chat = discord.Object(id=TEXT_CHANNEL)

チャンネルIDは詳細設定の開発者モードをオンにした後,

チャンネルを右クリックすると,IDをコピーできます.
キャプチャ11.PNG

今回は,「Botがログインしたら」,「こんにちはメッセージが送られてきたら」,「メンバのステータスが変更されたら」の3つの機能を実装してみました.

# Botがログインしたら
@client.event
async def on_ready():
    msg = "やあ!TEST Botです.よろしくね!"
    await client.send_message(text_chat,msg)

# こんにちはメッセージ
@client.event
async def on_message(message):
    if message.content.startswith("こんにちは"):
        if client.user != message.author:
            msg = "こんにちは " + message.author.name + "さん!"
            await client.send_message(message.channel, msg)

# メンバのステータスが変更されたら
@client.event
async def on_member_update(before, after):
    if before.status != after.status:
        msg = after.display_name + " さんが " + str(after.status) + " になりました"
        await client.send_message(text_chat,msg)

# Bot起動
client.run(TOKEN)

on_readyon_messageon_member_updateなどの使い方はAPIリファレンスを参考にしました.
基本的にsend_message(CHANNEL,MESSAGE)で,任意のチャンネルにメッセージを送信できます.

実行結果

$ python3 test.py

Botがあいさつしてくれます.
キャプチャ14.PNG

ユーザが接続,切断するたびに通知が飛びます.

最初のほうはよかったんですが,通知が飛びまくるのでだんだんうざく感じるようになりました...
(友達から通知がうるさいと苦情が来たので,この機能はお蔵入りになりました.....)

今回参考にしたページ

意外と簡単だったからDiscordのBOTを作ってみるよ
Pythonで実用Discord bot(discord.py解説)
Pythonで簡単なDiscord Botの作り方
API Reference - discord.py 0.16.12 documentation

penguin-knight
来世はペンギンになりたい
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした