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);
更优实现建议
- 优先使用ID数组:避免不必要的
fetch请求,提升代码执行效率。 - 添加错误捕获:处理贴纸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
相关产品推荐
相关产品推荐

