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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Q&A

解決済

1回答

696閲覧

関数を呼び出すと、処理が止まってしまう

Kamina

総合スコア3

Discord

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

0グッド

0クリップ

投稿2021/09/01 15:00

前提・実現したいこと

discord.pyでselect-menuを使って、選択された項目別に、さらに新しい別のselect-menuを表示するプログラムを作っています。
この時、関数を呼び出しているのですが、呼び出した後の処理が実行されません。
wait_forが関係していそうです。
これを解決するために、何かいい方法はないでしょうか。

下記のコードでは、dashbord関数でoption2が押された時に、role_setting関数を呼び出すのですが、その後dashbord関数を呼び出せません。

該当のソースコード

discord.py

1async def role_setting(ctx): 2 guild = bot.get_guild(874981078228676669) 3 everyone_role = discord.utils.get(guild.roles, name="@everyone") 4 overwrites = {ctx.author: discord.PermissionOverwrite(read_messages=True), 5 everyone_role: discord.PermissionOverwrite(read_messages=False), 6 guild.me: discord.PermissionOverwrite(send_messages=True) 7 } 8 ch_role = await guild.create_text_channel(name="ロールの再設定", overwrites=overwrites) 9 await msg1.delete() 10 await dashbord(ctx) 11 msg = await ch_role.send(embed = e_role, 12 components= 13 [Select(placeholder="再設定したい項目を選んでください", 14 custom_id="role", 15 max_values=2, 16 options=[ 17 SelectOption( 18 label="利用チャンネルの再設定", 19 value="option1", 20 ), 21 SelectOption( 22 label="通知設定", 23 value="option2", 24 ), 25 ])] 26 ) 27 28 29 interaction = await bot.wait_for( 30 "select_option", check=lambda inter: inter.custom_id == "role" 31 ) 32 selected_value = interaction.values 33 if selected_value == "option1": 34 await choose_art(ctx, ch_role, role_setting_list) 35 if selected_value == "option2": 36 await nontification(ctx, ch_role) 37 38@bot.command() 39async def dashbord(ctx): 40 rule = bot.get_emoji(876075814540685312) 41 setting = bot.get_emoji(876077004032716810) 42 msg = await ctx.send(embed = e_dashbord, 43 components= 44 [Select(placeholder="操作したい項目を選んでください", 45 custom_id="dashbord", 46 options=[ 47 SelectOption( 48 label="利用規約", 49 value="option1", 50 emoji=rule, 51 ), 52 SelectOption( 53 label="ロール設定", 54 value="option2", 55 emoji=setting, 56 ), 57 ])] 58 ) 59 interaction = await bot.wait_for( 60 "select_option", check=lambda inter: inter.custom_id == "dashbord" 61 ) 62 selected_value = interaction.values[0] 63 if selected_value == "option1": 64 await interaction.send(content=f"DMに利用規約を送信しました。") 65 if selected_value == "option2": 66 await interaction.send(content=f"#ロールの再設定 へ移動してください。") 67 await role_setting(ctx) 68 await msg.delete() 69 await dashbord(ctx)

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

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

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

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

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

guest

回答1

0

自己解決

fire and forgetを使うことで解決しました。

投稿2021/09/02 10:23

Kamina

総合スコア3

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問