[英]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.