質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2730閲覧

Discord Botで、複数人同時利用時に正常に動作しない

mochizuki_grand

総合スコア2

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/09/29 13:12

前提・実現したいこと

DiscordのBotをPython3.7で作っています。
機能としては、
・Botの起動時に指定したチャンネルに対して「起動完了」と送る
・「!!test」と入力されると、「Test OK」と返す
・「!!info」で、Botに関する情報を表示
・(DM限定)チャット欄から2つの値を取得し、足し算した値をチャットに送信する
というような感じです。

発生している問題・エラーメッセージ

一応ちゃんと動きはするのですが、複数のユーザーが同時にBotを利用した場合、うまく動作しません
詳細として例を挙げますと
「ユーザーAがDMで足し算のコマンドを使っていて、32行目の処理が終わり、ユーザーAの値の入力を待機しているとき、
ユーザーBがチャンネルで『!!help』と入力したとき、チャンネルに『!!help』のメッセージが流れるが、ユーザーAとBotのDMにて、ユーザーAが値の入力が終わっていないのにも関わらず、34行目の処理に進んでしまう」
というように、複数人で同時に利用ができません。

該当のソースコード

Python

1import discord 2from discord.ext import commands 3 4TOKEN = '***' 5information = '開発版 ver.1.0' 6developperinfo = 'Developper: *** \nBlog: ***' 7#プレフィック 8client = commands.Bot(command_prefix = '!!') 9 10#起動時のイベント 11@client.event 12async def on_ready(): 13 print('ready') 14 CHANNEL_ID = *** 15 channel = client.get_channel(CHANNEL_ID) 16 await channel.send('起動完了') 17 18#testコマンド 19@client.command() 20async def test(ctx): 21 await ctx.send('Test OK') 22#botの情報を表示するコマンド 23@client.command() 24async def info(ctx): 25 await ctx.send(information) 26 await ctx.send(developperinfo) 27 28#足し算コマンド 29@client.command() 30@commands.dm_only() 31async def hs(message): 32 await message.author.send('1つ目の値を入力(半角)') 33 kadai = await client.wait_for('message') 34 await message.author.send('2つ目の値を入力(半角)') 35 test = await client.wait_for('message') 36 print(type(kadai),type(test)) 37 38 answer = int(kadai.content)+int(test.content) 39 40 await message.author.send(answer) 41 42#トークン 43client.run(TOKEN) 44

試したこと

対処法がわからず、何もできていないため
アドバイスをお願いします

補足情報(FW/ツールのバージョンなど)

Python3.7
Windows10
discord.py

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Python

1await client.wait_for('message')

がDMとサーバーのメッセージどちらも待つからでしょう。

Python

1@client.command() 2@commands.dm_only() 3async def hs(message): 4 def check(waited_message): 5 is_dm = type(waited_message.channel) == discord.DMChannel 6 is_same_user = waited_message.author == message.author 7 return is_dm and is_same_user 8 9 await message.author.send('1つ目の値を入力(半角)') 10 kadai = await client.wait_for('message', check=check) 11 await message.author.send('2つ目の値を入力(半角)') 12 test = await client.wait_for('message', check=check) 13 print(type(kadai),type(test)) 14 15 answer = int(kadai.content)+int(test.content) 16 17 await message.author.send(answer)

投稿2021/09/29 14:21

編集2021/09/29 14:28
Tai4

総合スコア49

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問