如何在Discord.js中筛选指定文件类型的附件并生成数组?
解决方案
你可以通过filter方法先筛选出所有非图片类型的附件,生成一个集合(或数组),之后基于这个集合的长度来判断是否删除消息,同时轻松实现统计数量等扩展操作。以下是优化后的代码:
// 筛选所有非图片附件,处理contentType可能为null的情况 const nonImageAttachments = message.attachments.filter(attachment => { return !attachment.contentType?.includes('image/'); }); // 当存在非图片附件时执行操作 if (nonImageAttachments.size > 0) { // 删除违规消息 message.delete().catch(error => console.error('删除消息失败:', error)); // 扩展操作1:记录非图片附件数量 console.log(`清理了1条消息,包含 ${nonImageAttachments.size} 个非图片附件`); // 扩展操作2:遍历并输出每个非图片附件的详情 nonImageAttachments.forEach(attach => { console.log(`附件名称:${attach.name},类型:${attach.contentType || '未知类型'}`); }); }
关键说明
- 筛选逻辑:利用Discord.js中
Collection类型的filter方法,一次性收集所有不符合要求的附件,相比原代码的逐个判断,逻辑更清晰,也方便后续扩展。 - 空值处理:用可选链
?.避免contentType为null时触发报错,提升代码健壮性。 - 扩展性:拿到
nonImageAttachments集合后,你可以轻松实现各种需求,比如记录到数据库、给发送者发送提醒消息等,只需要在判断逻辑后添加对应代码即可。
内容的提问来源于stack exchange,提问作者Emily Tomoe
相关产品推荐
相关产品推荐

