本文详解如何在 Discord.js 项目中使用模板字符串和 message.author.username 正确获取并回复发送消息用户的用户名,解决初学者常见的变量不解析问题。
本文详解如何在 discord.js 项目中使用模板字符串和 `message.author.username` 正确获取并回复发送消息用户的用户名,解决初学者常见的变量不解析问题。
在 Discord.js 开发中,许多新手会遇到这样一个典型问题:想让机器人回复“Hello @用户名!”,却始终输出字面量如 hello ${message.author.username}!,而非实际用户名。这并非 API 调用错误,而是 JavaScript 字符串语法使用不当所致。
关键原因在于:只有反引号(` `)包裹的字符串才支持模板字面量(Template Literals),而单引号(' ')或双引号(" ")中的 ${...} 会被当作普通文本,不会被解析为变量。
✅ 正确写法(使用反引号 + message.author.username):
message.reply(`Hello ${message.author.username}!`);
// 示例输出:Hello Alice#1234!⚠️ 常见错误写法(导致变量不渲染):
message.reply('Hello ${message.author.username}!'); // ❌ 单引号 → 字面量
message.reply("Hello ${message.author.username}!"); // ❌ 双引号 → 字面量
message.reply(`Hello ${message.author}!`); // ❌ author 对象未转为字符串,可能输出 [object Object]? 补充说明:
- message.author.username 返回用户名(如 Alice),不含标签(#1234);
- 若需完整标识(用户名+四位数字标签),推荐使用 message.author.tag(返回 Alice#1234);
- message.author.displayName 可获取服务器内设置的昵称(优先于 username),适用于群组场景;
- 确保已启用 intents(如 IntentsBitField.Flags.Guilds, IntentsBitField.Flags.GuildMessages)并在 messageCreate 事件中处理消息。
? 最佳实践示例(含基础健壮性):
client.on('messageCreate', (message) => {
if (message.author.bot) return; // 忽略机器人自身消息
if (message.content === '!hello') {
message.reply(`Hi there, ${message.author.username}! ?`);
}
});总结:模板字符串是实现动态响应的基础语法,务必使用反引号;同时准确选用 username、tag 或 displayName 属性,可灵活适配不同交互需求。掌握这两点,即可稳定实现个性化用户问候。

















