求助: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!")
关键修复说明
- 修正了
msg.content的错误引用,直接用msg.startswith判断指令前缀。 - 增加了参数校验和错误提示,避免用户输入不完整的指令。
- 使用Discord.py官方的
user.create_dm()方法创建DM频道,这是正确的API调用方式。 - 支持两种用户指定方式:@提及用户名,或直接输入用户名(重名时取第一个匹配项)。
内容的提问来源于stack exchange,提问作者kawika ilac
相关产品推荐
相关产品推荐

