Получите количество сообщений участника в канале в discord.js

#javascript #discord #discord.js

Вопрос:

Есть ли какой-либо способ подсчета сообщений указанного пользователя в указанном канале Discord в discord.js? Когда я использую:

 const countMyMessages = async (channel, member) => {
    const messages = await channel.messages.fetch()
    const myMessages = message.filter(m => m.author.id === member.id)
    console.log(myMessages.size)
}
 

Извлекается только 50 сообщений, поэтому я не могу сосчитать все сообщения пользователя. И опция limit может иметь максимальное значение 100. /guilds/guild_id/messages/search API, с другой стороны, недоступен для ботов.

Комментарии:

1. Я думаю, что единственный способ сделать это-получить все сообщения (партиями по 100). Я рекомендую хранить количество сообщений каждого пользователя в базе данных и либо увеличивать этот счетчик для каждого сообщения, либо обновлять его только новыми сообщениями, когда это необходимо. Если это жизнеспособное решение, дайте мне знать, и я напишу полный ответ.

Ответ №1:

Вам нужно будет использовать систему хранения для хранения такого рода статистики по Discord.

Я рекомендую вам сначала использовать SQLite (например, пакет Enmap npm).

Я могу быстро нарисовать для вас структуру, основанную на этой.

 
const Enmap = require("enmap");
client.messages = new Enmap("messages");

client.on("message", message => {
  if (message.author.bot) return;
  if (message.guild) {
    const key = `${message.guild.id}-${message.author.id}`;
    client.messages.ensure(key, {
      user: message.author.id,
      guild: message.guild.id,
      messages: 0
    });
    client.messages.inc(key, "messages");


    // Do your stuff here.
    console.log(client.messages.get(key, "messages"))
  }
});