Как сделать так, чтобы пользователи общались в канале только один раз?

#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 пользователями, и он работает.