Discord.Net发送空消息而非Embed嵌入消息问题求助
解决Discord Whois命令返回空消息的问题
以下是针对你代码问题的排查和修复方案:
处理空角色列表场景
若目标用户没有任何自定义角色(仅默认@everyone),roleList会是空字符串,导致Embed描述为空,Discord可能因此显示异常消息。给描述添加默认值:var roleList = string.Join(",\n", guildUser.Roles.Where(x => !x.IsEveryone).Select(x => x.Mention)) ?? "无自定义角色";验证命令参数有效性
确保正确获取到用户参数,避免因参数缺失或类型错误导致后续逻辑失败:var optionValue = command.Data.Options.FirstOrDefault()?.Value; if (optionValue is not SocketGuildUser guildUser) { await command.RespondAsync("请指定有效的服务器用户!", ephemeral: true); return; }检查机器人权限
确认机器人在当前服务器拥有以下权限:- 发送消息
- 嵌入链接
- 查看成员
缺少权限会导致无法获取角色信息或发送Embed。
添加异常捕获排查错误
加入异常捕获逻辑,快速定位隐藏问题:public static async Task Whois(SocketSlashCommand command) { try { var optionValue = command.Data.Options.FirstOrDefault()?.Value; if (optionValue is not SocketGuildUser guildUser) { await command.RespondAsync("请指定有效的服务器用户!", ephemeral: true); return; } var roleList = string.Join(",\n", guildUser.Roles.Where(x => !x.IsEveryone).Select(x => x.Mention)) ?? "无自定义角色"; var embedBuilder = new EmbedBuilder() .WithAuthor(guildUser.ToString(), guildUser.GetAvatarUrl() ?? guildUser.GetDefaultAvatarUrl()) .WithTitle("角色列表") .WithDescription(roleList) .WithColor(Color.Green) .WithCurrentTimestamp(); await command.RespondAsync(embed: embedBuilder.Build()); } catch (Exception ex) { await command.RespondAsync($"发生错误:{ex.Message}", ephemeral: true); Console.WriteLine(ex.ToString()); // 日志记录详细异常 } }
内容的提问来源于stack exchange,提问作者ماهان نوروزی
相关产品推荐
相关产品推荐

