如何让DiscordJS机器人读取网页托管的b.txt内容并发送到Discord频道
远程文本拉取实现方案
前置依赖准备
Node.js 原生模块没有做轻量HTTP请求的便捷封装,你需要先在项目根目录安装适配CommonJS规范的请求库,执行安装命令即可:npm install node-fetch@2
选2.x大版本是为了匹配传统DiscordJS项目的模块化写法,避免新版ESM模块引发的语法报错。
分步改造代码
- 第一步:在文件顶部引入依赖,保留你已经定义好的远程文本地址常量:
const fetch = require('node-fetch'); const txtfile = "http://example.ml/b.txt";
- 第二步:封装独立的文本拉取函数,处理异步请求逻辑和边界异常:
async function getBtxtContent() { try { const response = await fetch(txtfile); // 拦截404、500等错误状态,避免把错误页面的内容发到频道 if (!response.ok) return 'b.txt 加载失败,请稍后重试'; // 把响应内容解析为纯文本 const rawText = await response.text(); // 清理文本前后多余的换行、空格,优化输出格式 return rawText.trim(); } catch (err) { // 捕获网络超时、域名解析失败等异常,防止机器人进程直接崩溃 return 'b.txt 内容获取异常,请检查网络连接'; } }
- 第三步:修改原有消息监听逻辑,替换原来的静态变量发送逻辑:
// 给消息回调加上async标记,才能用await等待请求返回结果 client.on('message', async (message) => { // 跳过机器人自己发的消息,避免循环触发指令 if (message.author.bot) return; if (message.content === 'b') { // 拿到远程文本内容后再发送到当前频道 const fileContent = await getBtxtContent(); message.channel.send(fileContent); } });
实用优化建议
- 可以加一层简易内存缓存:第一次拉取到b.txt内容后存到全局变量,后续触发指令直接读缓存,不用每次都发网络请求,大幅降低响应延迟
- 如果后续b.txt内容超过2000字符,要适配Discord的消息长度限制,要么拆分多条发送,要么直接把内容生成为文本文件附件上传
内容的提问来源于stack exchange,提问作者dellpacker
相关产品推荐
相关产品推荐

