Discord机器人DM命令发送消息仅显示单个词的修复求助
DM命令内容不完整故障修复指南
根因定位
当前命令的参数定义不符合discord.py前缀命令的解析规则:定义为message=None的普通参数,只会匹配用户输入中第一个空格分隔的文本片段,后续带空格的完整消息内容会被解析器直接丢弃,最终导致接收方只能收到单个词语。
修复操作点
- 修改
message参数的收集规则,在参数前加*标记,让解析器将目标用户之后的所有输入文本作为整体赋值给message变量,不会按空格拆分内容,即修改为*, message: str = None - 补全空内容兜底逻辑:如果用户调用命令时没有附带任何私信文本,直接提示调用者补全内容,避免发送空私信
- 修正原提示文本的拼写错误:原代码中
recieved为拼写错误,正确拼写为received
修复后可正常运行的代码参考
@client.command(pass_context=True) @commands.cooldown(1, 10, commands.BucketType.user) async def dm(ctx, target: discord.User, *, message: str = None): # 空消息校验 if not message: await ctx.send("❌ 请在指令后补充需要发送的完整私信内容") return await target.send(message) await ctx.send( "{0} 已收到你的消息,{1} :envelope:".format(target.mention, ctx.author.mention) )
异常适配补充(可选)
- 增加发送私信的异常捕获逻辑:如果目标用户关闭了陌生人私信、屏蔽了机器人,直接给命令调用者返回提示,避免机器人运行崩溃
- 可以加个权限校验,禁止普通用户给机器人所有者发恶意私信
内容的提问来源于stack exchange,提问作者Steve522
相关产品推荐
相关产品推荐

