diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 0000000..6e01b48
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1,4 @@
+# These are supported funding model platforms
+
+patreon: https://patreon.com/alixbot
+custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
diff --git a/.replit b/.replit
new file mode 100644
index 0000000..3181441
--- /dev/null
+++ b/.replit
@@ -0,0 +1,2 @@
+language = "nodejs"
+run = "node index.js"
diff --git a/Procfile b/Procfile
new file mode 100644
index 0000000..f2d1f0b
--- /dev/null
+++ b/Procfile
@@ -0,0 +1 @@
+worker: node index.js
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..17b0788
--- /dev/null
+++ b/README.md
@@ -0,0 +1,38 @@
+
+
+# Alix Beta
+
+[](https://repl.it/github/ayaan1005/Alix-Beta)
+[](https://alix.glitch.me)
+[](https://top.gg/bot/693846748824862770/vote)
+[](https://github.com/discordjs)
+[](https://www.patreon.com/alixbot)
+
+> This bot is used by more than 70,000+ Discord users and more than 90+ servers.
+
+Alix Beta Is A Open Sourced Discord Bot Can Use In Many Was Like To Make Server Full Moderation Filled, And Fun. Coded With JavaScript [Discord.js](https://discord.js.org) And [Quick.db](https://quickdb.js.org/) Made By [AyaanDEV](https://github.com/ayaan1005/)
+ Feel free to add a star ⭐ to the repository to promote the project!
+
+## Links
+
+* [Commands List](https://allix.glitch.me/commands)
+* [F.A.Q](https://discord.gg/qBbgnxs)
+* [Discord](https://alix.glitch.me/community)
+* [Github](https://github.com/ayaan1005/Alix-Beta)
+* [Dashboard](https://alix.glitch.me/dashboard)
+* [Embed Gen](https://alix.glitch.me/embed)
+
+## License
+
+Alix Beta is licensed under the GPL 3.0 license. See the file `LICENSE` for more information. If you plan to use any part of this source code in your own bot, I would be grateful if you would include some form of credit somewhere.
+
+## Security
+
+For secutiry purposes check `SECURITY.md`
+
+## Top.GG
+
+Vote Alix And Have 24h Free Credit Of Premium Usage `SOON!`
+
+
+
diff --git a/botconfig.json b/botconfig.json
index 19fc3d9..746ddb1 100644
--- a/botconfig.json
+++ b/botconfig.json
@@ -1,8 +1,11 @@
{
- "token": "Your Token",
- "prefix": "Prefix",
- "nodes": [
- { "host": "Host Name", "port": 2333, "password": "Your Pass"}
- ],
- "ownerid": "Owner Id"
+ "token": "Your Bot Token",
+ "prefix": "Bot Prefix",
+ "report_channelid": "Channel ID Where Bug Reports Comes",
+ "support_server": "Your Bots Support Server",
+ "main_ownerid": "Your Id",
+ "extra_ownerid": [
+ "Owner 1",
+ "Owner 2"
+ ]
}
diff --git a/commands/music/leave.js b/commands/music/leave.js
deleted file mode 100644
index 2b42c85..0000000
--- a/commands/music/leave.js
+++ /dev/null
@@ -1,19 +0,0 @@
-module.exports = {
- config: {
- name: "leave",
- aliases: ["lev", "stop"],
- description: "Makes the bot leave the voice channel.",
- accessableby: "Member",
- category: "music",
- },
- run: async (bot, message, args) => {
- const { voiceChannel } = message.member;
- const player = bot.music.players.get(message.guild.id);
-
- if(!player) return message.channel.send("No song/s currently playing in this guild.");
- if(!voiceChannel || voiceChannel.id !== player.voiceChannel.id) return message.channel.send("You need to be in a voice channel to use the leave command.");
-
- bot.music.players.destroy(message.guild.id);
- return message.channel.send("Successfully stopped the music.")
- }
-}
\ No newline at end of file
diff --git a/commands/music/nowplaying.js b/commands/music/nowplaying.js
deleted file mode 100644
index fe4b5af..0000000
--- a/commands/music/nowplaying.js
+++ /dev/null
@@ -1,27 +0,0 @@
-const { Utils } = require("erela.js")
-const { RichEmbed } = require("discord.js")
-const { stripIndents } = require("common-tags")
-
-module.exports = {
- config: {
- name: "nowplaying",
- aliases: ["np", "now"],
- description: "Displays what the bot is currently playing.",
- accessableby: "Member",
- category: "music",
- },
- run: async (bot, message, args) => {
- const player = bot.music.players.get(message.guild.id);
- if (!player || !player.queue[0]) return message.channel.send("No song/s currently playing within this guild.");
- const { title, author, duration, thumbnail } = player.queue[0];
-
- const embed = new RichEmbed()
- .setAuthor("Current Song Playing.", message.author.displayAvatarURL)
- .setThumbnail(thumbnail)
- .setDescription(stripIndents`
- ${player.playing ? "▶️" : "⏸️"} **${title}** \`${Utils.formatTime(duration, true)}\` by ${author}
- `);
-
- return message.channel.send(embed);
- }
-}
\ No newline at end of file
diff --git a/commands/music/pause.js b/commands/music/pause.js
deleted file mode 100644
index bd3ddab..0000000
--- a/commands/music/pause.js
+++ /dev/null
@@ -1,20 +0,0 @@
-module.exports = {
- config: {
- name: "pause",
- aliases: ["resume"],
- description: "Makes the bot pause/resume the music currently playing.",
- accessableby: "Member",
- category: "music",
- },
- run: (bot, message, args) => {
- const player = bot.music.players.get(message.guild.id);
- if (!player) return message.channel.send("No song/s currently playing in this guild.");
-
- const { voiceChannel } = message.member;
- if (!voiceChannel || voiceChannel.id !== player.voiceChannel.id) return message.channel.send("You need to be in a voice channel to pause music.");
-
-
- player.pause(player.playing);
- return message.channel.send(`Player is now ${player.playing ? "resumed" : "paused"}.`);
- }
-}
\ No newline at end of file
diff --git a/commands/music/play.js b/commands/music/play.js
deleted file mode 100644
index 0c492c2..0000000
--- a/commands/music/play.js
+++ /dev/null
@@ -1,74 +0,0 @@
-const { Utils } = require("erela.js")
-const { RichEmbed } = require("discord.js")
-
-module.exports = {
- config: {
- name: "play",
- description: "Play a song/playlist or search for a song from youtube",
- usage: "",
- category: "music",
- accessableby: "Member",
- aliases: ["p", "pplay"]
- },
- run: async (bot, message, args) => {
- const { voiceChannel } = message.member;
- if (!voiceChannel) return message.channel.send("You need to be in a voice channel to play music.");
-
- const permissions = voiceChannel.permissionsFor(bot.user);
- if (!permissions.has("CONNECT")) return message.channel.send("I cannot connect to your voice channel, make sure I have permission to!");
- if (!permissions.has("SPEAK")) return message.channel.send("I cannot connect to your voice channel, make sure I have permission to!");
-
- if (!args[0]) return message.channel.send("Please provide a song name or link to search.");
-
- const player = bot.music.players.spawn({
- guild: message.guild,
- textChannel: message.channel,
- voiceChannel
- });
-
- bot.music.search(args.join(" "), message.author).then(async res => {
- switch (res.loadType) {
- case "TRACK_LOADED":
- player.queue.add(res.tracks[0]);
- message.channel.send(`Enqueuing \`${res.tracks[0].title}\` \`${Utils.formatTime(res.tracks[0].duration, true)}\``);
- if (!player.playing) player.play()
- break;
-
- case "SEARCH_RESULT":
- let index = 1;
- const tracks = res.tracks.slice(0, 5);
- const embed = new RichEmbed()
- .setAuthor("Song Selection.", message.author.displayAvatarURL)
- .setDescription(tracks.map(video => `**${index++} -** ${video.title}`))
- .setFooter("Your response time closes within the next 30 seconds. Type 'cancel' to cancel the selection");
-
- await message.channel.send(embed);
-
- const collector = message.channel.createMessageCollector(m => {
- return m.author.id === message.author.id && new RegExp(`^([1-5]|cancel)$`, "i").test(m.content)
- }, { time: 30000, max: 1});
-
- collector.on("collect", m => {
- if (/cancel/i.test(m.content)) return collector.stop("cancelled")
-
- const track = tracks[Number(m.content) - 1];
- player.queue.add(track)
- message.channel.send(`Enqueuing \`${track.title}\` \`${Utils.formatTime(track.duration, true)}\``);
- if(!player.playing) player.play();
- });
-
- collector.on("end", (_, reason) => {
- if(["time", "cancelled"].includes(reason)) return message.channel.send("Cancelled selection.")
- });
- break;
-
- case "PLAYLIST_LOADED":
- res.playlist.tracks.forEach(track => player.queue.add(track));
- const duration = Utils.formatTime(res.playlist.tracks.reduce((acc, cur) => ({duration: acc.duration + cur.duration})).duration, true);
- message.channel.send(`Enqueuing \`${res.playlist.tracks.length}\` \`${duration}\` tracks in playlist \`${res.playlist.info.name}\``);
- if(!player.playing) player.play()
- break;
- }
- }).catch(err => message.channel.send(err.message))
- }
-}
\ No newline at end of file
diff --git a/commands/music/queue.js b/commands/music/queue.js
deleted file mode 100644
index 2004291..0000000
--- a/commands/music/queue.js
+++ /dev/null
@@ -1,28 +0,0 @@
-const { RichEmbed } = require("discord.js")
-
-module.exports = {
- config: {
- name: "queue",
- aliases: ["q", "now"],
- description: "Displays what the current queue is.",
- accessableby: "Member",
- category: "music",
- },
- run: async (bot, message, args) => {
- const player = bot.music.players.get(message.guild.id);
- if(!player || !player.queue[0]) return message.channel.send("No song currently playing in this guild.");
-
- let index = 1;
- let string = "";
-
- if(player.queue[0]) string += `__**Currently Playing**__\n ${player.queue[0].title} - **Requested by ${player.queue[0].requester.username}**. \n`;
- if(player.queue[1]) string += `__**Rest of queue:**__\n ${player.queue.slice(1, 10).map(x => `**${index++})** ${x.title} - **Requested by ${x.requester.username}**.`).join("\n")}`;
-
- const embed = new RichEmbed()
- .setAuthor(`Current Queue for ${message.guild.name}`, message.guild.iconURL)
- .setThumbnail(player.queue[0].thumbnail)
- .setDescription(string);
-
- return message.channel.send(embed);
- }
-}
\ No newline at end of file
diff --git a/commands/music/skip.js b/commands/music/skip.js
deleted file mode 100644
index f54b1d2..0000000
--- a/commands/music/skip.js
+++ /dev/null
@@ -1,20 +0,0 @@
-module.exports = {
- config: {
- name: "skip",
- aliases: ["next"],
- description: "Skips the song currently playing.",
- accessableby: "Member",
- category: "music",
- usage: ""
- },
- run: (bot, message, args) => {
- const player = bot.music.players.get(message.guild.id);
- if(!player) return message.channel.send("No song/s currently playing in this guild.");
-
- const { voiceChannel } = message.member;
- if(!voiceChannel || voiceChannel.id !== player.voiceChannel.id) return message.channel.send("You need to be in a voice channel to use the skip command.");
-
- player.stop();
- return message.channel.send("Skipped the current song!");
- }
-}
\ No newline at end of file
diff --git a/commands/music/volume.js b/commands/music/volume.js
deleted file mode 100644
index 4b7592c..0000000
--- a/commands/music/volume.js
+++ /dev/null
@@ -1,23 +0,0 @@
-module.exports = {
- config: {
- name: "volume",
- aliases: ["vol", "v"],
- description: "Adjusts the volume of the bot.",
- accessableby: "Member",
- category: "music",
- usage: ""
- },
- run: async (bot, message, args) => {
- const player = bot.music.players.get(message.guild.id);
- if (!player) return message.channel.send("No song/s currently playing within this guild.");
-
- const { voiceChannel } = message.member;
- if (!voiceChannel || voiceChannel.id !== player.voiceChannel.id) return message.channel.send("You need to be in a voice channel to adjust the volume.");
-
- if (!args[0]) return message.channel.send(`Current Volume: ${player.volume}`);
- if (Number(args[0]) <= 0 || Number(args[0]) > 100) return message.channel.send("You may only set the volume to 1-100");
-
- player.setVolume(Number(args[0]));
- return message.channel.send(`Successfully set the volume to: ${args[0]}`)
- }
-}
\ No newline at end of file
diff --git a/events/client/ready.js b/events/client/ready.js
index 3c9914a..3dc398f 100644
--- a/events/client/ready.js
+++ b/events/client/ready.js
@@ -4,21 +4,6 @@ const { nodes } = require("../../botconfig.json")
module.exports = bot => {
console.log(`${bot.user.username} is online`);
- bot.music = new ErelaClient(bot, nodes)
- .on("nodeError", console.log)
- .on("nodeConnect", () => console.log("Successfully created a new Node."))
- .on("queueEnd", player => {
- player.textChannel.send("Queue has ended.")
- return bot.music.players.destroy(player.guild.id)
- })
- .on("trackStart", ({textChannel}, {title, duration}) => textChannel.send(`Now playing: **${title}** \`${Utils.formatTime(duration, true)}\``).then(m => m.delete(15000)));
-
- bot.levels = new Map()
- .set("none", 0.0)
- .set("low", 0.10)
- .set("medium", 0.15)
- .set("high", 0.25);
-
let activities = [ `${bot.guilds.size} servers!`, `${bot.channels.size} channels!`, `${bot.users.size} users!` ], i = 0;
setInterval(() => bot.user.setActivity(`!!help | ${activities[i++ % activities.length]}`, { type: "WATCHING" }), 15000)
-};
\ No newline at end of file
+};
diff --git a/handlers/command.js b/handlers/command.js
index 2c71273..8e469d9 100644
--- a/handlers/command.js
+++ b/handlers/command.js
@@ -9,5 +9,5 @@ const load = dirs => {
if(pull.config.aliases) pull.config.aliases.forEach(a => bot.aliases.set(a, pull.config.name))
}
}
- ["miscellaneous", "moderation", "music", "owner", "games", "image", "economy"].forEach(x => load(x))
-}
\ No newline at end of file
+ ["miscellaneous", "moderation", "owner", "games", "image", "economy"].forEach(x => load(x))
+}