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

求助:Discord机器人!dm指令无法创建指定用户DM频道

Discord机器人!dm指令故障修复

代码里的核心问题

  • 变量引用错误:你把message.content赋值给msg后,又写了msg.content——msg本身就是字符串,没有.content属性,这会直接触发报错,导致指令逻辑根本跑不起来。
  • 硬编码目标用户:调用create_dm('user')时用了固定字符串,既没从指令里提取真实目标,而且Discord.py里根本没有全局的create_dm()函数——创建DM必须调用用户对象的create_dm()方法。
  • 缺少参数解析:!dm指令需要指定目标用户,但你没处理指令后的用户标识(比如@提及、ID)。

修复后的代码

@client.event
async def on_message(message):
    msg = message.content
    if msg.startswith("!dm"):
        # 拆分指令,获取用户参数
        command_parts = msg.split()
        if len(command_parts) < 2:
            await message.channel.send("格式错误,请使用:!dm @目标用户")
            return
        
        # 优先处理@提及的用户
        target_user = message.mentions[0] if message.mentions else None
        if not target_user:
            # 尝试通过用户名查找(注意服务器内可能有重名用户)
            target_username = command_parts[1]
            matching_users = [user for user in message.guild.members if user.name == target_username]
            if not matching_users:
                await message.channel.send(f"未找到名为{target_username}的用户")
                return
            target_user = matching_users[0]
        
        # 创建DM频道并发送测试消息
        dm_channel = await target_user.create_dm()
        await dm_channel.send("这是机器人发来的DM!")

关键修复说明

  1. 修正了msg.content的错误引用,直接用msg.startswith判断指令前缀。
  2. 增加了参数校验和错误提示,避免用户输入不完整的指令。
  3. 使用Discord.py官方的user.create_dm()方法创建DM频道,这是正确的API调用方式。
  4. 支持两种用户指定方式:@提及用户名,或直接输入用户名(重名时取第一个匹配项)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:01:12