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
相关产品推荐
相关产品推荐

