【问题标题】:'BOT' is not recognized as an internal command or external command, an executable program or a command file'BOT' 不被识别为内部命令或外部命令、可执行程序或命令文件
【发布时间】: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


【解决方案1】:

您需要为您的程序制作一个二进制文件。在 Node.js 中,您可以在 package.json 中创建二进制文件。

第 1 步: 在您的主文件中,您需要添加一个 shebang (#!),然后添加 /usr/bin/env node重要!这必须在主文件的第一行。

#!/usr/bin/env node

第 2 步:在您的 package.json 文件中,添加以下两个键,将 index.js 替换为您自己的主文件。

{
  "main": "index.js",
  "bin": {
    "BOT": "./index.js"
  },
}

第 3 步:运行以下命令将其应用到您的计算机。

npm link

编辑:如果上述命令不起作用,请运行以下命令。

npm install -g .

就是这样!当您运行以下命令时,它应该可以工作。

BOT

【讨论】:

  • hashbangs 可以在 Windows 中使用吗?
  • 当我这样做时它对我有用。
  • 嗨,谢谢,但它对我不起作用
  • @maetiscrepin:你能向 Arnav 解释一下如何它不起作用吗? “不起作用”本身并不是故障报告,如果这是您提供的所有详细信息,您的助手将不得不向您发送一轮问题,以获取足够的信息来找出它不起作用的原因。诸如控制台输出、日志、错误消息之类的东西是必不可少的,并且最好是立即提供,而不是等待有人要求它们。谢谢!
  • 您可以通过 CodePen 分享index.js 文件或编辑您的问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-06
  • 1970-01-01
  • 2021-09-15
  • 2021-02-08
  • 1970-01-01
  • 2014-10-21
  • 2014-02-08
相关资源
最近更新 更多