userRoles === '',`${HaveOrNotAdmRole.id}`выражение1, выражение2, выражение3, выражениеN, вернётся только последнее - выражениеN'' игнорируется, и возвращается только `${HaveOrNotAdmRole.id}`userRoles === `${HaveOrNotAdmRole.id}`userRoles—массив, `${HaveOrNotAdmRole.id}` — строка.=== не происходит преобразование типов к одному, такое сравнение как у вас ВСЕГДА вернёт false, сам if НИКОГДА не сработает, вы сравниваете яблоко с табуреткой
`|${interaction.user.username}`
|и ┃ имеют разный юникод, поэтому бот не может найти канал.`\u2503${interaction.user.username}`
undefined.
let channel = interaction.guild.channels.cache
.find(channel => channel.name === "категория" && channel.type === "GUILD_CATEGORY")
?.children
.find(channel => channel.name === "канал").children - это коллекция, и ChannelType.Category ещё нету.
Сама ошибка:
ReferenceError: ComponentType is not defined
ComponentType не может сам себя объявить в коде, его нужно было импортировать из библиотеки, в самом начале кода const { ComponentType, все остальное } = require("discord.js")console.log(test) // ReferenceError: test is not defined (компилятор не понимает, что такое test, потому что он не был объявлен в коде)
let test = 55;
console.log(test) // 55 (всё нормально, переменная test существует)
- const member = interaction.options.getMember(target);
+ const member = interaction.options.getMember("target");
- const role = interaction.options.getRole('1075876710832152616');
+ const role = interaction.guild.roles.cache.get("1075876710832152616")
const row = new ActionRowBuilder()
.addComponents(
new ButtonBuilder()
.setCustomId('row_0_button_0') // ***
.setLabel('Забанить')
.setEmoji(``)
.setStyle(ButtonStyle.Danger),
new ButtonBuilder()
.setCustomId('row_0_button_1') // ***
.setLabel('Разбанить')
.setEmoji(``)
.setStyle(ButtonStyle.Success),
new ButtonBuilder()
.setCustomId('row_0_button_4') // ***
.setLabel('Мут')
.setEmoji(``)
.setStyle(ButtonStyle.Danger),
new ButtonBuilder()
.setCustomId('row_0_button_5') // ***
.setLabel('Размут')
.setEmoji(``)
.setStyle(ButtonStyle.Success),
);row_0_button_5if (i.customId === "row_0_button_5") { ... }
slice, чтоindexOf- это строковые методы, они возвращают определенные значения.исходя из этого, логично, что если, например, в
console.log()вставитьstr.indexOf(...)илиstr.slice(...), то что-то появится в консоли.также мы можем вставить один метод в другой:
языком допускаются такие конструкции, здесь нет ничего необычного или нетривиального.
стрелочную функцию тоже можно засунуть в
.slice()(с условием, что она что-то вернёт), но в этом попросту нету смысла, если функция выполняет одно простое действие.к примеру, смысл был бы от такого выражения:
и нужно постоянно смотреть, что именно ожидают методы в качестве своих аргументов.
если зайти на MDN Web Docs: https://developer.mozilla.org/en-US/docs/Web/JavaS...
...можно увидеть описание метода
.slice(), к примеру, и там написано в секции "Parameters", что ожидает методslice.