Skip to content

Commit

Permalink
Merge pull request #3 from stho32/main
Browse files Browse the repository at this point in the history
A bunch of good ideas
  • Loading branch information
naseif authored Oct 2, 2021
2 parents 285f008 + 93646fb commit da0ea22
Show file tree
Hide file tree
Showing 7 changed files with 119 additions and 81 deletions.
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

<p align="center">
<b>Eyesense is a feature-rich discord bot that plays music from various platforms and more. <br>
The bot is still in the development phase You can check the release page for the stable releases</b>
The bot is still in the development phase. You can check the release page for the stable releases.</b>

</p>

Expand Down Expand Up @@ -95,19 +95,19 @@ if you are having problems installing sodium, make sure to install the following

First you need to create a new application in the [Discord Developer Portal](https://discord.com/developers/applications) and then create a bot to get your own discord Token and invite the bot to your server. Once you got your key, rename `config.example.json` to `config.json`. Now open the `config.json` file and add your discord bot tokens.

Once you are done, you can now start the bot by running the follwoing:
Once you are done, you can now start the bot by running the following:
```node index.js```

### Recommendation

Use pm2 to run the bot in the background and restart it on internet issues, or in case the bot crashed
Use pm2 to run the bot in the background and automatically restart it when e.g. your server has internet issues:

Simply install the pm2 package globally using ```npm i pm2 -g``` and then instead of ```node index.js``` run ```pm2 start index.js```


## Contributions

Software contributions are welcome. If you are not a dev, testing and reproting bugs can also be very helpful!
Software contributions are welcome. If you are not a dev, testing and reporting bugs can also be very helpful!

## Questions?

Expand Down
19 changes: 19 additions & 0 deletions events/interactionCreate.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
module.exports = {
name: "interactionCreate",
once: false,
async execute(interaction) {
if (!interaction.isCommand()) return;
const command = client.commands.get(interaction.commandName);
if (!command) return;

try {
await command.execute(interaction, client);
} catch (error) {
console.error(error);
await interaction.reply({
content: "There was an error while executing this command!",
ephemeral: true,
});
}
},
};
29 changes: 29 additions & 0 deletions events/messageCreate.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
module.exports = {
name: "messageCreate",
once: false,
async execute(message) {
if (message.author.bot) return;
if (!message.guild) return;

const args = message.content.slice(prefix.length).trim().split(/ +/);
const commandName = args.shift().toLowerCase();

const command =
client.commands.get(commandName) ||
client.commands.find(
(cmd) => cmd.aliases && cmd.aliases.includes(commandName)
);

if (!command) return;

try {
command.run(message, args, client, prefix);
} catch (error) {
client.logger(error.message, "error");
embed.setDescription(
"There was an error executing that command.\nI have contacted the owner of the bot to fix it immediately."
);
return message.channel.send({ embeds: [embed] });
}
},
};
2 changes: 1 addition & 1 deletion events/ready.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const { registerSlashCommands } = require("../deploy-commands");
const { registerSlashCommands } = require("../modules/deploy-commands");

module.exports = {
name: "ready",
Expand Down
78 changes: 6 additions & 72 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
const fs = require("fs");
const { Client, Collection, Intents } = require("discord.js");
const { logger } = require("./modules/logger.js");
const { token, prefix } = require("./config.json");
const { commandsHelper } = require("./modules/commandsHelper");

const client = new Client({
intents: [
Intents.FLAGS.GUILD_MEMBERS,
Expand All @@ -19,77 +20,10 @@ client.player = player;
client.commands = new Collection();
client.logger = logger;

// All commands!
const allCommandsFolders = fs.readdirSync("./commands");

for (const folder of allCommandsFolders) {
const commandFiles = fs
.readdirSync(`./commands/${folder}`)
.filter((file) => file.endsWith(".js"));
for (const file of commandFiles) {
const command = require(`./commands/${folder}/${file}`);
command.category = folder;
client.commands.set(command.data.name, command);
}
}

// Loop through the events and require them
const eventFiles = fs
.readdirSync("./events")
.filter((file) => file.endsWith(".js"));

for (const file of eventFiles) {
const event = require(`./events/${file}`);
if (event.once) {
client.once(event.name, (...args) => event.execute(...args));
} else {
client.on(event.name, (...args) => event.execute(...args));
}
}

// Register everything...
commandsHelper.registerAllCommands("./commands", client);
commandsHelper.registerAllEvents("./events", client);
playerEvents(client.player);

// Initialize the client on interaction
client.on("interactionCreate", async (interaction) => {
if (!interaction.isCommand()) return;
const command = client.commands.get(interaction.commandName);
if (!command) return;

try {
await command.execute(interaction, client);
} catch (error) {
console.error(error);
await interaction.reply({
content: "There was an error while executing this command!",
ephemeral: true,
});
}
});

client.on("messageCreate", async (message) => {
if (message.author.bot) return;
if (!message.guild) return;

const args = message.content.slice(prefix.length).trim().split(/ +/);
const commandName = args.shift().toLowerCase();

const command =
client.commands.get(commandName) ||
client.commands.find(
(cmd) => cmd.aliases && cmd.aliases.includes(commandName)
);

if (!command) return;

try {
command.run(message, args, client, prefix);
} catch (error) {
client.logger(error.message, "error");
embed.setDescription(
"There was an error executing that command.\nI have contacted the owner of the bot to fix it immediately."
);
return message.channel.send({ embeds: [embed] });
}
});

// ... and go!
client.login(token);
56 changes: 56 additions & 0 deletions modules/commandsHelper.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/***
* CommandsHelper - Help for commands
*
* It may make no sense, but it is ours!
*/
const fs = require("fs");

let commandsHelper = function () {
let api = {}

/**
* Registers all commands in the given subdirectory into the client collection
*
* @param {string} commandsFolder Path to folder that contains all commands
* @param {Client} client The discord client
*/
api.registerAllCommands = function (commandsFolder, client) {
const allCommandsFolders = fs.readdirSync(commandsFolder);

for (const folder of allCommandsFolders) {
const commandFiles = fs
.readdirSync(`${commandsFolder}/${folder}`)
.filter((file) => file.endsWith(".js"));
for (const file of commandFiles) {
const command = require(`${commandsFolder}/${folder}/${file}`);
command.category = folder;
client.commands.set(command.data.name, command);
}
}
}

/**
* Registers all events in the given subdirectory on the client
*
* @param {string} eventFolder Path to folder that contains all events
* @param {Client} client The discord client
*/
api.registerAllEvents = function (eventFolder, client) {
const eventFiles = fs
.readdirSync(eventFolder)
.filter((file) => file.endsWith(".js"));

for (const file of eventFiles) {
const event = require(`${eventFolder}/${file}`);
if (event.once) {
client.once(event.name, (...args) => event.execute(...args));
} else {
client.on(event.name, (...args) => event.execute(...args));
}
}
}

return api;
}

module.exports.commandsHelper = commandsHelper();
8 changes: 4 additions & 4 deletions deploy-commands.js → modules/deploy-commands.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
const fs = require("fs");
const { REST } = require("@discordjs/rest");
const { Routes } = require("discord-api-types/v9");
const { token } = require("./config.json");
const { token } = require("../config.json");
const rest = new REST({ version: "9" }).setToken(token);

const commands = [];
const commandFolders = fs.readdirSync("./commands");
const commandFolders = fs.readdirSync("../commands");

for (const folder of commandFolders) {
const commandFiles = fs
.readdirSync(`./commands/${folder}`)
.readdirSync(`../commands/${folder}`)
.filter((file) => file.endsWith(".js"));
for (const file of commandFiles) {
const command = require(`./commands/${folder}/${file}`);
const command = require(`../commands/${folder}/${file}`);
commands.push(command.data.toJSON());
}
}
Expand Down

0 comments on commit da0ea22

Please sign in to comment.