はじめに
Discord bot を作成した備忘録
とある事情でDiscord bot を作成したいと思ったので、bot作成から様々なアクションの備忘録
slackbot以外にも手を出してみたかった
お品書きは以下の通り
- Discord とは
- Discord bot の作成方法
- モジュール,ディレクトリ構造など
- いろいろ作ってみた
Discord とは
Discord(ディスコード)とは、~~~ 音声通話・VoIPフリーソフトウェアである。
(Wikipediaより)
私は今までSlackみたいに使ったことが何度かあった
SlackにボットがあるんだからDiscordも…と思って調べてみたらdiscordにもあったので作ってみようと
Discord bot の作成方法
Applications ページの New Applicationをクリック
ボット名を聞かれるので好きなボット名をつける
Bot ページを開き、Add Botボタンをクリック
Yes, do it!もクリック
作成されたボットが表示される
アイコンや名前も変更可能
OAuth2を以下のように設定する
(とりあえずTEXT系はすべてONにしてみた)
OAuth2設定画面にあるURLに接続するとどこのDiscordルームにBotを招待するか聞かれる
正体が完了されれば、見事Botがルームに入ってくる
モジュール,ディレクトリ構造など
モジュール
モジュールは以下の通り
必要があればインストールしてください
pip install discord # discordを使用する際に必要
ディレクトリ構造
ディレクトリ構造は以下の通り
- dis_python
- img
- good.png
-dis_test.py
いろいろ作ってみた
公式さん
discord.pyさんいろんなことが書いてあります。
やってみたいことを徹底的に調べると楽しい
プログラム
import discord
TOKEN = "BotのTOKENを張り付ける"
client = discord.Client()
GOOD_IMG = "./img/good.PNG"
### イベントハンドラ一覧 #################################################
# async def の後を変えるだけで実行されるイベンドが変わる
# メッセージ受信時に実行: on_message(message)
# Bot起動時に実行: on_ready(message)
# リアクション追加時に実行: on_reaction_add(reaction, user)
# 新規メンバー参加時に実行: on_member_join(member)
# ボイスチャンネル出入に実行: on_voice_state_update(member, before, after)
###################################################################
# bot起動時処理
@client.event
async def on_ready():
channel = client.get_channel(チャンネルIDを張り付ける)
await channel.send("やぁ!元気かい?")
# message を受け取ったとき
@client.event
async def on_message(message):
# 送り手がボットの場合、無視
if message.author.bot:
return
if message.content.startswith("こんにちは"):
await message.channel.send("こんにちは!")
if len(message.attachments) > 0:
await message.channel.send("何かファイルを送ったね???")
@client.event
async def on_reaction_add(reaction, user):
await reaction.message.channel.send('{}を押したね??'.format(reaction.emoji), file=discord.File(GOOD_IMG))
client.run(TOKEN)
細かい説明は次回にまとめることとします…
少し解説
TOKEN と チャンネルIDは自分が使用しているものを使ってください
チャンネルIDはURLの一番後ろの「数字たち2」です
://discordapp.com/channels/数字たち1/数字たち2
イベントハンドラ一覧には使いそうなものをまとめてあります
特にon_message()は良く使いますねー
出力結果
とりあえずざっとまとめてみた
ドキュメントに関しては内容が濃いので、次回に回したいと思います
特にon_messageでのファイル操作などが意外と面倒だったのでそのあたりの備忘録を( ˘ω˘ )