英文:
How can i make this discord.js v14 slash command not return "undefined" for each option?
问题
这个命令的想法是将用户添加到包含客户信息的.txt文件中,以便其他部分的机器人可以使用它。
问题是无论我在这里弹出的选项中放入什么,都会始终返回像这样的“undefined”。
它将始终返回每个选项的“undefined”,就像这样。
我认为问题在于在执行函数中请求该信息时,它实际上并没有返回任何内容。但我不太确定为什么会这样。
以下是相关代码。
const { SlashCommandBuilder } = require('discord.js');
const fs = require('fs');
module.exports = {
data: new SlashCommandBuilder()
// 命令名称
.setName('addfrozencustomer')
// 命令描述
.setDescription('添加冻结客户帐户/ Discord')
.addStringOption(option =>
option.setName('id')
.setDescription('客户的ID')
.setRequired(true))
.addStringOption(option =>
option.setName('username')
.setDescription('客户的用户名')
.setRequired(true))
.addStringOption(option =>
option.setName('email')
.setDescription('客户的电子邮件')
.setRequired(true)),
async execute(interaction) {
const { id, username, email } = interaction.options;
const data = `${id}:::${username}:::${email}`;
fs.appendFile('users/frozencustomers.txt', `${data}\n`, (error) => {
if (error) {
console.error(error);
return;
}
console.log('数据已成功写入文件。');
});
interaction.channel.send(`成功添加冻结客户:\n ID: ${id}\n 用户名: ${username}\n 电子邮件: ${email}`);
}
};
我尝试的一切中,上面的代码是我最接近预期工作的。
英文:
The idea of this command is to add a user to the .txt file full of customers info so it can be used by other parts of the bot.
The problem is no matter what i put into the options that pop up here
it will always return "undefined" for each option like so.
i think the issue is its not actually returning anything from the interaction when asking for that information inside the execute function. im not quite sure why though.
here is the code in question.
const { SlashCommandBuilder } = require('discord.js');
const fs = require('fs');
module.exports = {
data: new SlashCommandBuilder()
// command name
.setName('addfrozencustomer')
// command description
.setDescription('Add a frozen customer account/discord')
.addStringOption(option =>
option.setName('id')
.setDescription('The ID of the customer')
.setRequired(true))
.addStringOption(option =>
option.setName('username')
.setDescription('The username of the customer')
.setRequired(true))
.addStringOption(option =>
option.setName('email')
.setDescription('The email of the customer')
.setRequired(true)),
async execute(interaction) {
const { id, username, email } = interaction.options;
const data = `${id}:::${username}:::${email}`;
fs.appendFile('users/frozencustomers.txt', `${data}\n`, (error) => {
if (error) {
console.error(error);
return;
}
console.log('The data was successfully written to the file.');
});
interaction.channel.send(`Successfully added frozen customer:\n ID: ${id}\n User: ${username}\n Email: ${email}`);
}
};
Out of everything i have tried the code above is the closest iv come to getting this to work as intended.
答案1
得分: 0
你不能直接从interaction.options对象中获取交互选项的值,它有单独的方法来获取每种类型的值,在你的情况下:
const
username = interaction.options.getString("username"),
id = interaction.options.getString("id"),
email = interaction.options.getString("email")
你可以在这里阅读更多相关信息:https://discordjs.guide/slash-commands/parsing-options.html#command-options
英文:
You can't grab interaction options values directly from the interaction.options object, it has seperate methods to grab each type of value, in your case:
<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-js -->
const
username = interaction.options.getString("username"),
id = interaction.options.getString("id"),
email = interaction.options.getString("email")
<!-- end snippet -->
You can read more about this here: https://discordjs.guide/slash-commands/parsing-options.html#command-options
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论