使 /afk 命令在 python 中接受数字而不是字母

Posted

技术标签:

【中文标题】使 /afk 命令在 python 中接受数字而不是字母【英文标题】:Make /afk command accept numbers not letters in python 【发布时间】:2021-04-11 21:37:04 【问题描述】:

我希望当有人执行 /AFK 并写字母而不是数字时,它应该显示类似“输入数字而不是字母”的内容。这是我的代码:

async def afk(ctx, mins : int):
    current_nick = ctx.author.nick
    await ctx.send(f"ctx.author.mention has gone afk for mins minutes.", delete_after=5)
    await ctx.author.edit(nick=f"[AFK]ctx.author.name")

    counter = 0
    while counter <= int(mins):
        counter += 1
        await asyncio.sleep(60)

        if counter == int(mins):
            await ctx.author.edit(nick=current_nick)
            await ctx.send(f"ctx.author.mention is no longer AFK", delete_after=5)
            break```

【问题讨论】:

【参考方案1】:

你需要去掉 typehint 然后使用 try/except

async def afk(ctx, mins):
    try:
        mins = int(mins)
    except ValueError:
        return await ctx.send("input numbers not letters")
    # your other code

【讨论】:

【参考方案2】:

试试这个:

async def afk(ctx, mins : int):
    try:
        mins = int(mins)
    except ValueError:
        # ...
        # <send the message here.>
        # ...
        return

    current_nick = ctx.author.nick
    await ctx.send(f"ctx.author.mention has gone afk for mins minutes.", delete_after=5)
    await ctx.author.edit(nick=f"[AFK]ctx.author.name")

    asyncio.sleep(60 * mins)

    await ctx.author.edit(nick=current_nick)
    await ctx.send(f"ctx.author.mention is no longer AFK", delete_after=5)

在这里,我们尝试将 mins 转换为 int,如果失败,则发送消息。否则,照常继续。我认为您也可以像我在这里所做的那样删除 while 循环和 if 语句。

【讨论】:

它不起作用,如果他们执行 /afk bruh,我的代码曾经显示为“有人在 bruh 时刻陷入困境”,但使用您的代码它不会向某些人发送任何消息原因。如何发送消息?我做了await ctx.send('Please use numbers.') 这是错的吗?【参考方案3】:

一般我同意@Poojan's answer,但有一种比try/except 更简单的方法:

async def afk(ctx, mins):
    if not mins.isdigit():
        return await ctx.send("input numbers not letters")
    mins = int(mins)

【讨论】:

以上是关于使 /afk 命令在 python 中接受数字而不是字母的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 AFK 通道的“空”输出

AFK 命令不和谐 (JDA)

Discord.py AFK 命令

如果有人 ping 一个处于 AFK 状态的成员,它会发送一条消息 | Discord.js / mongodb

如何使 Pyqt5 QLineEdit 只接受数字

使 SqlDataAdapter/Datareader “真正只读”