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

Discord.js发送贴纸触发TypeError:错误原因与解决方法

Discord.js 发送贴纸问题解决

错误原因

stickers.fetch('sticker id') 返回的是Promise异步对象,但Discord.js的reply方法中stickers参数要求传入Sticker对象数组或贴纸ID字符串数组。Promise不是可迭代的数组类型,所以调用map方法时触发TypeError: this.options.stickers?.map is not a function。

修复方案

方案1:异步处理fetch结果

因为fetch是异步操作,需要用async/await获取实际的Sticker对象,再放入数组:

// 确保包含此代码的函数是async函数
async function sendReplyWithSticker(msg) {
  const targetSticker = await client.guilds.cache.get('guild id').stickers.fetch('sticker id');
  const replyOptions = {
    content: 'hello world',
    stickers: [targetSticker] // 单个贴纸必须包裹在数组中
  };
  await msg.reply(replyOptions);
}

方案2:直接传入贴纸ID数组(推荐)

无需额外请求贴纸对象,直接传入ID数组,减少API调用,代码更简洁:

const replyOptions = {
  content: 'hello world',
  stickers: ['sticker id'] // 直接传单个ID的数组
};
msg.reply(replyOptions);

更优实现建议

  1. 优先使用ID数组:避免不必要的fetch请求,提升代码执行效率。
  2. 添加错误捕获:处理贴纸ID无效、服务器不存在等异常情况:
async function sendReplyWithSticker(msg) {
  try {
    const replyOptions = {
      content: 'hello world',
      stickers: ['sticker id']
    };
    await msg.reply(replyOptions);
  } catch (error) {
    console.error('发送贴纸出错:', error);
    await msg.reply('无法发送贴纸,请检查贴纸ID是否有效');
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:55:19