【发布时间】:2022-02-08 06:56:48
【问题描述】:
我正在尝试运行我在 GitHub 上找到的不和谐机器人。我使用 Windows,程序使用 Docker、Node 以及其他一些我不知道的东西。
当我使用“node start-bots.js”运行程序时,cmd 给我一个错误:
'BOT' 不被识别为内部命令或外部命令、可执行程序或命令文件。
我尝试了很多东西,但没有任何效果......
这里是 start-bot.js 的代码:
const exec = require('child_process').exec;
const bots = require('./bots.json');
const recreate = () => {
console.log(`???? Checking existing volumes...`);
exec(`docker volume ls -q`, (err, stdout, stderr) => {
const volumes = stdout.split('\n');
bots.forEach((bot) => {
console.log(`???? Starting ${bot.name}...`);
const start = () => {
exec(`BOT=${bot.name} VINTED_BOT_ADMIN_IDS=${bot.adminIDs}
VINTED_BOT_TOKEN=${bot.token} docker-compose -f docker-compose.yaml -p
bot-${bot.name} up -d`, (err, stdout, stderr) => {
if (err) {
console.error(`???? ${bot.name} failed to start.`);
console.error(err);
return;
}
console.log(stderr);
});
}
if (volumes.includes(`bot-${bot.name}`)) {
console.log(`???? ${bot.name} database has been recovered!`);
start();
} else {
exec(`docker volume create bot-${bot.name}`, (err, stdout, stderr) => {
if (!err) {
console.log(`???? ${bot.name} database has been created!`);
start();
} else console.error(err);
});
}
});
});
};
const restart = process.argv.includes('-restart');
if (restart) {
console.log('???? Shutting down all bots...');
bots.forEach((bot) => {
exec(`docker-compose -p bot-${bot.name} stop`, (err, stdout, stderr) => {
if (!err) {
exec(`docker-compose -p bot-${bot.name} rm -f`, (err, stdout, stderr) => {
if (!err) {
console.log(`???? Bot ${bot.name} has been shut down and
removed.`);
} else {
console.log(`???? Failed to remove containers for bot
${bot.name}`);
}
});
}
});
});
} else {
recreate();
}
和 docker-compose.yaml :
version: '3.8'
services:
vinted-discord-bot:
image: vinted-discord-bot:3.17
environment:
VINTED_BOT_ADMIN_IDS: "${VINTED_BOT_ADMIN_IDS}"
VINTED_BOT_TOKEN: "${VINTED_BOT_TOKEN}"
POSTGRES_DB: vinted_bot
POSTGRES_USER: root
POSTGRES_PASSWORD: password
restart: always
depends_on:
- postgres
postgres:
image: postgres:14.1
healthcheck:
test: [ "CMD", "pg_isready", "-q", "-d", "postgres", "-U", "root" ]
timeout: 45s
interval: 10s
retries: 10
restart: always
environment:
POSTGRES_USER: root
POSTGRES_PASSWORD: password
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
external:
name: bot-${BOT}
最后是 bots.json:
[
{
"name": "thenameofthebot",
"token": "thetokenofthebot",
"adminIDs": "theidoftheadminserver"
}
]
这是错误屏幕(法语):
您可以在以下位置找到它:https://github.com/Androz2091/vinted-discord-bot。
【问题讨论】:
-
错误“X 不被识别为内部命令或外部命令、可执行程序或命令文件”这里有数百个重复项。这是一个 Windows 控制台错误,这意味着 Windows 找不到正在运行的命令。
-
但是,如果深入挖掘,请查看命令格式:
BOT=${bot.name} VINTED_BOT_ADMIN_IDS=${bot.adminIDs} VINTED_BOT_TOKEN=${bot.token} docker-compose -f docker-compose.yaml- 基本上,BOT=x VINTED_BOT_ADMIN_IDS=y VINTED_BOT_TOKEN=z位试图为命令提供环境变量,但 Windows 不支持这种格式。 -
您可以做的是在您的 Windows 计算机上的 VirtualBox 中设置 Ubuntu 的副本,然后运行它 - 然后我认为它会起作用。它基本上需要一个 Linux 主机。
-
@halfer 嗨,但是当我在 ubuntu 上运行程序时,我没有收到错误消息,但它显示了这个并且没有任何反应:????检查现有卷... ????启动 MaetisVintedBot... ???? MaetisVintedBot 数据库已恢复!
-
它看起来比上次更进一步。要么它正在工作,要么你必须找出它有什么问题,或者它不是经过良好测试的软件。既然您已经解决了一个问题,请考虑在该问题上多花一些时间,如果您可以生成完整的故障报告,请在 Stack Overflow 上提出一个新问题。
标签: javascript node.js docker discord bots