在Discord.js中如何按名称查找表情符号

3
这几天我非常沮丧,因为我找不到任何在线资源能够正确地记录在JavaScript编写Discord机器人时如何查找表情符号。我一直在参考这个指南,但它关于表情符号的文档似乎要么是错误的,要么已经过时:https://anidiots.guide/coding-guides/using-emojis
我需要的很简单; 只需使用.find()函数引用表情符号并将其存储在变量中。这是我的当前代码:
const Discord = require("discord.js");
const config = require("./config.json");
const fs = require("fs");
const client = new Discord.Client();
const guild = new Discord.Guild();
const bean = client.emojis.find("name", "bean");

client.on("message", (message) => {
    if (bean) {
      if (!message.content.startsWith("@")){
        if (message.channel.name == "bean" || message.channel.id == "478206289961418756") {
            if (message.content.startsWith("<:bean:" + bean.id + ">")) {
                message.react(bean.id);
            }
        }
      }
    }
    else {
      console.error("Error: Unable to find bean emoji");
    }
});

p.s. 整个豆子的事情只是一次测试

但是每次我运行这段代码,它都会返回这个错误并停止:

(node:3084) DeprecationWarning: Collection#find: pass a function instead

我有什么遗漏的吗?我真的很困惑...


3
根据警告,我会建议你进行类似于 client.emojis.find(emoji => emoji.name === "bean") 的操作。我从未使用过 discord.js,所以我的说法可能是完全错误的。 - jonatjano
@jonatjano,我尝试了你写的内容,错误似乎已经消失了,但它仍然无法正常运行 : / - Zyad-O
你可能需要在事件中进行设置,我认为这些集合不是动态的,也就是说 bean 变量不会随着更新而获取新值,而只会保留初始值。 - jonatjano
4个回答

4

我从未使用过discord.js,所以我的理解可能是错误的。

根据提示,我认为您需要做以下操作:

client.emojis.find(emoji => emoji.name === "bean") 

在查看了Discord.js文档之后,似乎这是正确的方法。但是文档从未提到client.emojis.find("name", "bean")是错误的。


好的,我已经结合了两个答案的代码,最终它成功了,但是似乎你不能同时将正确答案授予两个人。但是我还是把它授予了你,因为你帮助我修复了最初的错误。 - Zyad-O
为了以防万一有人稍后经过并添加新答案:OP提到的另一个答案是@BaderH.的答案。 - jonatjano

2

我已经修改了你的代码。

希望这能帮助到你!

const Discord = require("discord.js");
const client = new Discord.Client();


client.on('ready', () => {
 console.log('ready');
});


client.on('message', message => {
 var bean = message.guild.emojis.find(emoji => emoji.name == 'bean');
 // By guild id 
 if(message.guild.id == 'your guild id') {
 if(bean) {
      if(message.content.startsWith("<:bean:" + bean.id + ">")) {
       message.react(bean.id);
      }
     }
}
});


1
请查看切换到v12 Discord.js指南
v12引入了管理器的概念,您将不再能够直接在数据结构(如Client#users)上使用Collection#get等集合方法。现在,您必须在尝试使用集合方法之前直接向管理器请求缓存。任何直接调用管理器的方法都将调用API,例如GuildMemberManager#fetchMessageManager#delete
在这种特定情况下,您需要将缓存对象添加到表达式中:
var bean = message.guild.emojis.cache?.find(emoji => emoji.name == 'bean');

1
自从意图发生以来,我遇到了一个问题。有时候查找函数在缓存中检索到未定义的内容。 - Alex75

0

如果有人像我一样在寻找答案,那么在v12中,您需要添加缓存,使其看起来像这样:

var bean = message.guild.emojis.cache.find(emoji => emoji.name == 'bean');

不要这样写:

var bean = message.guild.emojis.find(emoji => emoji.name == 'bean');


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接