首页 > 解决方案 > 从消息 discord.js v12 中获取表情符号

问题描述

我想从 discord.js 上的消息中获取第一个表情符号

例子:<message>.content.emojis.first()

我该怎么做?

标签: javascriptnode.jsdiscorddiscord.js

解决方案


实际上我最近也遇到了这个问题!我能够放在一起的解决方案是:

TL;DR 你想用它.includes来简单地查找消息中是否存在表情符号这是一个小例子:

    const message = await message.channel.messages.fetch()
    let findEmoji = message.includes("<:")
    let firstEmoji = findEmoji.first()

TL 结束;DR。

这是一个非常长且冗长的版本,它可以抓取一个表情符号并使用 RegEx 吐出嵌入的图像:

  const hasEmoteRegex = /<a?:.+:\d+>/gm
  const emoteRegex = /<:.+:(\d+)>/gm
  const animatedEmoteRegex = /<a:.+:(\d+)>/gm

  const messages = await message.channel.messages.fetch()
  const message = messages.find(m => m.content.match(hasEmoteRegex))

  if (emoji = emoteRegex.exec(message)) {
  const url = "https://cdn.discordapp.com/emojis/" + emoji[1] + ".png?v=1"
  msg.channel.send(url)
  }
  else if (emoji = animatedEmoteRegex.exec(message)) {
  const url = "https://cdn.discordapp.com/emojis/" + emoji[1] + ".gif?v=1"
  msg.channel.send(url)
  }
  else {
  message.channel.send("Couldn't find an emoji to paste!")
  }

这使用 RegEx 将表情符号的不同部分过滤为字符串。一个标准的表情符号看起来像:<:emojiname:emojiID>例如。<:BBwave:562730391362994178> 动画表情符号如下所示:<a:emojiname:emojiID>

RegEx 将这些部分中的每一个都分解为

<
:BBwave:
562730391362994178
>

或者

a
<
:BBwave:
562730391362994178
>

我提供的代码基本上使用了 ID 并删除了所有其他信息。然后,它将此 ID 添加到 Discord 的标准表情符号链接中:https ://cdn.discordapp.com/emojis/562730391362994178.png?v= 1 或添加到.gif末尾有动画表情符号的 URL。

我希望这不会太压倒性!我知道那肯定是我第一次开始使用 discord.js 的时候。


推荐阅读