14
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 3 years have passed since last update.

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

Last updated at Posted at 2019-10-21

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

一番良いのは公式の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)
14
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
14
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?