You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.py开发时如何判断on_message事件收到的message.content是否为数字

实现方案

你可以直接使用Python字符串内置的isdigit()方法检测内容是否为正整数,完全匹配计数游戏的使用场景。另外注意你当前代码将counter定义在on_message事件内部,每次事件触发都会被重置为1,无法实现计数累加效果,需要将变量移到事件外部定义。

修改后完整代码如下:

# counter定义在事件外部,作为全局变量保存计数进度
counter = 1

@client.event
async def on_message(message):
    global counter
    # 仅处理指定频道的非机器人消息
    if message.channel.id == 895739649425825803 and not message.author.bot:
        # 优先判断是否为纯数字,非数字直接重置
        if not message.content.isdigit():
            await message.add_reaction("❌")
            counter = 1
            return
        # 转为整数后和当前计数对比
        input_num = int(message.content)
        if input_num == counter:
            await message.add_reaction("✅")
            counter += 1
            print(counter)
        else:
            await message.add_reaction("❌")
            counter = 1

逻辑说明

  • 优先校验消息内容是否为纯正整数,非数字内容直接添加❌反应,重置counter后终止后续判断
  • 确认是数字后转换为整数类型,和当前counter值对比:匹配则添加✅反应,counter自增1;不匹配则添加❌反应,重置counter为1

如果你后续需要支持负数、小数的校验场景,可以用异常捕获逻辑实现:

def is_number(content):
    try:
        # 可根据需求替换为int()仅校验整数
        float(content)
        return True
    except ValueError:
        return False

内容的提问来源于stack exchange,提问作者Georgi Koynov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 17:45:00