繁体   English   中英

如何使漫游器说由变量而不是回复命令激活的消息?

[英]How do I make a bot say a message activated by a variable rather than a reply command?

我正在尝试制作一个Trivia机器人,它具有一个命令,可在30秒内从30-1倒数。 当达到1时,我不知道如何在不和谐的聊天中说些什么。

我已经尝试过浏览API。

questionTimer = 30

#while questionTimer > 1:
  #questionTimer = questionTimer - 1
  #time.sleep(1)
  #print (questionTimer)

我希望当questionTimer = 1时它可以在聊天中说Times up

如果您希望它打印出每个数字,您可以执行以下操作

@client.command()
async def quiz():
  seconds = 30
  while seconds > 0:
    await client.say(seconds)
    await asyncio.sleep(1)
    seconds-=1

  await client.say("Done")

但是,如果您只想等待30秒然后显示一条消息,则可以执行以下操作

@client.command()
async def quiz():
  await asyncio.sleep(30)
  await client.say("Done")

根据您使用的是Discord.py的重写版本还是旧的异步版本,我建议以下内容:

Discord.py异步(0.16.x):

@client.event
async def on_message(self, message):
    if message.content.startswith('!quiz'):
        quizMsg = 'Question of the quiz'
        msg = await client.say(f"{quizMsg}\n\n{secs}s left !")
        secs = 30
        while secs > 0:
            await asyncio.sleep(1)
            await client.edit_message(msg, f"{quizMsg}\n\n{secs}s left !")
            secs--
        await client.say("Time is up ! The answer was...")

Discord.py重写(1.0.x):

@commands.command(name="quiz", aliases=["q"])
async def quiz():
    quizMsg = 'Question of the quiz'
    msg = await ctx.send(f"{quizMsg}\n\n{secs}s left !")
    secs = 30
    while secs > 0:
        await asyncio.sleep(1)
        await msg.edit(content = f"{quizMsg}\n\n{secs}s left !")
        secs--
    await ctx.send("Time is up ! The answer was...")

注意两种方法之间的区别

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM