Discord.JS如何将目录内所有文件名整合为单条Discord消息发送
解决方案
你可以先将读取到的文件名数组拼接为单个换行分隔的字符串,再按照Discord单条消息2000字符的上限做分片发送,既可以避免大量触发速率限制,也不会超出单条消息长度要求。
优化后的代码示例如下:
const server = message.guild.id; const serverpath = `./sounds/${server}`; const fs = require('fs'); const path = require('path'); const directoryPath = path.join('/home/pi/Pablo', serverpath); fs.readdir(directoryPath, function(err, files) { if (err) { return console.log('无法扫描目录: ' + err); } // 拼接所有文件名为单个字符串,每行展示一个文件名 let fullContent = files.join('\n'); // 按Discord单条消息2000字符上限拆分内容分片发送 const maxLength = 2000; for (let i = 0; i < fullContent.length; i += maxLength) { const contentChunk = fullContent.slice(i, i + maxLength); message.channel.send(contentChunk); } });
可选优化方案
- 如果你希望文件名展示更清晰,可以用Discord支持的纯文本代码块包裹内容,拼接时将内容改为
\n${files.join('\n')}\n,对应将maxLength调整为1994即可(预留代码块标记占用的6个字符位置) - 如果需要过滤子目录只展示文件,可以在拼接前通过
fs.stat判断条目类型,筛除非文件的条目
内容的提问来源于stack exchange,提问作者Cazed
相关产品推荐
相关产品推荐

