#discord.js #bots
#discord.js #боты
Вопрос:
Я разрабатываю discord.js бот модерации, и я хочу, чтобы он кикнул кого-нибудь после определенного количества нарушений. Есть ли способ заставить его регистрировать эти нарушения (ругань), а затем кикать через определенное количество раз? Бот уже находит и удаляет ругательства, поэтому я хочу иметь возможность внедрить это в эту систему. Я хочу знать, есть ли способ встроить систему регистрации нарушений непосредственно в систему защиты от ругани. Я не собираюсь вставлять неизмененный код, потому что он защищает от ругани, и ему нужно на чем-то основываться, но я размещу версию с цензурой ниже
// require the discord.js module
const Discord = require('discord.js');
// create a new Discord client
const client = new Discord.Client();
// when the client is ready, run this code
// this event will only trigger one time after logging in
client.once('ready', () => {
console.log('Ready!');
});
client.login('TOKEN');
client.on('message', message => {
if (message.content.includes('bad word')) {
message.delete();
message.author.send('Please do not swear on this server.');
}
if (message.content.includes('bad word')) {
message.delete();
message.author.send('Please do not swear on this server.');
}
if (message.content.includes('bad word')) {
message.delete();
message.author.send('Please do not swear on this server.');
}
if (message.content.includes('bad word')) {
message.delete();
message.author.send('Please do not swear on this server.');
}
if (message.content.includes('bad word')) {
message.delete();
message.author.send('Please do not swear on this server.');
}
if (message.content.includes('bad word')) {
message.delete();
message.author.send('Please do not swear on this server.');
}
if (message.content.includes('bad word')) {
message.delete();
message.author.send('Please do not swear on this server.');
}
if (message.content.includes('bad word')) {
message.delete();
message.author.send('Please do not swear on this server.');
}
});
Ответ №1:
Вы должны использовать discord.js Collection
, который является:
Карта с дополнительными служебными методами. Это используется повсюду discord.js вместо массивов для всего, что имеет идентификатор, для значительного повышения производительности и простоты использования.
Map
Объект содержит пары ключ-значение и запоминает первоначальный порядок вставки ключей. Любое значение может использоваться как ключ, так и значение. Вот краткая демонстрация:
// let's say we had two people: John and Sarah
const people = new Map();
// each of them were a different age
people.set('John', 25); // in this example, 'John' is the key, and 25 is the value
people.set('Sarah', 19); // in this example, 'Sarah' is the key, and 25 is the value
// each person has an individual age
// you can `get()` the key, and it will return the value
console.log(`Sarah is ${people.get('Sarah')} years old.`);
console.log(`John is ${people.get('John')} years old.`);
Вы можете использовать этот тип формата для создания коллекции, где каждый ключ представляет собой отдельный идентификатор пользователя, а каждое значение — количество нарушений, которые у них есть. Каждый раз, когда кто-то ругается, увеличивайте количество нарушений на единицу, а затем проверяйте, превышает ли оно заданное число.
Кроме того, вы можете значительно упростить свою текущую систему, поместив каждое плохое слово в массив, а затем повторив ту же функцию через каждый элемент, используя Array.prototype.some()
// const Discord = require('discord.js');
const infractions = new Discord.Collection();
const words = ["bad word", "bad word", "bad word", "..."];
// since it's the same function, you should only have to write it once
if (words.some((word) => message.content.includes(word))) {
message.delete();
message.author.send("Please do not swear on this server.");
if (!infractions.has(message.author.id))
// if they don't have any infractions
infractions.set(message.author.id, 1);
// create a new element for them with 1 infraction
// otherwise, increment their existing infractions by 1
else
infractions.set(message.author.id, infractions.get(message.author.id) 1);
// check if it's above the specified number
if (infractions.get(message.author.id) >= 5) {
// kick the member, send log messages, etc.
}
}
Комментарии:
1. Это работает, за исключением случаев, когда они совершают такое количество нарушений, это не требует никаких действий. Я установил его для отправки сообщения на данный момент, но он ничего не делает
2. Есть ли способ зарегистрировать, кого выгнали, и отправить его на сервер журналов, используя идентификатор канала?