У меня была эта проблема с моим ботом разногласий. В основном, вот моя файловая структура:
(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!