You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js中emojiCreate事件无法获取新添加表情符号的问题

解决Discord机器人表情创建时的预览问题

我懂你遇到的麻烦了——你觉得emojiCreate触发时表情还没同步到服务器的表情集合里,所以才用定时器去延迟查找,但其实完全没必要绕这个弯路!

问题根源

事件回调里的emoji参数本身就是刚创建完成的表情对象,它已经包含了你需要的所有信息,直接用它就行,根本不用去服务器的emojis集合里再找一遍。你原来的全局变量和定时器不仅让代码变乱,还可能在短时间内创建多个表情时出错(比如第二个表情会覆盖latestEmojiName,导致第一个表情的后续消息发错)。

优化后的代码

直接利用事件参数里的表情对象,就能简洁实现需求:

client.on("emojiCreate", async (emoji) => {
  // 异步获取目标通知频道(新版Discord.js推荐用fetch,比find/get更可靠)
  const announcementChannel = await emoji.guild.channels.fetch("625678148440162314");
  if (!announcementChannel) return; // 防止频道不存在时报错

  // 发送文本+可渲染的表情预览:toString()会自动转换成Discord能识别的格式
  await announcementChannel.send(`新表情已添加:${emoji.toString()}`);

  // 可选:给没有Nitro的用户发送表情图片预览
  await announcementChannel.send({
    content: "表情图片预览:",
    files: [emoji.url]
  });
});

关键说明

  • 无需定时器和全局变量:直接使用事件回调里的emoji对象,避免了并发创建表情时的冲突问题
  • 表情渲染方式:emoji.toString()会生成<:表情名称:表情ID>格式的字符串,Discord会自动将其渲染成对应的表情
  • 图片预览兼容:如果要让没有Nitro的用户也能看到表情,可以通过emoji.url获取表情的图片链接,以文件形式发送
  • 频道获取可靠性:用fetch替代旧的find/get,适配新版Discord.js的异步架构,减少找不到频道的概率

内容的提问来源于stack exchange,提问作者Muffinz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 20:42:43