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

rewrite版Discord.pyでこういう時どうするか

動機

「あれ、どうやって書くのだけ」がたまーにあるので......。
プログラミングはここから入ったいわゆる初心者ですので、間違えてるところがありましたらコメント等でのご指摘をお願いします。

一番良いのは公式のAPIリファレンスを読むことです。

環境

  • Python 3.7.2
  • discord.py 1.2.4
  • Windows 10 1903

client = discord.Client() を宣言してあるのでその都度読み替えてください。

用意

  • python3系
  • pip(pip3)コマンド
  • テキストエディタ等(私はIDLEを使っています。)
  • discordアカウント

基本

最小構成

import discord
#この間にいろいろ書く
discord.Client().run('Token')

動かすのに必要なトークン(Token)はDiscordのDevサイトで取得できます。
全ての処理はdiscord.Client().run('Token')より上に書いてください。

メッセージに反応する場合の例

@client.event
async def on_message(message): # メッセージが
    if message.content.startswith('/command'): # "/command"で始まるとき
        await message.channel.send('実行されました')

基本的にはawait ~と書いてあるところを書き換えて作ります。

組み合わせるとこんな

disbot.py
import discord
client = discord.Client()

@client.event
async def on_ready(): # 起動した1度のみ呼ばれる
    print('起動しました。')

@client.event
async def on_message(message):
    global piyo # グルーバル変数はここに

    if message.content.startswith('/command'): # 
        await message.channel.send('実行されました')

    if message.content.startswith('/guild_name'):
        await message.channel.send('ここは '+message.guild.name) # サーバー名を返す

discord.Client().run('Token')

反応条件

メッセージの先頭が一致した場合

if message.content.startswith('/command'):

コマンド系は大抵これで作ります。気になったら「python startswith」でググってください。

メッセージの一部と一致

if 'hoge' in message.content:

特定のワードに反応するとかしたい場合にどうぞ。

TextChannel

メッセージを送る

await message.channel.send('にゃーん')

# 特定チャンネルに送る
# xxxにはチャンネルIDを入れる
await client.get_channel(xxx).send('猫です')

画像やファイルを送る

pic_hoge = discord.File('hoge.png')
await message.channel.send(file=pic_hoge)

送られてきたメッセージ文章はどこにある?

message.content

VoiceChannel

メッセージを送った人と同じボイスチャンネルに参加する

global voich
# 接続
if message.content.startswith('/connect'):
    voich = await discord.VoiceChannel.connect(message.author.voice.channel)
# 切断
if message.content.startswith('/discon'):
    await voich.disconnect()

voichは、共通で使うのでグローバル変数にしておいてください。

再生する

def check_error(er):
    print('Error check: '+ er)

voich.play(discord.FFmpegPCMAudio('piyo.mp3'), after=check_error)

after= には再生が終了したり、エラーが発生したときに呼ばれる関数を指定します。
FFmpegPCMAudioを使う際はffmpegへのPATHを通しておいてください。

停止する

voich.stop()

これだけ。

Client

所属しているサーバー名を見る

for s in client.guilds:
    print(s)

プライバシーには気を付けましょう......。

名前の下に表示される"プレイ中"を変更する

await client.change_presence(activity=discord.Game(name='稼働中'))

# 解除するときはこう
await client.change_presence(activity=None)
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
ユーザーは見つかりませんでした