【问题标题】:Emoji must be a string or GuildEmoji/ReactionEmoji error while trying to make bot react with a custom emote表情符号必须是字符串或 GuildEmoji/ReactionEmoji 错误,同时尝试使机器人对自定义表情做出反应
【发布时间】:2021-06-29 15:39:18
【问题描述】:

在过去的几天里,我一直在尝试制作一个命令,让它对带有自定义表情的消息做出反应。它在控制台中给了我一个错误:

TypeError [EMOJI_TYPE]: Emoji must be a string or GuildEmoji/ReactionEmoji
    at Message.react (E:\Projects\DiscordBots\node_modules\discord.js\src\structures\Message.js:546:23)
    at Client.<anonymous> (E:\Projects\DiscordBots\LordMoth\moth.js:98:17)
    at Client.emit (events.js:327:22)
    at MessageCreateAction.handle (E:\Projects\DiscordBots\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14)
    at Object.module.exports [as MESSAGE_CREATE] (E:\Projects\DiscordBots\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
    at WebSocketManager.handlePacket (E:\Projects\DiscordBots\node_modules\discord.js\src\client\websocket\WebSocketManager.js:384:31)
    at WebSocketShard.onPacket (E:\Projects\DiscordBots\node_modules\discord.js\src\client\websocket\WebSocketShard.js:444:22)
    at WebSocketShard.onMessage (E:\Projects\DiscordBots\node_modules\discord.js\src\client\websocket\WebSocketShard.js:301:10)
    at WebSocket.onMessage (E:\Projects\DiscordBots\node_modules\ws\lib\event-target.js:132:16)
    at WebSocket.emit (events.js:315:20) {
  [Symbol(code)]: 'EMOJI_TYPE'
}

我尝试了How Find Emojis By Name In Discord.jsEmoji must be a string or Emoji/ReactionEmoji from getting a custom emote 的答案,但没有运气。我也在表情所在公会的频道中发送消息。

我当前的代码:

client.on("message", message => {
    if (message.content === "ok") {
        const mfi = message.guild.emojis.cache.find(emoji => emoji.name === "MOTHIFEST");
        message.react(mfi);
    }
});

我尝试使用 discord.js 文档 (https://discord.js.org/#/docs/main/stable/class/Message?scrollTo=react) 中实际包含的表情 ID 的另一个解决方案:

client.on("message", message => {
    if (message.content === "ok") {
        message.react(message.guild.emojis.cache.get("824436212034830356"));
          .then(console.log)
          .catch(console.error);
    }
});

我很困惑。请帮帮我。

【问题讨论】:

  • 您是否尝试过记录mfi 的值是多少?
  • @ZsoltMeszaros 我刚刚尝试过,但它仍然给我同样的错误。
  • 嗯,是的,你应该注释掉 message.react(mfi) 然后 :) 你也可以使用这个记录表情符号名称和 ID 的列表:message.guild.emojis.cache.each((e) =&gt; console.log(${e.id}: $ {e.name})) 这样您就可以查看您要查找的那个是否存在。

标签: javascript node.js discord discord.js


【解决方案1】:

确保表情符号名称正确。不要忘记它是区分大小写的。尝试检查mfi 的值,如果不是undefined,则仅对消息做出反应:

client.on('message', (message) => {
  if (message.content === 'ok') {
    const mfi = message.guild.emojis.cache.find((emoji) => emoji.name === 'MOTHIFEST');

    if (mfi) {
      message.react(mfi);
    }
  }
});

由于message.react 返回一个承诺,您也可以使用catch 来捕获任何错误:

const mfi = message.guild.emojis.cache.find((emoji) => emoji.name === 'MOTHIFEST');

message
  .react(mfi)
  .then(() => console.log('Reaction sent'))
  .catch((err) => console.log(`Oops, there was an error ${err}`));

您还可以使用以下示例记录表情符号名称和 ID 列表,以便查看您要查找的内容是否存在:

message.guild.emojis.cache.each((e) => console.log(${e.id}: ${e.name}))

【讨论】:

    猜你喜欢
    • 2019-01-12
    • 2020-07-30
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 2021-03-21
    • 2020-08-06
    • 1970-01-01
    • 2021-08-09
    相关资源
    最近更新 更多