对于我的机器人,我想实现随机游戏(比如掷硬币),以及在上面的投注系统。 例如,任何人都可以使用//抛硬币,机器人会回答“正面”或“反面”,但如果命令是//下注15抛硬币,机器人也会回答“正面”或“反面”,但也会在“祝贺你赢了X”或“你输了赌注”之后说
@commands.command()
async def coin_toss(self, ctx: Context):
outcomes = ("Heads", "Tails")
result = outcomes[random.randint(0,1)]
await ctx.reply(result)
return result
问题是,我希望//coin\u toss命令没有可通过调用该命令传递的参数,但我仍然希望在通过self调用该命令时传递参数。这也适用于调用self.coin\u toss
command: Command = utils.get(self.get_commands(), name=game_name)
result = await command(ctx, amount_to_bet)
目前,我使用*args“收集”用户试图传递的所有参数,但我不知道在通过通道中的消息调用命令时是否可以绕过这些参数
@commands.command(aliases=["pile_ou_face", "pof"])
@has_user_role_from_config()
async def coin_toss(self, ctx: Context, *args, amount_to_bet: float = 0):
outcomes = ("Heads", "Tails")
result = outcomes[random.randint(0,1)]
await ctx.reply(result)
return result
有办法吗?如果您想要更精确,请随时发表评论
我不确定这是否回答了您关于隐藏discord命令的参数的问题,但我认为这可能会让您了解如何在不需要进行太多参数解析的情况下在其他游戏命令中实现
bet
命令我有两个建议。将抛硬币视为下注功能的子例程,或实现抛硬币功能的共享逻辑实现
投币作为下注的一个子程序
我这里有一个模拟的
get_commands
和utils.get(self.get_commands(), name=value)
函数,因此请更新bet
实现以反映函数的实际执行情况。为了便于测试,我也在类之外做了这项工作,但请进行必要的更改,将此代码合并到您当前的实现中这种方法的缺点是延迟。您实际上发送了两个单独的回复,一个来自
coin_toss
函数,另一个来自bet
。这可能会造成延迟的用户体验抛硬币与共享逻辑实现
这种实现的好处是消息之间的延迟更少,但是,由于您有两个基本上都映射到同一名称的独立函数,因此需要做更多的工作
相关问题 更多 >
编程相关推荐