如何在 Discord.js 中按名称查找表情符号
Posted
技术标签:
【中文标题】如何在 Discord.js 中按名称查找表情符号【英文标题】:How Find Emojis By Name In Discord.js 【发布时间】:2019-02-04 02:02:05 【问题描述】:所以过去几天我一直非常沮丧,因为我无法在网上找到一个资源,该资源正确地记录了在用 javascript 编写不和谐机器人时如何找到表情符号。我一直在参考本指南,其有关表情符号的文档似乎是错误的或过时的:
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");
);
附言整个 bean 只是一个测试
但是每次我运行这段代码时,它都会返回这个错误并死掉:
(node:3084) DeprecationWarning: Collection#find: pass a function instead
有什么我错过的吗?我好难过……
【问题讨论】:
从警告中我会说你需要做类似client.emojis.find(emoji => emoji.name === "bean")
的事情。我从未使用过 discord.js,所以我可能完全错了
@jonatjano 所以我尝试了你在那里写的内容,错误似乎消失了,但它仍在死亡:/
您可能需要在您的活动中设置它,我不认为这些集合是动态的,这意味着 bean
var 不会在新值出现时获得新值,而是保留初始值只有
【参考方案1】:
我从未使用过discord.js
,所以我可能完全错了
从警告中我会说你需要做类似的事情
client.emojis.find(emoji => emoji.name === "bean")
另外,在查看Discord.js Doc
之后,这似乎是要走的路。但是文档从来没有说过 client.emojis.find("name", "bean")
是错误的
【讨论】:
好吧,所以我使用了两个答案中的代码组合,它终于奏效了,但您似乎无法同时将正确答案授予 2 个人。但是因为你帮我解决了最初的错误,所以我把它授予了你 以防万一有人稍后通过并添加新答案:OP所说的另一个答案是@BaderH.'s answer【参考方案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);
);
【讨论】:
【参考方案3】:请查看switching to v12 discord.js guide
v12 引入了管理器的概念,你将不能再对
Client#users
这样的数据结构直接使用Collection#get
这样的收集方法。在尝试使用收集方法之前,您现在必须直接请求管理器上的缓存。任何直接在管理器上调用的方法都会调用 API,例如GuildMemberManager#fetch
和MessageManager#delete
。
在这种特定情况下,您需要将缓存对象添加到您的表达式中:
var bean = message.guild.emojis.cache?.find(emoji => emoji.name == 'bean');
【讨论】:
我有一个问题,因为意图发生了。有时 find 函数会在缓存中检索 undefined。【参考方案4】:如果像我这样的人在寻找答案时发现了这个,在 v12 中你将不得不添加缓存,使它看起来像这样:
var bean = message.guild.emojis.cache.find(emoji => emoji.name == 'bean');
而不是:
var bean = message.guild.emojis.find(emoji => emoji.name == 'bean');
【讨论】:
以上是关于如何在 Discord.js 中按名称查找表情符号的主要内容,如果未能解决你的问题,请参考以下文章
如何在 discord.js 中获取消息中某个表情符号反应的计数
从 discord.js 中的消息中获取 Emoji url