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