#discord.pyとは
discordAPIのpythonラッパーです 簡単に言うとdiscordでbotを作って色々できます
利用するにはdiscordのデベロッパー登録をしてトークンを入手する必要があります
discord.pyで検索すると山ほどトークン入手からbot作成まで解説されてるので、この記事では省きます すみません面倒くさがりなんです
##バージョンの違い
discord.pyには現在、rewrite版(ver1.0.0)と旧バージョン(ver0.16.10)があります
この記事は旧バージョンの解説なので注意してください
主な違いは
https://discordpy.readthedocs.io/en/latest/migrating.html
に書いてあるので必要なら見てください
ver0.16.10のリファレンス https://discordpy.readthedocs.io/en/async/api.html
#botの基本形
基本的には以下のコードに実装したい機能をつらつらと書き足していくだけです
import discord
client = discord.Client()
@client.event
async def イベント名():
#ここに書く
client.run("入手したトークン")
注意点として、async def イベント名():
の1行前に@client.eventを入れることです
##使いやすいイベント
全部ではないですけど、使えそうなイベントを解説していきます
全部見たい人はリファレンスのイベント欄を見てください(https://discordpy.readthedocs.io/en/async/api.html#event-reference)
###on_ready()
botを起動したときに呼び出されます botの名前やidの確認に使えます
###on_message(message)
誰かがチャットをしたときに呼び出されます
if message.content.startswith("!command"):
と組み合わせると、誰かが!commandと発言したときになにかすることができます
また、引数のmessageから発言したチャンネル、発言者ID等の情報を入手できます
###on_message_delete(message)
誰かがチャットを消したときに呼び出されます
messageに消されたチャットの情報が入ってると思います(やったことないので知らない)(ごめんなさい)
###on_member_join(member) on_member_remove(member)
サーバーにメンバーが入ってきたとき/抜けたときに呼び出されます memberにもmesssage同様ID等情報が入ってます
##例プログラム
イベントとclientクラスのメソッドを組み合わせることで様々なbotを作ることができます ここでは例プログラムをいくつか紹介します
###おはように反応しておはようを返すbot
import discord
client = discord.Client()
@client.event
async def on_message(message):
if message.content.startswith("おはよう"):#おはように反応
if client.user != message.author:#自身には反応しない
text = message.author.mention+"さんおはよう"#message.author.mentionでメンション
await client.send_message(message.channel, text)#チャットされたチャンネルでチャットする
client.run("入手したトークン")
###サーバーに入った人に役職を付与
import discord
client = discord.Client()
@client.event
async def on_member_join(member):
for role in member.server.roles:#サーバーの役職を1個づつroleに代入(for in文を参照)
if role.name == "役職":#もしroleの名前が"役職"なら
await client.add_roles(member,role)#入ったメンバーに役職を付与
client.run("入手したトークン")
###botを強制終了
discordAPIは常にループしているので、コマンドラインからはctrl+c
でしか強制終了できないのでon_messageから終了できるようにします
client.logout()
だけではすぐに終わらないのでsys.exit()
も併用しています
この方法以外の方法を知っている人はコメントで教えてください
import discord
import sys
client = discord.Client()
@client.event
async def on_message(message):
if message.content.startswith('!SHUTDOWN_BOT'):#!SHUTDOWN_BOTが入力されたら強制終了
await client.logout()
await sys.exit()
client.run("入手したトークン")
##感想
この記事はver0.16.10で書いているんですが、rewrite版を知らずにbotを作ってたのでrewrite版の記事も書けたら書きたいです