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

使用discord.py开发+ping@成员发DM命令报错AttributeError如何修复

错误原因

你当前代码中的dm_member是通过字符串替换得到的str类型对象,Discord库仅对封装的Member/User对象提供send私信方法,原生字符串没有该属性,因此触发报错。

修复方案

直接从消息对象自带的mentions属性获取被@的成员对象即可,无需手动切割处理消息文本,修复后代码如下:

if message.content.startswith('+ping'):
    # 校验是否有@成员,避免索引报错
    if not message.mentions:
        await message.channel.send("使用指令时请@需要ping的成员")
        return
    # 取第一个被@的成员作为私信接收方
    dm_member = message.mentions[0]
    pinger = message.author
    await dm_member.send('You got pinged by:')
    await dm_member.send(pinger)

优化建议

可以增加异常捕获处理,避免被@用户关闭陌生人私信时触发新报错:

if message.content.startswith('+ping'):
    if not message.mentions:
        await message.channel.send("使用指令时请@需要ping的成员")
        return
    dm_member = message.mentions[0]
    pinger = message.author
    try:
        await dm_member.send('You got pinged by:')
        await dm_member.send(pinger)
    except discord.Forbidden:
        await message.channel.send("无法向该用户发送私信,对方可能关闭了陌生人私信权限")

内容的提问来源于stack exchange,提问作者neur0n-7

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:24:04