Как мне go вернуть каталог в JavaScript? - PullRequest
1 голос
/ 27 февраля 2020

У меня была эта проблема с моим ботом разногласий. В основном, вот моя файловая структура:

(bot)
main.js
./extra
./commands
./events
(extra)
config.json
cmdhandle.js
(commands)
-
(events)
message.js

Хорошо, так что в () у нас есть каталоги. Теперь проблема с cmdhandle.js. Это обработчик команд. Теперь я хочу, чтобы какая-то строка go возвращала каталог, потому что cmdhandle.js находится в ./extra, и я хочу, чтобы она была в каталоге bot. Есть ли способ go вернуть один каталог, как в пакете cd..? И просто определение ../commands или что-то для обработчика команд не будет работать для меня. Мне нужно, чтобы это была просто одна функция. Я пытался использовать fs.readdir, но я не очень понимаю, как это сделать.

Редактировать: Хорошо, теперь я хотел сделать это, как в пакетном cd.., потому что мой обработчик команд, если я попытаюсь просто использовать ../commands или как ../events, он просто не будет работать и выдаст ошибку, хотя бот запустится. Я чувствую, что есть проблема, когда каждый раз, когда вы делаете ../, он возвращает каталог, но я просто запутался в том, что делает мой обработчик команд, если честно. Позже можно опубликовать вопрос, чтобы сделать правильный обработчик команд.

Редактировать 2: Хорошо, меня попросили код бота, вот это cmdhandle.js:

const Discord = require('discord.js')
const Enmap = require('enmap')
const fs = require('fs')
const client = new Discord.Client();
fs.readdir("../", () => {
});
fs.readdir("./events/", (err, files) => {
  if (err) return console.error(err);
  files.forEach(file => {
    const event = require(`./events/${file}`)
    let eventName = file.split(".")[0];
    client.on(eventName, event.bind(null, client));
  });
});

client.commands = new Enmap();

fs.readdir("./commands/", (err, files) => {
  if (err) return console.error(err);
  files.forEach(file => {
    if (!file.endsWith(".js")) return;
    let props = require(`./commands/${file}`);
    let commandName = file.split(".")[0];
    console.log(`Attempting to load command ${commandName}`);
    client.commands.set(commandName, props);
  });
});

Хорошо, а здесь это main.js:

const Discord = require('discord.js')
const client = new Discord.Client();
const config = require('./extra/config.json')
const varbex = require('./extra/extravars.json')
const cmdh = require('./extra/cmdhandle.js')
eval(varbex) 
eval(cmdh)

client.on('ready', () => {
    console.log("The bot has connected. Connected with the tag " + client.user.tag)
});
client.on('message', msg => {
    if(msg.content.type === 'file') {
        console.log(msg.author.tag + ": [File sent]")
    } else console.log(msg.author.tag + ": " + msg.content)
});
client.login(config.token)

Да, кстати, не упомянул, что в папке ./extra есть специальный файл с дополнительными переменными. Изменить 3: Ошибка, которую я получил:

Hello there!
BotNoob is starting...
internal/modules/cjs/loader.js:800
    throw err;
    ^

Error: Cannot find module './events/message.js'
Require stack:
- C:\Users\mantv\OneDrive\Stalinis kompiuteris\Coding\BotNoob\extra\cmdhandle.js
- C:\Users\mantv\OneDrive\Stalinis kompiuteris\Coding\BotNoob\main.js
[90m    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:797:15)[39m
[90m    at Function.Module._load (internal/modules/cjs/loader.js:690:27)[39m
[90m    at Module.require (internal/modules/cjs/loader.js:852:19)[39m
[90m    at require (internal/modules/cjs/helpers.js:74:18)[39m
    at C:\Users\mantv\OneDrive\Stalinis kompiuteris\Coding\BotNoob\extra\cmdhandle.js:10:19
    at Array.forEach (<anonymous>)
    at C:\Users\mantv\OneDrive\Stalinis kompiuteris\Coding\BotNoob\extra\cmdhandle.js:9:9
[90m    at FSReqCallback.oncomplete (fs.js:146:23)[39m {
  code: [32m'MODULE_NOT_FOUND'[39m,
  requireStack: [
    [32m'C:\\Users\\mantv\\OneDrive\\Stalinis kompiuteris\\Coding\\BotNoob\\extra\\cmdhandle.js'[39m,
    [32m'C:\\Users\\mantv\\OneDrive\\Stalinis kompiuteris\\Coding\\BotNoob\\main.js'[39m
  ]
}
BotNoob just went down. Did we crash, or did we shutdown? Click anything to start again!

1 Ответ

1 голос
/ 27 февраля 2020

Я понимаю, что вы пытаетесь сделать

Вы можете использовать ../(file) или __dirname + (file). Например:

const Discord = require('discord.js')
const Enmap = require('enmap')
const fs = require('fs')
const client = new Discord.Client();
fs.readdir("../", () => {
});
fs.readdir(__dirname + "/events/", (err, files) => {
  if (err) return console.error(err);
  files.forEach(file => {
    const event = require(`./events/${file}`)
    let eventName = file.split(".")[0];
    client.on(eventName, event.bind(null, client));
  });
});

client.commands = new Enmap();

fs.readdir(__dirname + "/commands/", (err, files) => {
  if (err) return console.error(err);
  files.forEach(file => {
    if (!file.endsWith(".js")) return;
    let props = require(`./commands/${file}`);
    let commandName = file.split(".")[0];
    console.log(`Attempting to load command ${commandName}`);
    client.commands.set(commandName, props);
  });
});

Если бы вы могли прикрепить свой код к своему ответу, я был бы более чем рад отредактировать его для вас.

Редактировать: Можете ли вы показать ошибку?

...