Discord.js 无法永远在服务器上使用 process.env 启动机器人,但它可以通过 Visual Studio 在我的本地驱动器上正常工作
Posted
技术标签:
【中文标题】Discord.js 无法永远在服务器上使用 process.env 启动机器人,但它可以通过 Visual Studio 在我的本地驱动器上正常工作【英文标题】:Discord.js can't launch bot with process.env on the server with forever, but it works on my local drive via Visual Studio without problems 【发布时间】:2021-11-12 15:33:26 【问题描述】:我在服务器上启动机器人时遇到问题,永远...
我使用process.env
存储 BOT 令牌和 Instagram 登录凭据。
但是在服务器上,由于此错误,我无法使机器人工作..
(node:30365) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency
(Use `node --trace-warnings ...` to show where the warning was created)
ig-bot/node_modules/discord.js/src/client/Client.js:228
if (!token || typeof token !== 'string') throw new Error('TOKEN_INVALID');
^
Error [TOKEN_INVALID]: An invalid token was provided.
at Client.login (ig-bot/node_modules/discord.js/src/client/Client.js:228:52)
at Object.<anonymous> (ig-bot/ig.js:64:8)
at Module._compile (node:internal/modules/cjs/loader:1092:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1121:10)
at Module.load (node:internal/modules/cjs/loader:972:32)
at Function.Module._load (node:internal/modules/cjs/loader:813:14)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:76:12)
at node:internal/main/run_main_module:17:47
[Symbol(code)]: 'TOKEN_INVALID'
error: Forever detected script exited with code: 1
error: Script restart attempt #1
ig-bot/node_modules/discord.js/src/client/Client.js:228
if (!token || typeof token !== 'string') throw new Error('TOKEN_INVALID');
^
Error [TOKEN_INVALID]: An invalid token was provided.
at Client.login (ig-bot/node_modules/discord.js/src/client/Client.js:228:52)
at Object.<anonymous> (ig-bot/ig.js:64:8)
at Module._compile (node:internal/modules/cjs/loader:1092:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1121:10)
at Module.load (node:internal/modules/cjs/loader:972:32)
at Function.Module._load (node:internal/modules/cjs/loader:813:14)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:76:12)
at node:internal/main/run_main_module:17:47
[Symbol(code)]: 'TOKEN_INVALID'
error: Forever detected script exited with code: 1
它说令牌无效,但它确实没有任何意义,因为它可以在我的 PC 上运行,我可以毫无问题地通过 Visual Studio 运行代码。机器人的同一文件夹在我的服务器上运行时出现问题(通常我使用 config.json 作为令牌,但这次我需要 .env 文件)
//处理ENV代码
const dotenv = require('dotenv');
dotenv.config( path: './process.env' );
const username = process.env.IGUSERNAME
const password = process.env.IGPASSWORD
const TOKEN = process.env.TOKEN
client.login(TOKEN);
我试过 ENV=production forever start yourApp.js
forever -c "node -r dotenv/config" --workingDir app-workdir-path start app.js
但这些都不适合我...
【问题讨论】:
【参考方案1】:根据这个答案,我相信你应该这样做sudo IS_PROD=1 forever start yourapp.js
Node.js forever with environment variable
【讨论】:
同样的问题...这也不起作用 老实说,我在根目录中使用带有 .env 文件的 PM2(类似于永远),我没有遇到任何问题...当我在周围搜索时,人们只是说要像你一样运行它将使用环境变量运行常规节点 不确定 PM2 是什么,我一直很好,但我找不到让它工作的方法...... NODE_ENV=production forever ig-bot/ig.js 也无法正常工作。 .. PM2 是一个流程管理器,可让您无限期地运行。尝试通过像ENV=production forever start yourApp.js
这样的命令行传递你的环境变量,但它可能永远不喜欢dotenv或环境变量
呃,这真的很奇怪......我尝试了简单的节点 ig-bot/ig.js,它说同样的错误......无效的令牌..但它实际上没有意义,它的字面意思是一样的通过 Visual Studio Code 在我的桌面上运行的副本...我不明白到底发生了什么。【参考方案2】:
几个小时后,我找到了解决方案。
const path = require('path')
require('dotenv').config( path: path.resolve(__dirname, '.env') )
此代码将强制从您的脚本目录运行您的.env
文件。 console.log(__dirname)
会将您的 path
返回到 .js 文件。它解决了整个问题。
//Full code example
const path = require('path')
require('dotenv').config( path: path.resolve(__dirname, '.env') )
const TOKEN = process.env.TOKEN
const Client, Intents = require('discord.js');
const client = new Client( intents: [Intents.FLAGS.GUILDS] );
client.on('ready', () =>
client.user.setActivity("WE DID IT!", type: 'PLAYING' );
client.guilds.cache.forEach(guild =>
let channel = guild.channels.cache.get('channelID')
channel.send(`I'm finally ready!`);
console.log('Wohoo! Bot is online!')
)
)
// Login to Discord with your client's token
client.login(TOKEN);
【讨论】:
以上是关于Discord.js 无法永远在服务器上使用 process.env 启动机器人,但它可以通过 Visual Studio 在我的本地驱动器上正常工作的主要内容,如果未能解决你的问题,请参考以下文章
discord.js 成员计数 - 无法读取未定义的属性“通道”
TypeError: command.execute 在捕获错误时不是函数。此外,冷却不起作用。在 Discord.js 上
Discord.js 无法在 Ubuntu 18.04 上播放 mp3 文件