Каков наилучший метод получения информации о самых последних опубликованных смайликах в канале с использованием регулярных выражений?

#javascript #node.js #discord #discord.js

#javascript #node.js #Discord #discord.js

Вопрос:

Моя цель — иметь возможность получать самые последние опубликованные смайлики в канале и размещать их информацию в канале без <: , : , > которые присутствуют внутри информации о смайликах.

Вот код, который у меня есть на данный момент:

   "yoink": {
    description: "Yoink an emoji",
    usage: "`$yoink`",
    category: "images",
    process: async function(msg, parameters) {
    let a1 = await msg.channel.messages.fetch()
    let a2 = a1.filter(m => msg.content.includes('<'))
    let emoji = a2.first()

    if (a2) {
    msg.channel.send(`${emoji}`)
    }
    }
  },
  

Это работает, но он просто отображает смайлики вместе с синтаксисом команды, что фактически создает бесконечный цикл команд, lol.

Теперь мне не нужно использовать регулярные выражения, но я пытаюсь понять, как это работает.

Каков наилучший способ сделать это?

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

1. это можно обработать, например messages.map(MSG_TO_EMOJI_WITH_PATTERN).filter(IS_EMOJI_MSG) , для получения списка смайликов

Ответ №1:

Вы можете использовать RegEx для захвата идентификатора смайлика, а затем извлекать этот смайлик через свой client , чтобы отобразить его информацию. Вот пример во фрагменте кода:

 // example message
const message = '<:BBwave:562730391362994178> <:MarioWave:725159909758337055> Welcome to the server!'

const [lastEmoji, ...others] = message.match(/<a?:. :(d{18})>/).reverse();

console.log(lastEmoji);

// const emote = message.client.emojis.cache.get(emojiID);
// console.log(emote.name, emote.id)  


В моей String.prototype.match() функции я использовал это RexEx :

 /<a?:. :(d{18})>/

a? - there is only an 'a' in the emoji if it is animated. question mark means optional
.  - the emojis name. '.' means any character, and ' ' means one or more
d{18} - the emojis id. 'd' means any standard digit, and {18} means 18 of them in a row
(d{18}) - by putting the id in parentheses, I can capture it
<::> - every other character is literal
  

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

1. Еще раз спасибо за вашу помощь и за небольшое руководство. Мне это определенно нужно!