Nello39
@Nello39

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

PycordのSelectMenuで選択した人のDiscord名を取得したい

Q&A

Closed

解決したいこと

PycordのSelectMenuで、選択したDiscordユーザーと選択した内容をPythonの二次元配列に格納したい。ただ選択したDiscordユーザーの取得方法がわからない

該当するソースコード

main.py
import discord
import os
from dotenv import load_dotenv

#略

@bot.slash_command(name = "view")
async def view(ctx):
    await ctx.respond("ドロップダウンメニューから希望レーンを選択してください")
    await ctx.send(view=MyView(timeout=0))
    
class MyView(discord.ui.View):
    @discord.ui.select(placeholder= "希望レーンを選択してください",min_values=1,max_values=5,
        options=[discord.SelectOption(label="TOP",
                description="TOPレーンを希望します"
            ),
            discord.SelectOption(
                label= "MID",
                description="MIDレーンを希望します"
            ),
            discord.SelectOption(
                label= "JG",
                description="ジャングラーを希望します"
            ),
            discord.SelectOption(
                label= "ADC",
                description="ADCを希望します"
            ),
            discord.SelectOption(
                label= "SUP",
                description="サポートを希望します"
            )
        ]
    )
    async def select_callback(self, select, interaction): 
        disabled = True,
        await interaction.response.send_message(f'あんたの希望レーンは{select.values[0]}です'),
bot.run(os.getenv('TOKEN')) 

この時、レーンを選択した人のDiscordのユーザーネームを取得して、希望レーン(selevt.values[0])と一緒に二次元配列へ格納して、あとでデータを取り扱いやすくしたい。

自分で試したこと

日本語英語ともに検索したが、情報は見つからない。公式DOCも読んだが、見当たらない。

0

1Answer

Comments

  1. どのように解決したのでしょうか?

  2. @Nello39

    Questioner

    SelecMenuを選択した人ではなくSlashCommandを使用した人の情報を取得することにしました。

    main.py
    @bot.slash_command(name = "view")
    async def view(ctx):
        global ppl #変数pplをグローバル変数とする
        ppl = ctx.author #コマンド使用者の取得
        await ctx.respond("ドロップダウンメニューから希望レーンを選択してください")
        await ctx.send(view=MyView(timeout=0))
    
    #略
    
        async def select_callback(self, select, interaction): 
            disabled = True
            await interaction.response.send_message(f'{str(ppl)}の希望レーンは{select.values[0]}です')
            selection = select.values[0]
            selecter = [selection, str(ppl)] #希望レーンとコマンド使用者のユーザー名を配列にする。
    

    のような形になりました。しかし、スラッシュコマンド使用者と、セレクトメニュー選択者が違う場合(セレクトメニューはコマンド使用者以外からも見える状態なため、コマンド使用者以外がそのセレクトメニューを使用して選択してしまうことも可能)、間違ったデータになってしまいます。ただ、そういった場合を除けば、当初私が予定していた実装と動きは変わらない形に収めることができました。

Your answer might help someone💌