#node.js #discord #discord.js
#node.js #Discord #discord.js
Вопрос:
Поэтому я пытаюсь понять, как разрешить участникам общаться только один раз на определенном канале. Когда я использую .overwrite
команду, появляется ошибка с указанием:
client.overwritePermissions(
^ TypeError: client.overwritePermissions is not a function
Я также хочу, чтобы он работал только в одном канале, но мне в этом не повезло.
Вот остальная часть моего кода.
const Discord = require('discord.js');
const client = new Discord.Client();
const prefix = '';
let lastUser = undefined;
client.once('ready', () => {
console.log(`Logged in as ${client.user.tag}!`);
});
client.on('message', message => {
if (!message.content.startsWith(prefix) || message.author.bot) return;
lastUser = `${message.author}`
client.overwritePermissions(
lastUser,
{ 'SEND_MESSAGES': false },
)
});
client.login(''); //bot token
Ответ №1:
client.overwritePermissions()
не существует, но он существует для каналов.
overwritePermissions , как следует из названия и документов, но я не смог понять, перезаписывает последнее значение. Поэтому, чтобы постоянно добавлять новых пользователей к перезаписям, вам необходимо скопировать предыдущее значение, а затем добавить к нему:
client.on("message", message => {
if (message.author.bot) return;
if (message.channel.name == "support") {
let ow = message.channel.permissionOverwrites.array(); //get the information of the current permission overwrites, as an array
ow.push({ //add our data object to the end of this array
id: message.author.id,
deny: ["SEND_MESSAGES"]
});
message.channel.overwritePermissions(
ow //pass this array as our new overwrites
);
}
});
overwritePermission
принимает массив объектов. Это объекты, которые мы помещаем на предыдущие перезаписи.
Объекты задокументированы здесь.
Комментарии:
1. Когда кто-то другой разговаривает, это позволяет пользователю отправлять сообщения. Кроме того, как мне позволить ему работать только в одном канале
2. Я не знаю, что вы имеете в виду, говоря о том, что кто-то другой разрешает пользователю отправлять сообщения, но чтобы заставить его работать только в одном канале, вы должны скопировать идентификатор канала со своего сервера discord, затем в code compare
message.channel.id == "YOUR CHANNEL ID"
или, альтернативноmessage.channel.name == "YOUR CHANNEL NAME"
, сделать это оператором if и переопределить perms только внутри него. Я обновлю ответ, чтобы включить это.3. Канал теперь работает, но, как я уже говорил, если другой пользователь отправляет сообщение, это позволяет человеку, который отключен, отправить сообщение снова.
4. Теперь я понимаю, и я повторил проблему. Я обновлю ответ и опубликую комментарий, когда узнаю решение.
5. @BilalAhmed Я исправил ошибку. Я сам протестировал его с 2 пользователями, и он работает.