首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Disnake -机器人能调用斜杠命令吗?

Disnake -机器人能调用斜杠命令吗?
EN

Stack Overflow用户
提问于 2022-07-20 19:46:24
回答 1查看 203关注 0票数 1

我有一个简单的游戏在disnake发布消息时,一个频道播放。在消息的末尾,我想添加一个“再次播放”按钮。游戏最初是由斜杠命令开始的。当单击“再次播放”按钮时,我希望机器人调用重新启动游戏的斜杠命令。这个是可能的吗?

在discord.py中,调用常规命令非常简单,如下所示:

代码语言:javascript
复制
await ctx.invoke(self.bot.get_command('my_command'))

但是,MessageInteraction对象没有“调用”方法,也就是说,以下内容无法工作:

代码语言:javascript
复制
await interaction.invoke(self.bot.get_command('my_slash_command'))

编辑:我想最明显的解决方法是将整个游戏打包成一个函数,然后在斜杠命令和按钮回调中调用相同的函数(以避免重复代码)。这是否一个更好的方法来实现这一点?一般来说,交互处理应该总是封装在函数中吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-21 01:23:39

解释

ctx.invoke所做的就是调用命令的函数,就好像它是一个常规函数一样。例如,await ctx.invoke(self.bot.get_command("my_command"))实际上与我的await my_command(ctx)相同(如果定义命令时,它的回调是一个具有相同名称的函数,并且该函数在作用域中)。

因此,我们可以对交互和bot.get_slash_command做同样的事情。

代码

代码语言:javascript
复制
@bot.slash_command(description="print button")
async def print_button(interaction):
    await interaction.send("gaming", components=[disnake.ui.Button(label="Play again")])
    await bot.wait_for("button_click", check=lambda i: (i.component and i.component.label == "Play again"))
    await bot.get_slash_command("print_button").callback(interaction)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73057373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档