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

discord.py运行报错Message对象无法被解释为整数问题求助

问题修复说明

错误原因

  • 你在create命令内部嵌套定义了多个on_message事件,discord.py的on_message是全局事件监听器,后定义的会直接覆盖之前的声明,完全不符合多步收集用户输入的使用场景。
  • on_message事件的入参永远是Message类型对象,你给参数加的time:int类型标注没有实际转换效果,程序拿到的仍然是完整的消息实例,你直接把该对象传入range()方法,就触发了TypeError: 'Message' object cannot be interpreted as an integer报错。
  • 你的测试代码直接传入整数给range,当然可以正常运行,但实际场景没有提取用户输入的文本内容转成整数,自然报错。

正确实现方案

使用discord.py内置的wait_for方法等待特定用户的回复,不会污染全局事件,代码如下:

import os
from dotenv import load_dotenv
from discord.ext import commands

TOKEN = 'my token here'

client = commands.Bot(command_prefix="'", description='Hey, I\'m MyBot')

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))

@client.command()
async def create(ctx):
    if ctx.author == client.user:
        return

    # 询问事件名称
    await ctx.send('What is the name for your event: ')
    # 等待当前触发命令的用户回复,超时时间设为30秒可以按需调整
    name_msg = await client.wait_for('message', check=lambda m: m.author == ctx.author and m.channel == ctx.channel, timeout=30)
    event_name = name_msg.content

    # 询问提醒时间
    await ctx.send('When you want to be reminded (input number): ')
    time_msg = await client.wait_for('message', check=lambda m: m.author == ctx.author and m.channel == ctx.channel, timeout=30)
    # 提取消息内容转成整数,加异常处理避免用户输入非数字的情况
    try:
        remind_time = int(time_msg.content)
    except ValueError:
        await ctx.send("Please input a valid number")
        return

    # 你的循环逻辑
    for x in range(remind_time):
        await ctx.send(x)
    await ctx.send(f"Event {event_name} created successfully")

@client.event
async def on_message(message):
    await client.process_commands(message)
    username = str(message.author).split('#')[0]
    user_message = str(message.content)
    channel = str(message.channel.name)
    print(f'{username}:{user_message} ({channel})')   

    if message.author == client.user:
        return

client.run(TOKEN)

补充说明

  • 代码中加了30秒超时限制,你可以按需调整,也可以加异常处理捕获超时情况。
  • 新增了用户输入非数字的异常处理,避免程序异常退出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:15:02