如何在discord_components中实现点击按钮调用Python函数
可以实现,核心是通过监听按钮点击交互事件,匹配按钮的自定义ID即可触发你预设的内部函数,具体实现步骤如下:
实现步骤
1. 初始化库并定义带自定义ID的按钮
首先要将discord_components库和你的bot实例绑定,创建按钮时给不同功能的按钮设置唯一的custom_id作为识别标识:
from discord_components import DiscordComponents, Button, ButtonStyle # 启动时将组件库与bot绑定 DiscordComponents(bot) # 发送带按钮的测试指令 @bot.command() async def test_btn(ctx): await ctx.send( "点击下方按钮测试功能", components = [ Button(style=ButtonStyle.green, label="功能A", custom_id="run_func_a"), Button(style=ButtonStyle.grey, label="功能B", custom_id="run_func_b") ] )
2. 定义你要触发的内部函数
所有要被按钮触发的函数都需要定义为异步函数,参数默认接收交互对象:
# 按钮功能A对应的执行函数 async def run_func_a(interaction): # 这里写你的业务逻辑 await interaction.respond(content="功能A已执行") # 按钮功能B对应的执行函数 async def run_func_b(interaction): # 这里写你的业务逻辑 await interaction.respond(content="功能B已执行")
3. 监听按钮点击事件分发执行函数
监听全局的按钮点击事件,通过交互对象携带的custom_id匹配对应要执行的函数即可:
@bot.event async def on_button_click(interaction): cid = interaction.component.custom_id if cid == "run_func_a": await run_func_a(interaction) elif cid == "run_func_b": await run_func_b(interaction) # 可在此扩展更多按钮ID和对应函数的匹配逻辑
注意事项
- 按钮的
custom_id最大长度为100字符,需确保全局唯一不会重复 - 交互事件要求3秒内必须给出响应,否则会提示交互失败,如果你的函数执行耗时较长,可以先调用
await interaction.defer()挂起响应,执行完成后再用await interaction.followup.send()返回结果 - 所有异步函数调用时必须加
await关键字
内容的提问来源于stack exchange,提问作者PoJIY_cJIaDeHbKuU
相关产品推荐
相关产品推荐

