如何创建可与其他用户交互的Discord斜杠命令?
解决Discord.js /hug斜杠命令的用户提及与随机Embed问题
你的代码存在几个核心问题,导致要么无响应要么报错,以下是具体修正方案:
问题分析
- 斜杠命令未添加目标用户参数,无法让用户选择要抱抱的对象
- 硬写的
{User} hugs {user}!没有实际替换成有效用户提及,字符串格式无效 - 未定义随机回复数组
reply和随机数randomNum,导致取值报错 - Embed标题与/hug场景不符
修正后的完整代码
const { SlashCommandBuilder, EmbedBuilder } = require('discord.js'); // 定义随机抱抱回复内容 const hugReplies = [ "温暖的拥抱!🥰", "给你一个大大的熊抱!🐻", "扑过去紧紧抱住!🤗", "轻轻抱了抱你~", "超治愈的抱抱送达!" ]; module.exports = { data: new SlashCommandBuilder() // Discord要求斜杠命令名必须小写 .setName("hug") .setDescription('给朋友一个抱抱!') // 添加必填的目标用户参数 .addUserOption(option => option.setName("target") .setDescription("要抱抱的用户") .setRequired(true)), async execute(interaction) { // 获取用户选择的目标对象 const targetUser = interaction.options.getUser("target"); // 生成随机回复索引 const randomNum = Math.floor(Math.random() * hugReplies.length); const randomReply = hugReplies[randomNum]; const embed = new EmbedBuilder() .setTitle(`${interaction.user.username} 发起了抱抱!`) .setColor(0x0099ff) // 用用户对象自动生成Discord可识别的@提及格式 .addFields([ { name: `${interaction.user} 抱抱了 ${targetUser}!`, value: randomReply } ]); await interaction.reply({ embeds: [embed] }); } };
关键修改说明
- 添加用户参数:通过
addUserOption添加必填的target参数,让用户能选择要抱抱的对象 - 正确提及用户:使用
interaction.user(发起命令的用户)和targetUser(目标用户)的默认toString()方法,自动生成Discord可识别的@提及格式 - 随机回复逻辑:定义
hugReplies数组存储随机内容,用Math.random()生成索引获取随机回复 - 规范命令名:Discord要求斜杠命令名必须小写,所以将原
Hug改为hug
内容的提问来源于stack exchange,提问作者SaberTheWolf
相关产品推荐
相关产品推荐

