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

Discord机器人?weight命令报错‘weight未定义’问题求助

问题原因及解决方法

核心问题1:命令未注册

你定义了weight_command函数,但未通过装饰器告知Discord.py这是一个可触发的命令,导致bot无法识别?weight指令。

核心问题2:混乱的on_message事件处理

代码存在多处on_message定义错误:

  • 一个未添加@bot.event装饰器的普通函数,无法被bot触发
  • 嵌套在其他函数内的@bot.event装饰器写法无效,会覆盖正常事件逻辑
  • 日志打印相关变量(username、user_message等)缩进错误,不在函数作用域内

修复后的完整代码

import os
from dotenv import load_dotenv
import random

import discord
from discord.ext import commands
from discord import Message

load_dotenv()

DISCORD_TOKEN = os.getenv('DISCORD_TOKEN')
intents = discord.Intents.default()
intents.message_content = True

bot = commands.Bot(command_prefix='?', intents=intents)

def get_response(user_input: str) -> str:
    lowered_input = user_input.lower()

    if user_input != lowered_input:
        return "LOWERCASE ONLY -100000 Aura, +100000000 pounds."
    return ""

@bot.event
async def on_ready() -> None:
    print(f'{bot.user} is now running')

@bot.event
async def on_message(message: Message):
    if message.author == bot.user:
        return
    
    response = get_response(message.content)
    if response:
        await message.channel.send(response)
    
    # 打印消息日志
    username = str(message.author)
    user_message = message.content
    channel = str(message.channel)
    print(f'[{channel}] {username}: "{user_message}"')
    
    # 必须调用此方法才能处理命令
    await bot.process_commands(message)

@bot.command(name='weight')
async def weight_command(ctx):
    weight = random.randint(150, 1000000)
    await ctx.send(f"Your weight is {weight} pounds.")

if __name__ == '__main__':
    bot.run(DISCORD_TOKEN)

关键修复点说明

  • 给weight_command添加@bot.command(name='weight')装饰器,明确绑定?weight命令
  • 重构on_message事件:仅保留一个带@bot.event装饰器的函数,将日志逻辑移至正确作用域,确保bot.process_commands(message)被调用(这是命令能被识别的核心)
  • 清理无用变量(如get_response内未使用的weight),优化返回逻辑
  • 修正缩进错误,确保所有代码块处于正确作用域

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 07:52:35