Discord Bot无法提及@Scrim角色问题求助
修复Discord Bot角色提及无提醒问题
问题原因
你当前代码里直接把scrimRole对象拼进消息字符串,Discord不会把它解析成能触发用户提醒的角色提及,只会显示普通的角色名称文本。要让角色提及生效,必须用<@&角色ID>的格式,Discord才能识别并向对应角色的用户推送提醒。
修复方案
把消息中拼接角色的部分替换为scrimRole.toString()(Discord.js会自动生成标准的角色提及格式),或者手动拼接<@&${scrimRole.id}>,两种方式都能实现可提醒的角色提及效果。
修复后的完整代码
client.on('interactionCreate', async (interaction) => { if (!interaction.isCommand()) return; if (interaction.commandName === 'scrim') { if (interaction.channelId !== '1039877126205210625') { return interaction.reply('Hãy sử dụng lệnh này trong kênh <#1039877126205210625>.'); } const cooldownTime = 15 * 60 * 1000; // 15 phút const now = Date.now(); const lastUsage = scrimCooldowns.get(interaction.user.id); if (lastUsage && now - lastUsage < cooldownTime) { const remainingTime = (cooldownTime - (now - lastUsage)) / 1000; await interaction.reply(`Bạn cần đợi thêm ${remainingTime.toFixed(0)} giây trước khi sử dụng lệnh này.`); return; } scrimCooldowns.set(interaction.user.id, now); // Lấy nội dung tùy chọn từ interaction const Clan = interaction.options.getString('message') || 'Không có nội dung'; // Tìm và tag role "scrim" const scrimRole = interaction.guild.roles.cache.find(role => role.name === 'Scrim'); if (scrimRole) { // 使用toString()生成正确的角色提及格式 await interaction.reply(`Có clan đã yêu cầu 1 trận ${scrimRole.toString()} với nội dung: ${Clan}`); // 也可以手动拼接格式:await interaction.reply(`Có clan đã yêu cầu 1 trận <@&${scrimRole.id}> với nội dung: ${Clan}`); } else { await interaction.reply('Không tìm thấy role "Scrim".'); } } });
额外建议
- 为避免角色名称修改导致查找失败,建议直接通过角色ID获取角色,比如
interaction.guild.roles.cache.get('目标角色ID'),这种方式更稳定。 - 确保你的Bot拥有发送消息和提及角色的权限,否则即使格式正确也无法触发提醒。
内容的提问来源于stack exchange,提问作者triiducc
相关产品推荐
相关产品推荐

