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

Discord机器人读取txt文件报ReferenceError:open未定义如何解决

Discord机器人读取本地txt文件报错open is not defined解决

问题描述

尝试开发Discord机器人实现读取本地txt文件中存储的日期数据功能,查阅文档和同类帖子后仍持续触发相同报错。刚开始接触编程,若代码存在明显格式或逻辑问题请见谅。

原问题代码

list = open("dates.txt","r")

list.seek(0)

var firstLine = file1.readline()         

file1.close()

bot.sendMessage({
    to: channelID,
    message: firstLine
})

触发的报错

C:\Users\My Laptop\Desktop\Discord Bots\HeadzUp\bot.js:241
            list = open("dates.txt","r")
            ^

ReferenceError: open is not defined
    at DiscordClient.<anonymous> (C:\Users\My Laptop\Desktop\Discord Bots\HeadzUp\bot.js:241:13)
    at DiscordClient.emit (node:events:527:28)
    at DiscordClient.handleWSMessage (C:\Users\My Laptop\Desktop\Discord Bots\HeadzUp\node_modules\discord.io\lib\index.js:1854:11)
    at WebSocket.emit (node:events:527:28)
    at Receiver.ontext (C:\Users\My Laptop\Desktop\Discord Bots\HeadzUp\node_modules\ws\lib\WebSocket.js:841:10)
    at C:\Users\My Laptop\Desktop\Discord Bots\HeadzUp\node_modules\ws\lib\Receiver.js:536:18)
    at Receiver.applyExtensions (C:\Users\My Laptop\Desktop\Discord Bots\HeadzUp\node_modules\ws\lib\Receiver.js:371:5)
    at C:\Users\My Laptop\Desktop\Discord Bots\HeadzUp\node_modules\ws\lib\Receiver.js:508:14)
    at Receiver.flush (C:\Users\My Laptop\Desktop\Discord Bots\HeadzUp\node_modules\ws\lib\Receiver.js:347:3)
    at Receiver.finish (C:\Users\My Laptop\Desktop\Discord Bots\HeadzUp\node_modules\ws\lib\Receiver.js:541:12)
PS C:\Users\My Laptop\Desktop\Discord Bots\HeadzUp>

已知运行信息

  • 机器人其他功能(如指令响应)可正常运行
  • dates.txt存放在C:\Users\My Laptop\Desktop\Discord Bots\HeadzUp路径下,和bot代码文件同级

问题原因

你混淆了编程语言的语法:你运行的机器人是Node.js(JavaScript)环境的,但你写的open()打开文件、seek()跳指针、readline()读行、close()关文件这套是Python的文件操作写法,Node.js里没有全局定义的open函数,所以直接触发未定义错误。
另外你的代码还有变量名不匹配的问题:你把打开的文件对象赋值给了list变量,后续读行时却用了从未定义过的file1变量,就算open函数可用,这里也会触发新的报错。

修复方法

Node.js环境下读文件需要用内置的fs模块,直接替换对应代码即可:

  1. 在代码文件顶部引入需要的内置模块:
const fs = require('fs');
const path = require('path');
  1. 替换你原来写的读文件逻辑,用绝对路径匹配文件避免找不到文件的问题:
// 拼接dates.txt的绝对路径,不受脚本运行目录影响
const targetFilePath = path.join(__dirname, 'dates.txt');
// 同步读取文件内容,指定utf8编码直接拿到字符串格式的文本
const fileContent = fs.readFileSync(targetFilePath, 'utf8');
// 兼容Windows和类Unix系统的换行符,分割内容取第一行,trim()去掉首尾多余的空白和换行符
const firstLine = fileContent.split(/\r?\n/)[0].trim();

bot.sendMessage({
    to: channelID,
    message: firstLine
})

可选优化:可以给读文件逻辑加try/catch错误捕获,当文件不存在、权限不足时不会直接导致机器人进程崩溃。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 23:54:33