Discord.js | Как использовать .sort () для сортировки коллекции извлеченных сообщений - PullRequest
0 голосов
/ 01 июля 2019

У меня есть следующий пример кода:

.sort((a, b) => b.createdAt - a.createdAt)

Я выбрал и отфильтровал сообщения в канале (канал имеет 8 сообщений), но фильтр возвращает коллекцию, и коллекции не обязательно в порядке.

Итак, как мне отсортировать мои сообщения, чтобы вышеприведенная формула работала?

A screenshot of my code

(Пожалуйста, игнорируйте .first ()на скриншоте выше)

В коллекции 4 сообщения, .first () просто собирает первое сообщение, я бы хотел, чтобы все четыре значения в моей вставке были такими:

newchannel.fetchMessages().then(messages => {
    var valuesA = messages.filter(m => m.author.id === message.author.id).first();
    var valuesB = messages.filter(m => m.author.id === message.author.id).second();
    var valuesC = messages.filter(m => m.author.id === message.author.id).third();
    var valuesD = messages.filter(m => m.author.id === message.author.id).fourth();
    const embed = {
        "fields": [
            {
                "name": "Type of code:",
                "value": valuesA.content,
                "inline": true
            },
            {
                "name": "Type of code:",
                "value": valuesB.content,
                "inline": true
            },
            {
                "name": "Type of code:",
                "value": valuesC.content,
                "inline": true
            },
            {
                "name": "Type of code:",
                "value": valuesD.content,
                "inline": true
            }
        ]
    };
}

Очевидно, что это не весь код или весь код, но он показывает все необходимое.

Если у вас есть какие-либо вопросы, не стесняйтесь задавать их в комментариях.

Ответы [ 2 ]

1 голос
/ 01 июля 2019

A Collection расширяет тип Map.

Ключи в Map упорядочены, а ключи, добавленные в объект, - нет.Таким образом, при итерации по нему объект Map возвращает ключи в порядке вставки.

В отличие от объекта, Map имеют определенный порядок.

The Discord.js Collection имеет метод sort.

Поскольку возвращаемый тип fetchMessages при разрешении равен Promise<Collection<Snowflake, Message>>, вы сможете сортировать по createdAt.

client.on('message', async function(msg) {
  let chan = msg.channel;
  let sortedMsgs = await chan.fetchMessages(option)
    .then(msgs => {
      msgs.sort((a, b) => b.createdAt > a.createdAt) 
    })
});

Отказ от ответственности : сейчас я не могу проверить этот код.Формат compareFunction не определен в документации, поэтому, возможно, он не >.

0 голосов
/ 05 июля 2019

Таким образом, после пары дней обращения за помощью я сам нашел решение:

Я просто не использовал .sort () и использовал значения [число] .content для выбора каждогосообщение.

Мой новый рабочий код:

newchannel.fetchMessages().then(messages => {
    var values = messages.filter(m => m.author.id === message.author.id);
    values = values.first(4);
    const embed = {
        "fields": [
            {
                "name": "Type of code:",
                "value": values[0].content,
                "inline": true
            },
            {
                "name": "Type of code:",
                "value": values[1].content,
                "inline": true
            },
            {
                "name": "Type of code:",
                "value": values[2].content,
                "inline": true
            },
            {
                "name": "Type of code:",
                "value": values[3].content,
                "inline": true
            }
        ]
    };
}
...