如何添加超时,python discord bot

Posted

技术标签:

【中文标题】如何添加超时,python discord bot【英文标题】:How to add timeout, python discord bot 【发布时间】:2021-05-17 03:42:12 【问题描述】:

我猜了discord bot中的角色游戏,(见下面的代码)。 我想为玩家添加 30 秒的超时响应,但我完全不知道该怎么做,有什么帮助吗?

@client.command()
async def game(ctx):

    chosen_image = random.choice(embedlinks.bnhaLinks)
    channel = ctx.channel

    index = embedlinks.bnhaLinks.index(chosen_image)
    embed = discord.Embed(color=0x999999)
    embed.set_image(url=chosen_image)
    embed.set_footer(text=f"You have 30 seconds to guess this MHA character")

    await ctx.send(embed=embed)

    def check(msg):
        return msg.author == ctx.author and msg.channel == ctx.channel
    
    
    user_guess = (await client.wait_for('message', check=check)).content
    
    if user_guess == embedlinks.bnhaChars[index]:
        await ctx.send('Correct. Good job.')
    elif user_guess is not embedlinks.bnhaChars[index]:
        await ctx.send('Wrong. Start a new game.')```

【问题讨论】:

【参考方案1】:

您应该在wait_for 中添加timeout = seconds 条件

@client.command()
async def game(ctx):

chosen_image = random.choice(embedlinks.bnhaLinks)
channel = ctx.channel

index = embedlinks.bnhaLinks.index(chosen_image)
embed = discord.Embed(color=0x999999)
embed.set_image(url=chosen_image)
embed.set_footer(text=f"You have 30 seconds to guess this MHA character")

await ctx.send(embed=embed)

def check(msg):
    return msg.author == ctx.author and msg.channel == ctx.channel


user_guess = (await client.wait_for(timeout = 30, 'message', check=check)).content
 if user_guess == embedlinks.bnhaChars[index]:
    await ctx.send('Correct. Good job.')
 elif user_guess is not embedlinks.bnhaChars[index]:  #put this if you want user to guess only once and not multiple times
    await ctx.send('Wrong. Start a new game.')```


@game.error
async def on_error(self, ctx, error):
    if isinstance(error, commands.CommandInvokeError):
        await ctx.send("Time is up!")

【讨论】:

当超时时间用完我得到这个错误:i.ibb.co/vhXLGHW/carbon-6.png 您是否添加了 try 和除了我在您的代码中添加的内容? 实际上,如果你为这个东西创建一个命令处理程序,它也可以工作。我将编辑我的原始答案 部分起作用了,我不得不在 await ctx.send('Wrong. Start a new game.') 下添加:except asyncio.TimeoutError: await ctx.send(embed=basicEmbedx),但是现在当人们没有猜到角色正确的消息时说:时间到了!这是代码图片:i.ibb.co/x1BZWmJ/carbon-7.png 删除 tryexceptasyncio.TimeoutError 并将 is not 替换为 != 错误处理程序应该足以让我知道是否可以修复它!【参考方案2】:

如果你的意思是冷却时间,那么已经有一个good question and answer。

基本上,您所要做的就是稍微修改命令的开头部分。在@client.command() 之后附加@commands.cooldown(1, 30, commands.BucketType.user) 行。如需更多信息,请查看上面的链接。

【讨论】:

我的意思是让玩家有时间回答一个机器人,但还是谢谢你。

以上是关于如何添加超时,python discord bot的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 aiohttp 制作 reddit discord bot

Python Discord Bot:如何与用户交互?

如何向 discord.js bot v12 添加验证

如何添加播放标签 discord bot heroku

Discord Bot Python 2.6(如何通过嵌入造句)

如何在 python discord bot 中获取用户输入?