6
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

discord.pyでできること(ver0.16.10)

Last updated at Posted at 2019-04-13

#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版の記事も書けたら書きたいです

6
13
0

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
6
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?