#javascript #node.js #discord #discord.js
Вопрос:
Я пытаюсь заставить свою команду say работать только для администраторов, но у меня проблемы с разрешениями. Вот мой код:
client.on("message", (message) => {
if (!message.member.hasPermission("ADMINISTRATOR")) return;
if (message.content.startsWith(prefix "say")) {
if (message.author.bot) return;
const SayMessage = message.content.slice(5).trim();
message.channel.send(SayMessage);
if (message.deletable) message.delete();
return;
}
});
Для меня это выглядит нормально, но консоль говорит об этом:
if(!message.member.hasPermission("ADMINISTRATOR")) return
^
TypeError: Cannot read property 'hasPermission' of null
Комментарии:
1. Была ли команда выполнена внутри Гильдии? (<Сообщение>.участник не определен, если сообщение исходит от DM.)
2. Если я правильно помню,
member
возвращает значение null, если сообщение было отправлено в DM. Попробуйте запустить это на сервере3. нет, это даже не работает, консоль показывает это сразу после запуска бота
4. Этот код находится внутри события сообщения, оно срабатывает только при отправке сообщения
Ответ №1:
Я думаю, что ваш бот получает сообщения dm от кого-то, как только он запускается… Попробуйте добавить это:
client.on("message", (message) => {
if(message.channel.type === 'dm') return;
Комментарии:
1. все еще не работает, может быть, мне следует опубликовать здесь свой полный код?
Ответ №2:
Функция проверки наличия у пользователя прав «АДМИНИСТРАТОР» есть message.member.permissions.has("ADMINISTRATOR")
, и вы ставите message.member.hasPermissions("ADMINISTRATOR")
… Вот в чем главная проблема.
client.on("message", (message) => {
if (message.content.startsWith(prefix "say")) {
if (!message.member.permissions.has("ADMINISTRATOR")) return; // Is permissions.has, and you put hasPermissions
// Rest of your code
}
});
Комментарии:
1.
GuildMember.hasPermission()
является полностью действительным. Вот что имеет в виду ОП в своем вопросе.2. В моем коде (hasPermissions) на самом деле не работает (с использованием v12), работают только разрешения.имеет
3. Потому что это не hasPermission s , а hasPermission…
4. Я хочу сказать «Отсрочка», извините
5. Проблема OP не
hasPermission()
в этом (что справедливо в версии 12). Проблема в том, чтоmessage.member
это значение равно нулю.