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

Discord.py封装DM通知函数报错:'msg'未定义,求解决方案

问题解决:'msg' is not defined 报错修复

核心报错原因

报错'msg' is not defined通常来自两个场景:

  • on_message函数未正确注册为事件,导致手动调用时未传入msg参数
  • 有代码在on_message函数的作用域外部(或错误缩进层级)引用了msg变量

修复步骤

1. 正确注册on_message事件

你的on_message函数缺少Discord.py的事件装饰器,框架无法自动触发它,若手动调用时忘记传msg参数就会报错。给函数添加装饰器:

@bot.event  # 注意:这里的`bot`要和你初始化机器人时用的变量名一致,比如如果用`client = commands.Bot(...)`就改成@client.event
async def on_message(msg):
    # 你的权限检查等其他逻辑
    await dm(
        msg.author.id,
        "我没有权限修改这个昵称!",
        "我没有权限修改这个昵称!(无法给你发送私信,请检查你的隐私设置)",
        msg.channel
    )

2. 检查msg的作用域

确认所有使用msg的代码都在on_message函数的缩进块内,不能有代码脱离函数引用msg。比如你省略的权限检查逻辑,必须和await dm(...)处在同一缩进层级。

3. 优化dm函数(可选,提升效率)

可以直接传入msg.author用户对象,避免重复调用fetch_user,让代码更高效:

async def dm(user, dm_content, server_content, channel):
    try:
        await user.send(dm_content)
    except discord.Forbidden:
        await channel.send(server_content)

# 在on_message中调用
await dm(
    msg.author,
    "我没有权限修改这个昵称!",
    "我没有权限修改这个昵称!(无法给你发送私信,请检查你的隐私设置)",
    msg.channel
)

额外注意事项

  • 确保机器人拥有发送私信和频道消息的权限
  • 检查用户的隐私设置,避免因用户关闭私信导致的Forbidden异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:48:26