簡體   English   中英

下拉菜單,如何使角色按下 Python Discord.py

[英]Drop-down menu, how to make the role issued by pressing Python Discord.py

我開始在 Python 開發一個 Discord 機器人,我遇到了一個問題,我找不到關於如何使用菜單發布角色的信息我寫的代碼:`

class Dropdown(discord.ui.Select):
    def __init__(self):
        options = [

            discord.SelectOption(label="role1", description="Крутая роль", emoji=""),

            discord.SelectOption(label="role2", description="Богатая роль", emoji="🤳"),
            discord.SelectOption(label="role3", description="Игровая роль", emoji="🎮"),
        ]

        super().__init__(
            placeholder="Меню",
            max_values=1,
            min_values=1,
            options=options
        )
    
    async def callback(self, inter: discord.MessageInteraction):
        await inter.response.send_message(f"Вы выбрали роль {self.values[0]}")


class DropdownView(discord.ui.View):
    def __init__(self):
        super().__init__()
        self.add_item(Dropdown())


@bot.command()
async def role(ctx):
    await ctx.send("Выберите роль:", view=DropdownView())

`

我試圖在源代碼中找到它,即使我能找到一些東西,也沒有用。

某些角色的選項

有多種方法可以做到這一點,但我建議根據該角色的 ID 為每個選項賦予價值。 您可以通過單擊角色上的...按鈕並復制 ID 來獲取 ID。 然后你可以使用

from discord.utils import get

role = get(inter.guild.roles, id=role_id)

在我們繼續之前,我需要提到收到的交互不是MessageInteraction而是Interaction ,因此我們可以訪問它具有的 guild 屬性。

考慮到這一點,將它們與您擁有的代碼放在一起將是:

from discord.utils import get

class Dropdown(discord.ui.Select):
    def __init__(self):
        options = [

            discord.SelectOption(label="role1", value=str(roleid1) ,description="Крутая роль", emoji=""),

            discord.SelectOption(label="role2", value=str(roleid2), description="Богатая роль", emoji="🤳"),
            discord.SelectOption(label="role3", value=str(roleid3), description="Игровая роль", emoji="🎮"),
        ]

        super().__init__(placeholder="Меню",options=options)
    
    async def callback(self, inter: discord.Interaction):
        await inter.user.add_roles(get(inter.guild.roles, id=int(self.values[0])))
        await inter.response.send_message(f"Вы выбрали роль <@&{self.values[0]}>")


class DropdownView(discord.ui.View):
    def __init__(self):
        super().__init__()
        self.add_item(Dropdown())


@bot.command()
async def role(ctx):
    await ctx.send("Выберите роль:", view=DropdownView())

另請注意, min_values max_values默認值為 1,因此您可以跳過它們。 在這里查看更多信息

所有角色

您可以使用RoleSelect class 自動獲取角色。 然后,您可以在交互中使用它的values屬性來獲取已選擇的角色列表。 所有這一切看起來像這樣

import discord.ui


@bot.command()
async def role(ctx):
    view = discord.ui.View()
    role_select = discord.ui.RoleSelect(placeholder="Меню")

    async def role_select_callback(inter):
        await inter.response.send_message(f"Вы выбрали роль {role_select.values[0]}")
    
    role_select.callback = role_select_callback
    view.add_item(role_select)
    await ctx.send("Выберите роль:", view=view)

要向發送此命令的用戶添加角色,您所要做的就是更改回調 function,以便它向與消息交互的人添加角色

import discord.ui


@bot.command()
async def role(ctx):
    view = discord.ui.View()
    role_select = discord.ui.RoleSelect(placeholder="Меню")

    async def role_select_callback(inter):
        await inter.user.add_roles(role_select.values[0])
    
    role_select.callback = role_select_callback
    view.add_item(role_select)
    await ctx.send("Выберите роль:", view=view)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM