Update 1.0.0
This commit is contained in:
10
README.md
10
README.md
@@ -5,7 +5,11 @@ a Discord BOT with User friendly commands, moderation commands and more!
|
|||||||
|
|
||||||
|
|
||||||
## Instructions
|
## Instructions
|
||||||
- create a .env File
|
- .env
|
||||||
- token=yourDiscordBotToken
|
- replace yourDiscordBotToken with your Token
|
||||||
- npm i (to download all libraries)
|
- handler/index.js
|
||||||
|
- replace yourDiscordServerID with your discord server ID
|
||||||
|
- Important: The Bot needs to be in the server!
|
||||||
|
|
||||||
|
- npm i (download all libraries)
|
||||||
- node index.js (to start the bot)
|
- node index.js (to start the bot)
|
||||||
|
|||||||
87
commands/moderation/moveuser.js
Normal file
87
commands/moderation/moveuser.js
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
const Discord = require("discord.js");
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
name: "move-user",
|
||||||
|
description: "[ 🧹 Mover Members ] Move a member from a voice channel to another.",
|
||||||
|
type: Discord.ApplicationCommandType.ChatInput,
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
name: "channel",
|
||||||
|
description: "The new Channel you want to move the User.",
|
||||||
|
channelTypes: [
|
||||||
|
Discord.ChannelType.GuildVoice
|
||||||
|
],
|
||||||
|
type: Discord.ApplicationCommandOptionType.Channel,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "member",
|
||||||
|
description: "Choose a member",
|
||||||
|
type: Discord.ApplicationCommandOptionType.User,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
|
||||||
|
run: async (client, interaction) => {
|
||||||
|
if (!interaction.member.permissions.has(Discord.PermissionFlagsBits.MoveMembers))
|
||||||
|
return interaction.reply({ content: `**Error: Permission Denied!**`, ephemeral: true })
|
||||||
|
|
||||||
|
|
||||||
|
let channel = interaction.options.getChannel("channel")
|
||||||
|
let user = interaction.options.getUser("member")
|
||||||
|
let member = interaction.guild.members.cache.get(user.id)
|
||||||
|
|
||||||
|
if (!member)
|
||||||
|
return interaction.reply({ content: `**Error: Member not found**`, ephemeral: true })
|
||||||
|
|
||||||
|
|
||||||
|
if (!member.voice.channel)
|
||||||
|
return interaction.reply({ content: `**Error: This member is not in a voice channel**`, ephemeral: true })
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
await interaction.deferReply({})
|
||||||
|
|
||||||
|
let embedVoice = new Discord.EmbedBuilder()
|
||||||
|
.setAuthor({ name: `Admin: ${interaction.user.username}`, iconURL: interaction.user.displayAvatarURL() })
|
||||||
|
.setColor("Green")
|
||||||
|
.setFooter({ text: `Member moved: ${member.user.username}`, iconURL: member.user.displayAvatarURL() })
|
||||||
|
.setTimestamp()
|
||||||
|
.setURL(`https://discord.com/channels/${interaction.guild.id}/${canalV.id}`)
|
||||||
|
.setTitle("🧹 - Member Moved!")
|
||||||
|
.setThumbnail(interaction.guild.iconURL({ dynamic: true, extension: 'png' }))
|
||||||
|
.setDescription("*✅ - Member moved successfully!*")
|
||||||
|
.setFields(
|
||||||
|
{
|
||||||
|
name: "🎙 - Voice Channel:",
|
||||||
|
value: `*${canalV}*`,
|
||||||
|
inline: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "🆔 - Voice Chanel ID:",
|
||||||
|
value: `*${canalV.id}*`,
|
||||||
|
inline: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "👤 - Moved Member:",
|
||||||
|
value: `*${member}*`,
|
||||||
|
inline: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "🆔 - Moved member ID:",
|
||||||
|
value: `*${member.id}*`,
|
||||||
|
inline: true
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
await interaction.editReply({ embeds: [embedVoice] })
|
||||||
|
member.voice.setChannel(channel)
|
||||||
|
|
||||||
|
} catch {
|
||||||
|
interaction.editReply({ content: `**Error: Something didn't work...**`, ephemeral: true })
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
39
events/client/interactionCreate.js
Normal file
39
events/client/interactionCreate.js
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
const {InteractionType} = require("discord.js")
|
||||||
|
module.exports = {
|
||||||
|
name: 'interactionCreate',
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {CommandInteraction} interaction
|
||||||
|
* @param {Client} client
|
||||||
|
*/
|
||||||
|
async execute(interaction, client) {
|
||||||
|
|
||||||
|
if (interaction.type !== InteractionType.ApplicationCommand) return;
|
||||||
|
|
||||||
|
const command = client.slash.get(interaction.commandName);
|
||||||
|
if (!command) return interaction.reply({ content: `Command doesn't exist!`, ephemeral: true });
|
||||||
|
|
||||||
|
if (command.ownerOnly) {
|
||||||
|
if (interaction.user.id !== client.config.ownerID) {
|
||||||
|
return interaction.reply({ content: `Permission Denied`, ephemeral: true });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const args = [];
|
||||||
|
|
||||||
|
for (let option of interaction.options.data) {
|
||||||
|
if (option.type === 'SUB_COMMAND') {
|
||||||
|
if (option.name) args.push(option.name);
|
||||||
|
option.options?.forEach(x => {
|
||||||
|
if (x.value) args.push(x.value);
|
||||||
|
});
|
||||||
|
} else if (option.value) args.push(option.value);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
command.run(client, interaction, args)
|
||||||
|
} catch (e) {
|
||||||
|
interaction.reply({ content: e.message });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
35
events/client/messageCreate.js
Normal file
35
events/client/messageCreate.js
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
module.exports = {
|
||||||
|
name: 'messageCreate',
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Message} message
|
||||||
|
* @param {Client} client
|
||||||
|
*/
|
||||||
|
async execute(message, client) {
|
||||||
|
if (message.author.bot || !message.guild || !message.content.toLowerCase().startsWith(client.config.botPrefix)) return;
|
||||||
|
const [cmd, ...args] = message.content.slice(client.config.botPrefix.length).trim().split(" ");
|
||||||
|
const command = client.commands.get(cmd.toLowerCase()) || client.commands.find(c => c.aliases?.includes(cmd.toLowerCase()));
|
||||||
|
|
||||||
|
//Se quiser que o bot não retorne nada caso o comando não existe
|
||||||
|
//if (!command) { return }
|
||||||
|
|
||||||
|
//Se quiser que o bot retorne alguma mensagem
|
||||||
|
if (!command) {
|
||||||
|
return message.reply({ content: `:x: **|** Comando não encontrado` })
|
||||||
|
}
|
||||||
|
|
||||||
|
//Se quiser que o bot não retorne nada ao usar um comando apenas para dev
|
||||||
|
/*if (command.ownerOnly) {
|
||||||
|
if (message.author.id !== client.config.ownerID) { return }
|
||||||
|
}*/
|
||||||
|
|
||||||
|
//se quiser que o bot retorne alguma mensagem
|
||||||
|
if (command.ownerOnly) {
|
||||||
|
if (message.author.id !== client.config.ownerID) {
|
||||||
|
return message.reply({ content: `:x: **|** Apenas meu criador pode usar esse comando!` })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
await command.run(client, message, args);
|
||||||
|
}
|
||||||
|
}
|
||||||
32
events/client/ready.js
Normal file
32
events/client/ready.js
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
const client = require("../../index");
|
||||||
|
const { ActivityType } = require('discord.js')
|
||||||
|
const chalk = require("chalk");
|
||||||
|
const { joinVoiceChannel } = require("@discordjs/voice");
|
||||||
|
const Discord = require('discord.js')
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
name: 'ready',
|
||||||
|
once: true,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Client} client
|
||||||
|
*/
|
||||||
|
async execute(client) {
|
||||||
|
|
||||||
|
let status = [
|
||||||
|
`by info@noahpombas.ch`,
|
||||||
|
`Spoiler: novo Servidor de Minecraft brevemente`
|
||||||
|
],
|
||||||
|
i = 0
|
||||||
|
setInterval(() => {
|
||||||
|
client.user.setActivity(`${status[i++ % status.length]}`, {
|
||||||
|
type: ActivityType.Streaming
|
||||||
|
})
|
||||||
|
}, 5000);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
console.log(chalk.blueBright(`[READY] Bot Online!`));
|
||||||
|
}
|
||||||
|
}
|
||||||
64
handler/index.js
Normal file
64
handler/index.js
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
const fs = require("node:fs");
|
||||||
|
const chalk = require("chalk");
|
||||||
|
|
||||||
|
//Carregar eventos
|
||||||
|
const loadEvents = async function (client) {
|
||||||
|
const eventFolders = fs.readdirSync("./events");
|
||||||
|
for (const folder of eventFolders) {
|
||||||
|
const eventFiles = fs
|
||||||
|
.readdirSync(`./events/${folder}`)
|
||||||
|
.filter((file) => file.endsWith(".js"));
|
||||||
|
|
||||||
|
for (const file of eventFiles) {
|
||||||
|
const event = require(`../events/${folder}/${file}`);
|
||||||
|
|
||||||
|
if (event.name) {
|
||||||
|
console.log(chalk.greenBright(` ✔️ => ${file} Event loaded.`));
|
||||||
|
} else {
|
||||||
|
console.log(chalk.redBright(` ❌ => ${file} Event not loaded.`));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (event.once) {
|
||||||
|
client.once(event.name, (...args) => event.execute(...args, client));
|
||||||
|
} else {
|
||||||
|
client.on(event.name, (...args) => event.execute(...args, client));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Carregar slashcommands
|
||||||
|
const loadSlashCommands = async function (client) {
|
||||||
|
let slash = []
|
||||||
|
|
||||||
|
const commandFolders = fs.readdirSync("./commands");
|
||||||
|
for (const folder of commandFolders) {
|
||||||
|
const commandFiles = fs
|
||||||
|
.readdirSync(`./commands/${folder}`)
|
||||||
|
.filter((file) => file.endsWith(".js"));
|
||||||
|
|
||||||
|
for (const file of commandFiles) {
|
||||||
|
const command = require(`../commands/${folder}/${file}`);
|
||||||
|
|
||||||
|
if (command.name) {
|
||||||
|
client.slash.set(command.name, command);
|
||||||
|
slash.push(command)
|
||||||
|
console.log(chalk.greenBright(` ✔️ => ${file} Command loaded`));
|
||||||
|
} else {
|
||||||
|
console.log(chalk.redBright(` ❌ => ${file} Command not loaded`));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
client.on("ready", async () => {
|
||||||
|
await client.guilds.cache.get("yourDiscordServerID").commands.set(slash);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
loadEvents,
|
||||||
|
loadSlashCommands
|
||||||
|
}
|
||||||
14
index.js
Normal file
14
index.js
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
const Discord = require("discord.js");
|
||||||
|
const client = new Discord.Client({intents: 32767});
|
||||||
|
const handler = require("./handler/index");
|
||||||
|
require("dotenv").config()
|
||||||
|
|
||||||
|
module.exports = client;
|
||||||
|
client.discord = Discord;
|
||||||
|
|
||||||
|
client.slash = new Discord.Collection();
|
||||||
|
|
||||||
|
handler.loadEvents(client);
|
||||||
|
handler.loadSlashCommands(client);
|
||||||
|
|
||||||
|
client.login(process.env.TOKEN);
|
||||||
17
package.json
Normal file
17
package.json
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"name": "project-bot",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"author": "noahpombas.ch",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"@discordjs/voice": "^0.16.1",
|
||||||
|
"chalk": "^4.1.2",
|
||||||
|
"discord.js": "^14.12.1",
|
||||||
|
"dotenv": "^16.4.5"
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user