如何将
self.canCraft
变量传递到装饰器中?我明白这个问题为什么不起作用,但我找不到解决方案。我不想用全局变量来做到这一点。
class CraftView(discord.ui.View):
def __init__(self, viewOwner, craftItem, canCraft):
super().__init__()
self.viewOwner = viewOwner
self.craftItem = craftItem
self.canCraft = canCraft
@discord.ui.button(label="Craft", style=discord.ButtonStyle.primary, emoji="🔨", disabled=self.canCraft)
async def button_callback(self, interaction: Interaction, button: ui.Button):
pass
您可能最好对 discord.ui.Button 进行子类化并将其添加到这样的视图中 -
import discord
class CraftButton(discord.ui.Button):
def __init__(self, label:str, emoji:str, disabled:bool, style:discord.ButtonStyle=discord.ButtonStyle.primary):
super().__init__(label=label, emoji=emoji, disabled=disabled, style=style)
async def callback(interaction:discord.Interaction):
...
class CraftView(discord.ui.View):
def __init__(self, view_owner, craft_item, can_craft):
super().__init__()
self.view_owner = view_owner
self.craft_item = craft_item
self.add_item(CraftButton("Craft", "🔨", can_craft))