Не меняется статус бота, кто-нибудь подскажет, в чем может быть проблема? Значение переменной "статусы" является статусом, но не меняет статус. Если я напишу client.user.setStatus('dnd'); работать можно, но так в этом случае особого смысла нет
статус.js
const { SlashCommandBuilder, ActionRowBuilder, SelectMenuBuilder } = require('discord.js');
module.exports = {
data: new SlashCommandBuilder()
.setName('status')
.setDescription('Set status'),
async execute(interaction, client) {
const actionRow = new ActionRowBuilder()
.addComponents(
new SelectMenuBuilder()
.setCustomId('set-status')
.setPlaceholder('Nothing is selected.')
.setMinValues(1)
.setMaxValues(1)
.addOptions([
{
label: `online`,
description: `Online status.`,
value: `online`
},
{
label: `idle`,
description: `Idle status.`,
value: `idle`
},
{
label: `dnd`,
description: `Do Not Disturb status.`,
value: `dnd`
},
{
label: `invisible`,
description: `Invisible status.`,
value: `invisible`
},
])
);
await interaction.reply({ content: `Status? `, components: [actionRow] });
},
};
взаимодействиеCreate.js
} else if (interaction.isSelectMenu()) {
if (interaction.customId == "set-status") {
let statuses = "";
await interaction.values.forEach(async value => {
statuses += `${value} `
});
client.user.setStatus(statuses);
const message = await interaction.deferReply({
fetchReply: true
});
const newMessage = `Status: ${statuses}`
await interaction.editReply({
content: newMessage
});
}
}
},
};
Благодарю вас!
Я думаю, что addOptions теперь принимает бесконечное количество параметров, а не массив
@Elitezen по-прежнему принимает массив, так что здесь это не проблема.
Я не уверен, что вы хотите сделать с этим циклом interaction.values.forEach
, но он вам не нужен. Кроме того, когда вы создаете новый массив с элементами массива statuses += `${value} `
, вы добавляете дополнительный пробел в имени статуса, чтобы они стали чем-то вроде "dnd "
или "idle "
.
interaction.values
возвращает массив с одним значением, значением выбранного пункта меню. Вы можете просто использовать interaction.values[0]
в своем setStatus()
.
Я только что проверил, и следующее работает, как и ожидалось:
if (interaction.isSelectMenu()) {
if (interaction.customId == 'set-status') {
let status = interaction.values[0];
client.user.setStatus(status);
await interaction.editReply({
content: `Status updated to _"${status}"_`,
components: [],
});
}
}
Чего вы хотите добиться с помощью
await interaction.values.forEach(async value => { statuses += `${value} `})
.interaction.values
— это массив с одним элементом, и вы также добавляете туда дополнительный пробел, так что это будет что-то вроде"dnd "
или"idle "