Commands - Gllitter-bot/ilmina_bot GitHub Wiki

コマンド

discord.pyで定義されている関数とその詳細についてです。
A→Z順に並んでいます。

使用頻度の高い関数

特に使う機会の多いであろう関数の一覧です。

client.logout()

Discordからログアウトし、プログラムが終了される。

@client.event
async def on_message(message):
    if message.content.startswith("exit"):
        await client.logout()

client.run(*arg, **kwargs)

A blocking call that abstracts away the event loop initialisation from you.
上記はdicord.pyのドキュメントの原文だが、直訳すると「あなたからのイベントループの初期化を例外として無視するブロッキングコール」となる。

具体的な内容だが、ユーザーからの割り込みキー(Ctrl-CかDelete)を例外としてclient.startを完了するまで実行するといったもの。
client.runの引数については、ログインと接続の処理を行うclient.runの引数にそのまま使われる。
したがって、引数はBOTのトークンを記述することになる。
Basic creationでも述べたが、性質上 必ずプログラムの最後 に記述すること。

client.send_message(destination, content=None, *, tts=False, embed=None)

指定された場所にメッセージを送る。

destination

メッセージを送信する場所。
チャンネル、プライベートチャンネル、サーバー、ユーザーを指定できる。

content

送信するメッセージの内容。
内容がない場合、embedがなければならない。

tts

テキスト読み上げを使うかどうか。

embed

直訳すると「埋め込み」
タイムスタンプ、画像等のコンテンツ、埋め込まれたサムネイルやURL等がこれにあたる。

@client.event
async def on_message(message):
    if message.content.startswith("Hello"):
        await client.send_message(message.channel, "Hello!", tts=True)

on_message(message)

Discord上でメッセージがサーバーに送信されたときに実行される。
引数のmessageは、その送信されたメッセージ。
※メッセージの内容(文字列)を表すのはmessage.content

# オウム返し
@client.event
async def on_message(message):
    await client.send_message(message.channel, message.content)

on_ready()

クライアントがDiscordから受信したデータの準備が整ったときに実行される。
問題がなければ、BOTがログインできる。

@client.event
async def on_ready():
    pass

その他の関数

全てを挙げることは出来ないので、使いそうな関数を抜粋しました。

client.wait_for_message(timeout=None, *, author=None, channel=None, content=None, check=None)

Discordからのリプライを待ちます。

timeout

タイムアウトするまでの時間。

author

メッセージの送信者。

channel

メッセージを送信したチャンネル。

content

メッセージの内容。

check

これは関数で、引数はmessageだけを取る。
この関数が例外となったとき、全体も例外となる(未確認)

@client.event
async def on_message(message):
    if message.content.startswith('!like'):
        await client.send_message(message.channel, "何の食べ物が好き? !foodに続けて入力してください。")

        def check(msg):
            return msg.content.startswith('!food')

        message = await client.wait_for_message(author=message.author, check=check)
        name = message.content[len('!food'):].strip()
        await client.send_message(message.channel, message.author,"は{}が好きです。".format(name))