├── .github ├── FUNDING.yml └── workflows │ └── welcome-first-time-contributors.yml ├── .gitignore ├── .replit ├── Base ├── Functions.js └── Permissions.js ├── CODE_OF_CONDUCT.md ├── Commands ├── Anime │ ├── anime.js │ ├── baka.js │ ├── fact.js │ ├── hug.js │ ├── karma.js │ ├── kiss.js │ ├── neko.js │ ├── pat.js │ ├── poke.js │ ├── slap.js │ ├── smug.js │ ├── tickle.js │ ├── waifu.js │ ├── whatanime.js │ └── wink.js ├── Buttons │ ├── snake.js │ └── wyr.js ├── Chatbot │ ├── chatbot.js │ ├── disablechatbotchannel.js │ └── setchatbotchannel.js ├── Fun │ ├── binary.js │ ├── clyde.js │ ├── comment.js │ ├── country.js │ ├── eject.js │ ├── emojify.js │ ├── github.js │ ├── iq.js │ ├── npm.js │ ├── osu.js │ ├── ping.js │ ├── reddit.js │ ├── weather.js │ └── zalgo.js ├── Image │ ├── affect.js │ ├── beautiful.js │ ├── delete.js │ ├── fire.js │ ├── respect.js │ ├── rip.js │ ├── scary.js │ ├── trash.js │ └── triggered.js ├── Info │ ├── help.js │ ├── info.js │ ├── invite.js │ ├── repo.js │ └── uptime.js ├── Music │ ├── clear-queue.js │ ├── filter.js │ ├── filters.js │ ├── leave.js │ ├── loop.js │ ├── lyrics.js │ ├── np.js │ ├── pause.js │ ├── play.js │ ├── queue.js │ ├── resume.js │ ├── search.js │ ├── shuffle.js │ ├── skip.js │ └── volume.js ├── Nsfw │ ├── bondage.js │ ├── hentai.js │ └── thigh.js ├── Other │ ├── addemoji.js │ ├── avatar.js │ ├── emojilist.js │ ├── profile.js │ ├── snipe.js │ ├── urban.js │ └── wiki.js └── Owner │ ├── eval.js │ └── reload.js ├── Configs ├── config.js ├── emotes.js └── filters.js ├── Events ├── message.js ├── messageDelete.js └── ready.js ├── Installation.md ├── LICENSE ├── Loader.js ├── README.md ├── Structures ├── Client.js └── Database.js ├── Utils ├── Global.js └── Logger.js ├── index.js ├── node.sh ├── package-lock.json ├── package.json └── player-events ├── botDisconnect.js ├── channelEmpty.js ├── error.js ├── noResults.js ├── playlistAdd.js ├── queueEnd.js ├── searchCancel.js ├── searchInvalidResponse.js ├── searchResults.js ├── trackAdd.js └── trackStart.js /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: deltacoderr # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 13 | -------------------------------------------------------------------------------- /.github/workflows/welcome-first-time-contributors.yml: -------------------------------------------------------------------------------- 1 | name: Welcome first time contributors 2 | 3 | on: 4 | pull_request_target: 5 | types: 6 | - opened 7 | issues: 8 | types: 9 | - opened 10 | 11 | jobs: 12 | welcome: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - uses: actions/first-interaction@v1 16 | with: 17 | repo-token: ${{ secrets.GITHUB_TOKEN }} 18 | issue-message: | 19 | Hello there ${{ github.actor }} 👋 20 | 21 | Welcome to KarmaBot!! 💖🥳 22 | 23 | Thank you and congratulations 🎉 for opening your very first issue in this project. KarmaBot fosters an open and welcoming environment for all our contributors.🌸 Please adhere to our [Code Of Conduct](https://github.com/DeltaCoderr/KarmaBot/blob/main/CODE_OF_CONDUCT.md). 24 | 25 | Incase you want to claim this issue, please comment down below! We will try to get back to you as soon as we can.👀 26 | 27 | Feel free to visit [karma.deltaa.me](https://karma.deltaa.me/). 👩‍💻 If you have any interesting ideas , simply open an issue and we would love to hear you and engage in discussions.💖 28 | 29 | pr-message: | 30 | Hello there ${{ github.actor }} 👋 31 | 32 | Thank you and congrats 🎉 for opening your first PR on this project.✨ 33 | 34 | We will review it soon! 35 | 36 | KarmaBot fosters an open and welcoming environment for all our contributors.🌸 Please adhere to our [Code Of Conduct](https://github.com/DeltaCoderr/KarmaBot/blob/main/CODE_OF_CONDUCT.md). 37 | 38 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | .pnpm-debug.log* 9 | 10 | # Diagnostic reports (https://nodejs.org/api/report.html) 11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 12 | 13 | # Runtime data 14 | pids 15 | *.pid 16 | *.seed 17 | *.pid.lock 18 | 19 | # Directory for instrumented libs generated by jscoverage/JSCover 20 | lib-cov 21 | 22 | # Coverage directory used by tools like istanbul 23 | coverage 24 | *.lcov 25 | 26 | # nyc test coverage 27 | .nyc_output 28 | 29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 30 | .grunt 31 | 32 | # Bower dependency directory (https://bower.io/) 33 | bower_components 34 | 35 | # node-waf configuration 36 | .lock-wscript 37 | 38 | # Compiled binary addons (https://nodejs.org/api/addons.html) 39 | build/Release 40 | 41 | # Dependency directories 42 | node_modules/ 43 | jspm_packages/ 44 | 45 | # Snowpack dependency directory (https://snowpack.dev/) 46 | web_modules/ 47 | 48 | # TypeScript cache 49 | *.tsbuildinfo 50 | 51 | # Optional npm cache directory 52 | .npm 53 | 54 | # Optional eslint cache 55 | .eslintcache 56 | 57 | # Optional stylelint cache 58 | .stylelintcache 59 | 60 | # Microbundle cache 61 | .rpt2_cache/ 62 | .rts2_cache_cjs/ 63 | .rts2_cache_es/ 64 | .rts2_cache_umd/ 65 | 66 | # Optional REPL history 67 | .node_repl_history 68 | 69 | # Output of 'npm pack' 70 | *.tgz 71 | 72 | # Yarn Integrity file 73 | .yarn-integrity 74 | 75 | # dotenv environment variable files 76 | .env 77 | .env.development.local 78 | .env.test.local 79 | .env.production.local 80 | .env.local 81 | 82 | # parcel-bundler cache (https://parceljs.org/) 83 | .cache 84 | .parcel-cache 85 | 86 | # Next.js build output 87 | .next 88 | out 89 | 90 | # Nuxt.js build / generate output 91 | .nuxt 92 | dist 93 | 94 | # Gatsby files 95 | .cache/ 96 | # Comment in the public line in if your project uses Gatsby and not Next.js 97 | # https://nextjs.org/blog/next-9-1#public-directory-support 98 | # public 99 | 100 | # vuepress build output 101 | .vuepress/dist 102 | 103 | # vuepress v2.x temp and cache directory 104 | .temp 105 | 106 | # Docusaurus cache and generated files 107 | .docusaurus 108 | 109 | # Serverless directories 110 | .serverless/ 111 | 112 | # FuseBox cache 113 | .fusebox/ 114 | 115 | # DynamoDB Local files 116 | .dynamodb/ 117 | 118 | # TernJS port file 119 | .tern-port 120 | 121 | # Stores VSCode versions used for testing VSCode extensions 122 | .vscode-test 123 | 124 | # yarn v2 125 | .yarn/cache 126 | .yarn/unplugged 127 | .yarn/build-state.yml 128 | .yarn/install-state.gz 129 | .pnp.* 130 | 131 | ### Node Patch ### 132 | # Serverless Webpack directories 133 | .webpack/ 134 | 135 | # Optional stylelint cache 136 | 137 | # SvelteKit build / generate output 138 | .svelte-kit 139 | 140 | # End of https://www.toptal.com/developers/gitignore/api/node -------------------------------------------------------------------------------- /.replit: -------------------------------------------------------------------------------- 1 | run="bash node.sh" 2 | -------------------------------------------------------------------------------- /Base/Functions.js: -------------------------------------------------------------------------------- 1 | const request = require('node-fetch'); 2 | const { createCanvas, loadImage } = require('canvas'); 3 | const { GuildMember, User } = require('discord.js') 4 | 5 | async function fetchRateLimit() { 6 | try { 7 | const { body } = await request.get('https://trace.moe/api/me'); 8 | return { status: body.user_limit > 0, refresh: body.user_limit_ttl }; 9 | } catch { 10 | return { status: false, refresh: Infinity }; 11 | } 12 | }; 13 | 14 | async function search(file) { 15 | if (Buffer.byteLength(file) > 1e+7) return 'size'; 16 | const { body } = await request 17 | .post('https://trace.moe/api/search') 18 | .attach('image', base64(file)); 19 | const data = body.docs[0]; 20 | return { 21 | prob: Math.round(data.similarity * 100), 22 | episode: data.episode, 23 | title: data.title_english, 24 | preview: await fetchPreview(data), 25 | nsfw: data.is_adult 26 | }; 27 | }; 28 | 29 | async function fetchPreview(data) { 30 | try { 31 | const { body } = await request 32 | .get(`https://media.trace.moe/video/${data.anilist_id}/${encodeURIComponent(data.filename)}`) 33 | .query({ 34 | t: data.at, 35 | token: data.tokenthumb, 36 | mute: true, 37 | size: 'm' 38 | }); 39 | return body; 40 | } catch { 41 | return null; 42 | } 43 | }; 44 | 45 | async function convertGIF(image) { 46 | const data = await loadImage(image); 47 | const canvas = createCanvas(data.width, data.height); 48 | const ctx = canvas.getContext('2d'); 49 | ctx.drawImage(data, 0, 0); 50 | return canvas.toBuffer(); 51 | } 52 | 53 | 54 | async function base64(text, mode = 'encode') { 55 | if (mode === 'encode') return Buffer.from(text).toString('base64'); 56 | if (mode === 'decode') return Buffer.from(text, 'base64').toString('utf8') || null; 57 | throw new TypeError(`${mode} is not a supported base64 mode.`); 58 | }; 59 | 60 | 61 | async function resolveMember(query, guild) { 62 | if(query instanceof GuildMember) return query; 63 | if(query instanceof User) return guild.members.fetch(query); 64 | 65 | if(typeof query !== 'string') return null; 66 | 67 | if(/^(?:<@!?)?(\d{17,19})>?$/.test(query)) return guild.members.fetch(/^(?:<@!?)?(\d{17,19})>?$/.exec(query)[1]).catch(() => {}); 68 | if(/\w{1,32}#\d{4}/.test(query)){ 69 | const res = guild.members.find(member => member.user.tag.toLowerCase() === query.toLowerCase()); 70 | return res || null; 71 | } 72 | }; 73 | 74 | module.exports = { fetchRateLimit, search, fetchPreview, convertGIF, base64, resolveMember } -------------------------------------------------------------------------------- /Base/Permissions.js: -------------------------------------------------------------------------------- 1 | const { Message, MessageEmbed } = require("discord.js"); 2 | const { Bot } = require("../Structures/Client"); 3 | 4 | /** 5 | * 6 | * @param { String } of 7 | * @param { Message } message 8 | * @param { Array } permissions 9 | */ 10 | async function checkPermission(of, message, permissions) { 11 | //checking 12 | if (!of || !message || !permissions) 13 | throw new Error("Unable to access of/message/permissions"); 14 | 15 | /** 16 | * @type { Bot } 17 | */ 18 | switch (of.toLowerCase()) { 19 | case "client": 20 | //embed 21 | let cEmbed = new MessageEmbed() 22 | .setAuthor( 23 | message.author.tag, 24 | message.author.avatarURL({ dynamic: true }) 25 | ) 26 | .setColor(config.embedcolor) 27 | .setFooter( 28 | "© Karma", 29 | "https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png" 30 | ) 31 | .setDescription( 32 | `${emotes.error} **Bot needs some permissions to executive the command**` 33 | ); 34 | 35 | //array 36 | let array = []; 37 | 38 | //looping each permissions 39 | permissions.forEach((permission) => { 40 | //checking permission 41 | if (!message.guild.me.hasPermission(permission)) { 42 | //pushing to array 43 | array.push(permission); 44 | } 45 | }); 46 | 47 | //if it includes administrator 48 | if (array.length && array.includes("ADMINISTRATOR")) { 49 | cEmbed.addField( 50 | `${emotes.error} Missing Permission(s)`, 51 | `\`ADMINISTRATOR\`` 52 | ); 53 | message.channel.send(cEmbed).catch(() => {}); 54 | return true; 55 | } 56 | 57 | //if not includes administrator 58 | else if (array.length) { 59 | cEmbed.addField( 60 | `${emotes.error} Missing Permission(s)`, 61 | `\`${array.join(" , ")}\`` 62 | ); 63 | message.channel.send(cEmbed).catch(() => {}); 64 | return true; 65 | } 66 | break; 67 | 68 | //case member 69 | case "member": 70 | let mEmbed = new MessageEmbed() 71 | .setAuthor( 72 | message.author.tag, 73 | message.author.avatarURL({ dynamic: true }) 74 | ) 75 | .setColor(config.embedcolor) 76 | .setFooter( 77 | "© Karma", 78 | "https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png" 79 | ) 80 | .setDescription( 81 | `${emotes.error} **You don't have enough permissions to use this command!**` 82 | ); 83 | 84 | //array 85 | let mArray = []; 86 | 87 | //looping permissions 88 | permissions.forEach((permission) => { 89 | if (!message.member.hasPermission(permission)) { 90 | //pushing to array 91 | mArray.push(permission); 92 | } 93 | }); 94 | 95 | //if includes administrator 96 | if (mArray.length && mArray.includes("ADMINISTRATOR")) { 97 | mEmbed.addField( 98 | `${emotes.error} Missing Permission(s)`, 99 | `\`ADMINISTRATOR\`` 100 | ); 101 | message.channel.send(mEmbed).catch(() => {}); 102 | return true; 103 | } 104 | 105 | //if not includes administrator 106 | else if (mArray.length) { 107 | mEmbed.addField( 108 | `${emotes.error} Missing Permission(s)`, 109 | `\`${mArray.join(" , ")}\`` 110 | ); 111 | message.channel.send(mEmbed).catch(() => {}); 112 | return true; 113 | } 114 | break; 115 | } 116 | } 117 | 118 | module.exports = { 119 | checkPermission, 120 | }; -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, sex characteristics, gender identity and expression, 9 | level of experience, education, socio-economic status, nationality, personal 10 | appearance, race, religion, or sexual identity and orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team by filing an issue on the Github repository. 59 | All complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 72 | 73 | [homepage]: https://www.contributor-covenant.org 74 | 75 | For answers to common questions about this code of conduct, see 76 | https://www.contributor-covenant.org/faq 77 | -------------------------------------------------------------------------------- /Commands/Anime/anime.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const Scraper = require('mal-scraper'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'anime', 7 | aliases: ['anime'], 8 | description: 'Shows Information about an Anime.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message, args) => { 12 | 13 | let Text = args.join(" "); 14 | 15 | if (!Text) return message.channel.send(`Please Give Something!`); 16 | 17 | if (Text.length > 200) return message.channel.send(`Text Limit - 200`); 18 | 19 | let Msg = await message.channel.send(`**Searching It For You ${emotes.load}**`); 20 | 21 | let Replaced = Text.replace(/ /g, " "); 22 | 23 | await Msg.delete(); 24 | 25 | let Anime; 26 | 27 | let Embed; 28 | 29 | try { 30 | 31 | Anime = await Scraper.getInfoFromName(Replaced); 32 | 33 | if (!Anime.genres[0]) Anime.genres[0] = "None"; 34 | 35 | Embed = new MessageEmbed() 36 | .setColor(config.embedcolor) 37 | .setURL(Anime.url) 38 | .setTitle(Anime.title) 39 | .setDescription(Anime.synopsis) 40 | .addField(`Type`, Anime.type, true) 41 | .addField(`Status`, Anime.status, true) 42 | .addField(`Premiered`, Anime.premiered, true) 43 | .addField(`Episodes`, Anime.episodes, true) 44 | .addField(`Duration`, Anime.duration, true) 45 | .addField(`Popularity`, Anime.popularity, true) 46 | .addField(`Genres`, Anime.genres.join(", ")) 47 | .setThumbnail(Anime.picture) 48 | .setFooter(`Score - ${Anime.score}`) 49 | .setTimestamp(); 50 | 51 | } catch (error) { 52 | console.log(error) 53 | return message.channel.send(`No Anime Found!`) 54 | 55 | }; 56 | 57 | return message.channel.send(Embed); 58 | }, 59 | }; -------------------------------------------------------------------------------- /Commands/Anime/baka.js: -------------------------------------------------------------------------------- 1 | const nekos = require('nekos.life'); 2 | const { sfw: { baka }, } = new nekos() 3 | const { MessageEmbed } = require('discord.js'); 4 | 5 | module.exports = { 6 | help: { 7 | name: 'baka', 8 | aliases: ['baka'], 9 | description: 'Get a reaction for baka.', 10 | category: __dirname.split("Commands\\")[1] 11 | }, 12 | run: async (client, message) => { 13 | 14 | const { url } = await baka().catch(() => { }); 15 | 16 | if (!url) return message.channel.send(`Could not connect to nekos.life`); 17 | 18 | const embed = new MessageEmbed(); 19 | if ( 20 | message.mentions.members.size && 21 | message.mentions.members.first().id === client.user.id 22 | ) { 23 | return message.channel.send(`Chigau! Anata wa baka desu!`); 24 | } else if ( 25 | message.mentions.members.size && 26 | message.mentions.members.first().id === message.author.id 27 | ) { 28 | return message.channel.send(`Seriously?`); 29 | } else if (message.mentions.members.size) { 30 | return message.channel.send( 31 | embed 32 | .setColor(config.embedcolor) 33 | .setImage(url) 34 | .setDescription(`${message.mentions.members.first()} B~baka!`) 35 | ); 36 | } else 37 | return message.channel.send( 38 | embed.setColor(config.embedcolor).setImage(url) 39 | ); 40 | 41 | }, 42 | }; -------------------------------------------------------------------------------- /Commands/Anime/fact.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const fetch = require("node-fetch"); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'fact', 7 | aliases: ['fact'], 8 | description: 'Gets random Anime Facts.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message) => { 12 | 13 | let url = "https://airi.kyoyo.me/api/fact"; 14 | 15 | fetch(url, { 16 | headers: { 17 | 'Auth': config.FACT_API 18 | } 19 | }).then(res => res.json()) 20 | .then(r => { 21 | const embed = new MessageEmbed() 22 | .setColor(config.embedcolor) 23 | .setTitle("Did you know?") 24 | .setThumbnail( 25 | "https://media.discordapp.net/attachments/711250719675645962/721640740136026202/uhjhyj.gif" 26 | ) 27 | .setDescription(r.fact) 28 | .setFooter(`© Karma `, "https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png") 29 | .setTimestamp() 30 | 31 | message.channel.send(embed); 32 | }); 33 | }, 34 | }; 35 | -------------------------------------------------------------------------------- /Commands/Anime/hug.js: -------------------------------------------------------------------------------- 1 | const fetch = require('node-fetch'); 2 | const { MessageEmbed } = require('discord.js'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'hug', 7 | aliases: ['hug'], 8 | description: 'Get a gif for Hugging someone :eyes:.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message, args) => { 12 | 13 | let victim = message.mentions.users.first() || (args.length > 0 ? message.users.cache.filter(e => e.username.toLowerCase().includes(args.join(" ").toLowerCase())).first() : message.author) || message.author; 14 | await fetch("https://nekos.life/api/v2/img/hug") 15 | .then(res => res.json()) 16 | .then(body => { 17 | const embed = new MessageEmbed() 18 | .setColor(config.embedcolor) 19 | .setTitle("Here's your Hug, 🤗") 20 | .setDescription(`${victim} is hugged by ${message.author}`) 21 | .setImage(body.url) 22 | .setTimestamp() 23 | .setFooter(`© Karma `, "https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png") 24 | 25 | message.channel.send(embed); 26 | }); 27 | }, 28 | }; -------------------------------------------------------------------------------- /Commands/Anime/karma.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const fetch = require('node-fetch'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'karma', 7 | aliases: ['karma'], 8 | description: 'Drops random Karma Pictures.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message) => { 12 | 13 | let res = await fetch('https://api.deltaa.me/karma') 14 | let data = await res.json() 15 | 16 | let gifembed = new MessageEmbed() 17 | .setTitle(`Random Karma ${data.url.endsWith('.png') ? 'Picture' : `${data.url.endsWith('.gif') ? 'GIF' : 'Picture'}`}`) 18 | .setColor(config.embedcolor) 19 | .setDescription(`[Full View](${data.url})`) 20 | .setFooter(`© Karma`, message.author.avatarURL()) 21 | .setImage(data.url); 22 | message.channel.send(gifembed); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Commands/Anime/kiss.js: -------------------------------------------------------------------------------- 1 | const nekos = require('nekos.life'); 2 | const { MessageEmbed } = require('discord.js'); 3 | const { sfw: { kiss }, } = new nekos(); 4 | 5 | module.exports = { 6 | help: { 7 | name: 'kiss', 8 | aliases: ['kiss'], 9 | description: 'Kiss :flushed: .', 10 | category: __dirname.split("Commands\\")[1] 11 | }, 12 | run: async (client, message) => { 13 | 14 | const embed = new MessageEmbed(); 15 | 16 | if ( 17 | message.mentions.members.size && 18 | message.mentions.members.first().id === client.user.id 19 | ) { 20 | const { url } = await slap().catch(() => { }); 21 | 22 | if (!url) return message.channel.send(`Could not connect to nekos.life`); 23 | 24 | return message.channel.send( 25 | embed 26 | .setColor(config.embedcolor) 27 | .setDescription(`${message.member}, How dare you!`) 28 | .setImage(url) 29 | .setFooter(`${message.member.displayName}, you really do deserve a slapping.` ) 30 | ); 31 | } else { 32 | const { url } = await kiss().catch(() => { }); 33 | 34 | if (!url) return message.channel.send(`Could not connect to nekos.life`); 35 | 36 | if ( 37 | message.mentions.members.size && 38 | message.mentions.members.first().id === message.author.id 39 | ) { 40 | return message.channel.send(`S~seriously?!`); 41 | } else if (message.mentions.members.size) { 42 | return message.channel.send( 43 | embed 44 | .setColor(config.embedcolor) 45 | .setDescription( `${message.member} kisses ${message.mentions.members.first()}!`) 46 | .setImage(url) 47 | ); 48 | } else { 49 | return message.channel.send( 50 | `Sorry ${message.member}, I can't seem to locate your imaginary friend.` 51 | ); 52 | } 53 | } 54 | } 55 | } -------------------------------------------------------------------------------- /Commands/Anime/neko.js: -------------------------------------------------------------------------------- 1 | const fetch = require('node-fetch') 2 | const { MessageEmbed } = require('discord.js'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'neko', 7 | aliases: ['neko'], 8 | description: 'Drops random Neko Pictures.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message) => { 12 | 13 | fetch('https://shiro.gg/api/images/neko') 14 | .then(res => res.json()) 15 | .then(response => { 16 | const embed = new MessageEmbed() 17 | .setTitle("Here's your Neko") 18 | .setImage(response.url) 19 | .setColor(config.embedcolor) 20 | .setTimestamp() 21 | .setFooter(`© Karma `, "https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png") 22 | .setURL(response.url); 23 | message.channel.send(embed); 24 | }); 25 | }, 26 | }; -------------------------------------------------------------------------------- /Commands/Anime/pat.js: -------------------------------------------------------------------------------- 1 | const fetch = require('node-fetch'); 2 | const { MessageEmbed } = require('discord.js') 3 | 4 | module.exports = { 5 | help: { 6 | name: 'pat', 7 | aliases: ['pat'], 8 | description: 'Patto.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async(client, message, args) => { 12 | 13 | let victim = message.mentions.users.first() || (args.length > 0 ? message.users.cache.filter(e => e.username.toLowerCase().includes(args.join(" ").toLowerCase())).first() : message.author) || message.author; 14 | await fetch("https://nekos.life/api/v2/img/pat") 15 | .then(res => res.json()) 16 | .then(body => { 17 | const embed = new MessageEmbed() 18 | .setColor(config.embedcolor) 19 | .setTitle("Here's your Pat, 👀") 20 | .setDescription(`${message.author} pats ${victim}`) 21 | .setImage(body.url) 22 | .setTimestamp() 23 | .setFooter(`© Karma `, "https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png") 24 | 25 | message.channel.send(embed); 26 | }); 27 | 28 | } 29 | } -------------------------------------------------------------------------------- /Commands/Anime/poke.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const nekos = require('nekos.life'); 3 | const { sfw: { poke }, } = new nekos() 4 | 5 | module.exports = { 6 | help: { 7 | name: 'poke', 8 | aliases: ['poke'], 9 | description: 'Poke someone huehue', 10 | category: __dirname.split("Commands\\")[1] 11 | }, 12 | run: async (client, message) => { 13 | 14 | const { url } = await poke().catch(() => { }); 15 | 16 | if (!url) return message.channel.send(`Could not connect to nekos.life`); 17 | 18 | const embed = new MessageEmbed(); 19 | 20 | if ( 21 | message.mentions.members.size && 22 | message.mentions.members.first().id === client.user.id 23 | ) { 24 | return message.channel.send( 25 | `${message.member}, I'm already here! You need something?` 26 | ); 27 | } else if ( 28 | message.mentions.members.size && 29 | message.mentions.members.first().id === message.author.id 30 | ) { 31 | return message.channel.send(`What?`); 32 | } else if (message.mentions.members.size) { 33 | return message.channel.send( 34 | embed 35 | .setColor(config.embedcolor) 36 | .setDescription(`${message.member} pokes ${message.mentions.members.first()}!`) 37 | .setImage(url) 38 | ); 39 | } else { 40 | return message.channel.send( 41 | `${message.member}, I can't poke your imaginary friend! :(` 42 | ); 43 | } 44 | } 45 | } -------------------------------------------------------------------------------- /Commands/Anime/slap.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const nekos = require("nekos.life"); 3 | const { sfw: { slap }, } = new nekos() 4 | 5 | module.exports = { 6 | help: { 7 | name: 'slap', 8 | aliases: ['slap'], 9 | description: 'Slap someone go go!.', 10 | category: __dirname.split("Commands\\")[1] 11 | }, 12 | run: async(client, message) => { 13 | const { url } = await slap().catch(() => {}); 14 | 15 | if (!url) return message.channel.send(`Could not connect to nekos.life`); 16 | 17 | const embed = new MessageEmbed(); 18 | 19 | if ( 20 | message.mentions.members.size && 21 | message.mentions.members.first().id === client.user.id 22 | ) { 23 | return message.channel.send( 24 | `${ 25 | [`Ouch! How dare you slap me!`, `Stop that!`, `It hurts! ;-;`][ 26 | Math.floor(Math.random() * 2) 27 | ] 28 | }` 29 | ); 30 | } else if ( 31 | message.mentions.members.size && 32 | message.mentions.members.first().id === message.author.id 33 | ) { 34 | return message.channel.send(`Wai~ Seriously!?`); 35 | } else if (message.mentions.members.size) { 36 | return message.channel.send( 37 | embed 38 | .setColor(config.embedcolor) 39 | .setDescription(`${message.member} slapped ${message.mentions.members.first()}!`) 40 | .setImage(url) 41 | ); 42 | } else { 43 | return message.channel.send( `${message.member}, are you practicing to slap or something?`); 44 | } 45 | 46 | } 47 | } -------------------------------------------------------------------------------- /Commands/Anime/smug.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const nekos = require("nekos.life"); 3 | const { sfw: { smug }, } = new nekos(); 4 | 5 | module.exports = { 6 | help: { 7 | name: 'smug', 8 | aliases: ['smug'], 9 | description: 'Yes, Smug.', 10 | category: __dirname.split("Commands\\")[1] 11 | }, 12 | run: async (client, message) => { 13 | 14 | const { url } = await smug().catch(() => { }); 15 | 16 | if (!url) return message.channel.send(`Could not connect to nekos.life`); 17 | 18 | message.channel.send( 19 | new MessageEmbed() 20 | .setColor(config.embedcolor) 21 | .setImage(url) 22 | .setDescription(`${message.member} smugs.`) 23 | ); 24 | } 25 | } -------------------------------------------------------------------------------- /Commands/Anime/tickle.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const nekos = require("nekos.life"); 3 | const { sfw: { tickle }, } = new nekos(); 4 | 5 | 6 | module.exports = { 7 | help: { 8 | name: 'tickle', 9 | aliases: ['tickle'], 10 | description: 'TICKLE THEM RN.', 11 | category: __dirname.split("Commands\\")[1] 12 | }, 13 | run: async (client, message) => { 14 | const { url } = await tickle().catch(() => { }); 15 | 16 | if (!url) return message.channel.send(`Could not connect to nekos.life`); 17 | 18 | const embed = new MessageEmbed(); 19 | 20 | if ( 21 | message.mentions.members.size && 22 | message.mentions.members.first().id === client.user.id 23 | ) { 24 | return message.channel.send( 25 | `B~Baka ${message.member}! Stop that~ it tickles!` 26 | ); 27 | } else if ( 28 | message.mentions.members.size && 29 | message.mentions.members.first().id === message.author.id 30 | ) { 31 | return message.channel.send(`Wai~ Seriously!?`); 32 | } else if (message.mentions.members.size) { 33 | return message.channel.send( 34 | embed 35 | .setColor(config.embedcolor) 36 | .setDescription(`${message.member} started tickling ${message.mentions.members.first()}!`) 37 | .setImage(url) 38 | ); 39 | } else { 40 | return message.channel.send( 41 | embed.setColor(config.embedcolor).setImage(url) 42 | ); 43 | } 44 | } 45 | } -------------------------------------------------------------------------------- /Commands/Anime/waifu.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const fetch = require('node-fetch'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'waifu', 7 | aliases: ['waifu'], 8 | description: 'Drops random waifu pictures.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message) => { 12 | await fetch("https://nekos.life/api/v2/img/waifu") 13 | .then(res => res.json()) 14 | .then(body => { 15 | const embed = new MessageEmbed() 16 | .setColor(config.embedcolor) 17 | .setTitle("Here's your Waifu") 18 | .setDescription(`${message.author.toString()}`) 19 | .setImage(body.url) 20 | .setTimestamp() 21 | .setFooter(`© Karma `, "https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png") 22 | 23 | message.channel.send(embed); 24 | 25 | }); 26 | }, 27 | }; -------------------------------------------------------------------------------- /Commands/Anime/whatanime.js: -------------------------------------------------------------------------------- 1 | const { fetchRateLimit, search, convertGIF } = require('../../Base/Functions'); 2 | const { stripIndents } = require('common-tags'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'whatanime', 7 | aliases: ['whatanime'], 8 | description: 'Provides the Anime name from the image.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async(client, message, args) => { 12 | 13 | let msg = message; 14 | try { 15 | let screenshot; 16 | let user = message.mentions.members.first() || message.guild.members.cache.get(args[0]) 17 | if(message.attachments.first()) { 18 | screenshot = message.attachments.first().url 19 | } else if(user) { 20 | screenshot = user.user.displayAvatarURL({ format: 'png' }) 21 | } else { 22 | screenshot = message.author.displayAvatarURL({ format: 'png' }) 23 | } 24 | const status = await fetchRateLimit(); 25 | if (!status.status) { 26 | return msg.reply(`Oh no, I'm out of requests! Please wait ${status.refresh} seconds and try again.`); 27 | } 28 | let { body } = await request.get(screenshot); 29 | if (screenshot.endsWith('.gif')) body = await convertGIF(body); 30 | const result = await search(body, msg.channel.nsfw); 31 | if (result === 'size') return msg.reply('Please do not send an image larger than 10MB.'); 32 | if (result.nsfw && !msg.channel.nsfw) { 33 | return msg.reply('This is from a hentai, and this isn\'t an NSFW channel.'); 34 | } 35 | const title = `${result.title}${result.episode ? ` episode ${result.episode}` : ''}`; 36 | return msg.reply(stripIndents` 37 | I'm ${result.prob}% sure this is from ${title}. 38 | ${result.prob < 90 ? '_This probablity is rather low, try using a higher quality image._' : ''} 39 | `, result.preview ? { files: [{ attachment: result.preview, name: 'preview.mp4' }] } : {}); 40 | } catch (err) { 41 | console.log(err.stack) 42 | return msg.reply(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); 43 | 44 | } 45 | 46 | } 47 | } -------------------------------------------------------------------------------- /Commands/Anime/wink.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const fetch = require('node-fetch'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'wink', 7 | aliases: ['wink'], 8 | description: 'Winky Wink.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async(client, message) => { 12 | fetch('https://some-random-api.ml/animu/wink') 13 | .then(res => res.json()) 14 | .then(response => { 15 | const embed = new MessageEmbed() 16 | .setTitle("Here's your Wink 😉") 17 | .setImage(response.link) 18 | .setColor(config.embedcolor) 19 | .setTimestamp() 20 | .setFooter(`© Karma `, "https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png") 21 | .setURL(response.url); 22 | message.channel.send(embed); 23 | }); 24 | } 25 | } -------------------------------------------------------------------------------- /Commands/Buttons/snake.js: -------------------------------------------------------------------------------- 1 | const { Snake } = require('weky') 2 | 3 | module.exports = { 4 | help: { 5 | name: 'snake', 6 | aliases: ['snake'], 7 | description: 'Play the snake game in Discord!', 8 | category: __dirname.split("Commands\\")[1] 9 | }, 10 | run: async (client, message) => { 11 | 12 | await Snake({ 13 | message: message, 14 | embed: { 15 | title: 'Snake ', 16 | description: 'GG, you scored **{{score}}** points!', 17 | color: config.embedcolor, 18 | footer: '©️ Karma Bot', 19 | timestamp: true 20 | }, 21 | emojis: { 22 | empty: '⬛', 23 | snakeBody: '🐍', 24 | food: '🍎', 25 | up: '⬆️', 26 | right: '⬅️', 27 | down: '⬇️', 28 | left: '➡️', 29 | }, 30 | othersMessage: 'Only <@{{author}}> can use the buttons!', 31 | buttonText: 'Cancel' 32 | }); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Commands/Buttons/wyr.js: -------------------------------------------------------------------------------- 1 | const { WouldYouRather } = require('weky') 2 | require('@weky/inlinereply'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'wyr', 7 | aliases: ['wouldyourather'], 8 | description: 'Would you Rather? Hmm..', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message) => { 12 | 13 | await WouldYouRather({ 14 | message: message, 15 | embed: { 16 | title: 'Would you rather...', 17 | color: config.embedcolor, 18 | footer: '©️ Karma Bot', 19 | timestamp: true 20 | }, 21 | thinkMessage: 'Let me think...', 22 | othersMessage: 'Only <@{{author}}> can use the buttons!', 23 | buttons: { optionA: 'Option A', optionB: 'Option B' } 24 | }); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Commands/Chatbot/chatbot.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js') 2 | const { db } = require('../../Structures/Database') 3 | 4 | module.exports = { 5 | help: { 6 | name: 'chatbot', 7 | aliases: ['chatbot'], 8 | description: 'Shows the Chatbot config.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async(client, message) => { 12 | 13 | const embedd = new Discord.MessageEmbed() 14 | .setThumbnail(client.user.avatarURL()) 15 | .setDescription( 16 | `🤖 ChatBot Configuration 17 | 18 | **${emotes.info} Usage :** 19 | Type \`${config.prefix}setchatbotchannel\` - To Set a Channel 20 | Type \`${config.prefix}disablechatbotchannel\` - To Disable a Channel. 21 | ChatBot Channel Set - None 22 | 23 | **${emotes.info} Examples :** 24 | \`${config.prefix}setchatbotchannel\` <#${message.channel.id}> 25 | \`${config.prefix}disablechatbotchannel\` <#${message.channel.id}>` 26 | ) 27 | .addField( 28 | "Support Link: ", 29 | `**[Click Here!](https://discord.gg/NtyaM9d)**`, 30 | true 31 | ) 32 | .addField( 33 | "Vote Link:", 34 | `**[Click Here!](https://top.gg/bot/636484020301201418/vote)**`, 35 | true 36 | ) 37 | .setTimestamp() 38 | .setFooter( 39 | "© Karma", 40 | "https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png" 41 | ) 42 | .setColor(config.embedcolor); 43 | 44 | let channel1 = await db.fetch(`chatbot_${message.guild.id}`); 45 | if(!channel1) return message.channel.send(embedd) 46 | var sChannel = message.guild.channels.cache.get(channel1); 47 | let embedvch = "<#" + sChannel.id + ">" 48 | 49 | const embed = new Discord.MessageEmbed() 50 | 51 | .setThumbnail(client.user.avatarURL()) 52 | .setDescription( 53 | `**🤖 ChatBot Configuration** 54 | 55 | **${emotes.info} Usage :** 56 | Type \`${config.prefix}setchatbotchannel\` - To Set a Channel 57 | Type \`${config.prefix}disablechatbotchannel\` - To Disable a Channel. 58 | ChatBot Channel Set - ${embedvch} 59 | 60 | **${emotes.info} Examples :** 61 | \`${config.prefix}setchatbotchannel\` <#${message.channel.id}> 62 | \`${config.prefix}disablechatbotchannel\` <#${message.channel.id}>` 63 | ) 64 | .addField( 65 | "Support Link: ", 66 | `**[Click Here!](https://discord.gg/NtyaM9d)**`, 67 | true 68 | ) 69 | .addField( 70 | "Vote Link:", 71 | `**[Click Here!](https://top.gg/bot/636484020301201418/vote)**`, 72 | true 73 | ) 74 | .setTimestamp() 75 | .setFooter( 76 | "© Karma", 77 | "https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png" 78 | ) 79 | .setColor(config.embedcolor); 80 | message.channel.send(embed); 81 | 82 | } 83 | } -------------------------------------------------------------------------------- /Commands/Chatbot/disablechatbotchannel.js: -------------------------------------------------------------------------------- 1 | const { checkPermission } = require('../../Base/Permissions'); 2 | const { db } = require('../../Structures/Database'); 3 | 4 | 5 | module.exports = { 6 | help: { 7 | name: 'disablechatbotchannel', 8 | aliases: ['disablechatbotchannel'], 9 | permissions: ['MANAGE_GUILD'], 10 | description: 'Disables the channel for the chatbot', 11 | category: __dirname.split("Commands\\")[1] 12 | }, 13 | run: async(client, message) => { 14 | 15 | /**** Checking Permissions ****/ 16 | let clientPermission = await checkPermission('client', message, [ 17 | 'MANAGE_GUILD', 18 | ]); 19 | if(clientPermission) return 20 | 21 | let memberPermission = await checkPermission('member', message, [ 22 | 'MANAGE_GUILD', 23 | ]) 24 | if(memberPermission) return; 25 | 26 | /**** Regular Code ****/ 27 | 28 | try { 29 | 30 | let a = db.fetch(`chatbot_${message.guild.id}`); 31 | 32 | if(!a) { 33 | return message.channel.send({embed: { 34 | color: config.embedcolor, 35 | title: `${emotes.error} There is no Chatbot channel to disable!` 36 | }}); 37 | } else { 38 | 39 | db.delete(`chatbot_${message.guild.id}`); 40 | 41 | message.channel.send({embed: { 42 | color: config.embed, 43 | title: `${emotes.verified} Chatbot Channel has been successfully disabled!` 44 | }}); 45 | } return; 46 | 47 | } catch(err) { 48 | logger.error(err); 49 | } 50 | } 51 | } -------------------------------------------------------------------------------- /Commands/Chatbot/setchatbotchannel.js: -------------------------------------------------------------------------------- 1 | const { checkPermission } = require('../../Base/Permissions'); 2 | const { db } = require('../../Structures/Database'); 3 | 4 | 5 | module.exports = { 6 | help: { 7 | name: 'setchatbotchannel', 8 | aliases: ['setchatbotchannel'], 9 | permissions: ['MANAGE_GUILD'], 10 | description: 'Sets a channel for the Chatbot.', 11 | category: __dirname.split("Commands\\")[1] 12 | }, 13 | run: async(client, message, args) => { 14 | 15 | /**** Checking Permissions ****/ 16 | let clientPermission = await checkPermission('client', message, [ 17 | 'MANAGE_GUILD', 18 | ]); 19 | if(clientPermission) return 20 | 21 | let memberPermission = await checkPermission('member', message, [ 22 | 'MANAGE_GUILD', 23 | ]) 24 | if(memberPermission) return; 25 | 26 | /**** Regular Code ****/ 27 | if(!args[0]) { 28 | 29 | const b = await db.fetch(`chatbot_${message.guild.id}`) 30 | const channelName = message.guild.channels.cache.get(b); 31 | 32 | if(message.guild.channels.cache.has(b)) { 33 | return message.channel.send(`**${emotes.verified} ChatBot Channel Set In This Server Is \`${channelName.name}\`!**`); 34 | } else { 35 | return message.channel.send({embed: { 36 | color: config.embedcolor, 37 | title: `${emotes.error} Please Enter a Channel or Channel ID to set` 38 | }}); 39 | }; 40 | }; 41 | 42 | let channel = message.mentions.channels.first() || client.guilds.cache.get(message.guild.id).channels.cache.get(args[0]) || message.guild.channels.cache.find(c => c.name.toLowerCase() === args.join(' ').toLocaleLowerCase()); 43 | 44 | if(!channel || channel.type !== 'text') return message.channel.send({embed: { 45 | color: config.embedcolor, 46 | title: `${emotes.error} Please enter a Valid Channel!` 47 | }}); 48 | 49 | try { 50 | let a = await db.fetch(`chatbot_${message.guild.id}`); 51 | 52 | if (channel.id === a) { 53 | return message.channel.send({embed: { 54 | color: config.embedcolor, 55 | title: `${emotes.info} This Channel is already set as ChatBot Channel!` 56 | }}); 57 | } else { 58 | client.guilds.cache.get(message.guild.id).channels.cache.get(channel.id).send(`**${emotes.verified} ChatBot Channel Set!**`); 59 | db.set(`chatbot_${message.guild.id}`, channel.id); 60 | 61 | message.channel.send({embed: { 62 | color: config.embedcolor, 63 | title: `${emotes.verified} ChatBot Channel has been Set Successfully \`${channel.id}\`` 64 | }}); 65 | }; 66 | 67 | } catch(error) { 68 | logger.error(error); 69 | } 70 | }, 71 | }; -------------------------------------------------------------------------------- /Commands/Fun/binary.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const axios = require('axios') 3 | 4 | module.exports = { 5 | help: { 6 | name: 'binary', 7 | aliases: ['binary'], 8 | description: 'Shows your text in Binary Format.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message, args) => { 12 | 13 | 14 | const url = `http://some-random-api.ml/binary?text=${args}`; 15 | 16 | let response, data; 17 | try { 18 | response = await axios.get(url); 19 | data = response.data; 20 | } catch (e) { 21 | return message.channel.send(`An error occured, please try again!`); 22 | } 23 | 24 | const embed = new MessageEmbed() 25 | .setTitle("Text to Binary") 26 | .setThumbnail( 27 | "https://png.pngtree.com/png-clipart/20200225/original/pngtree-binary-code-and-magnifying-glass-isometric-icon-png-image_5252004.jpg" 28 | ) 29 | 30 | .setDescription("**Binary Code** - `" + data.binary + "`") 31 | .setTimestamp() 32 | .setFooter( 33 | "© Karma", 34 | "https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png" 35 | ) 36 | .setColor(config.embedcolor); 37 | 38 | await message.channel.send(embed); 39 | 40 | } 41 | } -------------------------------------------------------------------------------- /Commands/Fun/clyde.js: -------------------------------------------------------------------------------- 1 | const { MessageAttachment } = require('discord.js'); 2 | const fetch = require('node-fetch'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'clyde', 7 | aliases: ['clyde'], 8 | description: 'Shows your text as Clyde\'s message,', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message, args) => { 12 | 13 | const text = args.slice().join(' '); 14 | if (!text) { 15 | return message.channel.send( 16 | '❎ Please provide valid text.', 17 | ); 18 | } 19 | 20 | const url = `https://nekobot.xyz/api/imagegen?type=clyde&text=${text}`; 21 | 22 | let response; 23 | try { 24 | response = await fetch(url).then(res => res.json()); 25 | } 26 | catch (e) { 27 | return message.channel.send('❎ An error occured, please try again!'); 28 | } 29 | const attachment = new MessageAttachment(response.message, 'clyde.png'); 30 | return message.channel.send(attachment); 31 | 32 | } 33 | } -------------------------------------------------------------------------------- /Commands/Fun/comment.js: -------------------------------------------------------------------------------- 1 | const canvacord = require('canvacord'); 2 | const { MessageAttachment } = require('discord.js'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'comment', 7 | aliases: ['comment'], 8 | description: 'Shows your text as a Youtube Comment.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message, args) => { 12 | 13 | const comment = args.join(''); 14 | if (!comment) return message.channel.send(`${emotes.error} Provide something to Comment!`) 15 | try { 16 | let yt = await canvacord.Canvas.youtube({ "avatar": message.author.displayAvatarURL({ format: "png" }), "username": message.author.username, "content": args.join(" ") }) 17 | let attachment = new MessageAttachment(yt, 'comment.png') 18 | message.channel.send(attachment) 19 | } catch (err) { 20 | const embed2 = new MessageEmbed() 21 | .setTitle(`${emotes.error} Something went wrong.\n${emotes.error}Note : It won't work if the User contains Unwanted characters in his Username.`) 22 | .setColor(config.embedcolor) 23 | message.channel.send(embed2) 24 | } 25 | 26 | } 27 | } -------------------------------------------------------------------------------- /Commands/Fun/country.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const fetch = require('node-fetch'); 3 | 4 | 5 | module.exports = { 6 | help: { 7 | name: 'country', 8 | aliases: ['country'], 9 | description: 'Yes, Country.', 10 | category: __dirname.split("Commands\\")[1] 11 | }, 12 | run: async (client, message, args) => { 13 | 14 | const country = args.slice().join(' '); 15 | if (!country) { 16 | return message.channel.send( 17 | ':x: Please provide a valid Country.', 18 | ); 19 | } 20 | const url = 'https://restcountries.eu/rest/v2/name/' + country; 21 | 22 | let response; 23 | try { 24 | response = await fetch(url).then(res => res.json()); 25 | } 26 | catch (e) { 27 | return message.channel.send( 28 | ':x:An error occured, please try again!', 29 | ); 30 | } 31 | try { 32 | const data = response[0]; 33 | const embed = new MessageEmbed() 34 | .setColor(config.embedcolor) 35 | .setTitle(data.name) 36 | .setThumbnail(`https://www.countryflags.io/${data.alpha2Code}/flat/64.png`) 37 | .setFooter(`Requested by ${message.author.tag}`) 38 | .setTimestamp() 39 | .addFields( 40 | { name: 'Native Name', value: `\`\`\`${data.nativeName}\`\`\``, inline: true }, 41 | { name: 'Capital', value: `\`\`\`${data.capital ? data.capital : 'None'}\`\`\``, inline: true }, 42 | { name: 'Location', value: `\`\`\`${data.subregion ? data.subregion : data.region}\`\`\``, inline: true }, 43 | { name: 'Currency', value: `\`\`\`${data.currencies[0].code} ${data.currencies[0].symbol}\`\`\``, inline: true }, 44 | { name: 'Population', value: `\`\`\`${data.population.toLocaleString()}\`\`\``, inline: true }, 45 | { name: 'Area', value: `\`\`\`${data.area.toLocaleString()}km\`\`\``, inline: true }, 46 | { name: 'Languages', value: `\`\`\`${data.languages.map(lang => lang.name).join('/')}\`\`\`` }, 47 | ); 48 | message.channel.send(embed); 49 | } 50 | catch { 51 | return message.channel.send( 52 | ':x: Please provide a valid country.', 53 | ); 54 | } 55 | 56 | } 57 | } -------------------------------------------------------------------------------- /Commands/Fun/eject.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const fetch = require('node-fetch'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'eject', 7 | aliases: ['eject'], 8 | description: 'Yeet a user', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message, args) => { 12 | 13 | try { 14 | 15 | const user = message.mentions.users.first() || (args.length > 0 ? message.users.cache.filter(e => e.username.toLowerCase().includes(args.join(" ").toLowerCase())).first() : message.author) || message.author; 16 | const imp = [true, false]; 17 | const imposter = imp[Math.floor(Math.random() * imp.length)]; 18 | const crew = ["black", "blue", "brown", "cyan", "darkgreen", "lime", "orange", "pink", "purple", "red", "white", "yellow"] 19 | const crewmate = crew[Math.floor(Math.random() * crew.length)]; 20 | 21 | const data = await fetch(`https://vacefron.nl/api//ejected?name=${user.username}&impostor=${imposter}&crewmate=${crewmate}`) 22 | 23 | const embed = new MessageEmbed() 24 | .setAuthor(message.author.username + "#" + message.author.discriminator, message.author.displayAvatarURL()) 25 | .setTitle(`${message.author.username} decided to eject ${user.username}`) 26 | .setColor(config.embedcolor) 27 | .setImage(`${data.url}`) 28 | 29 | message.channel.send(embed); 30 | } catch (err) { 31 | const embed2 = new MessageEmbed() 32 | .setTitle(`${emotes.error} Something went wrong.\n${emotes.error}Note : It won't work if the User contains Unwanted characters in his Username.`) 33 | .setColor(config.embedcolor) 34 | message.channel.send(embed2) 35 | } 36 | } 37 | } -------------------------------------------------------------------------------- /Commands/Fun/emojify.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = { 3 | help: { 4 | name: 'emojify', 5 | aliases: ['emojify'], 6 | description: 'Emojify the text.', 7 | category: __dirname.split("Commands\\")[1] 8 | }, 9 | run: async (client, message, args) => { 10 | 11 | if (!args[0]) { 12 | return message.channel.send( 13 | '❎ Please provide valid text.', 14 | ); 15 | } 16 | 17 | const specialChars = { 18 | '0': ':zero:', 19 | '1': ':one:', 20 | '2': ':two:', 21 | '3': ':three:', 22 | '4': ':four:', 23 | '5': ':five:', 24 | '6': ':six:', 25 | '7': ':seven:', 26 | '8': ':eight:', 27 | '9': ':nine:', 28 | '#': ':hash:', 29 | '*': ':asterisk:', 30 | '?': ':grey_question:', 31 | '!': ':grey_exclamation:', 32 | ' ': ' ', 33 | }; 34 | 35 | const emojified = `${args.join(' ')}`.toLowerCase().split('').map(letter => { 36 | if (/[a-z]/g.test(letter)) { 37 | return `:regional_indicator_${letter}: `; 38 | } 39 | else if (specialChars[letter]) { 40 | return `${specialChars[letter]} `; 41 | } 42 | return letter; 43 | }).join(''); 44 | 45 | if (emojified.length > 2000) { 46 | return message.channel.send(`${emotes.error} The emojified message exceeds 2000 characters.`); 47 | } 48 | 49 | message.channel.send(emojified); 50 | 51 | 52 | } 53 | } -------------------------------------------------------------------------------- /Commands/Fun/github.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const fetch = require('node-fetch'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'github', 7 | aliases: ['github'], 8 | description: 'Shows Information about the Github User', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message, args) => { 12 | const name = args.join(' '); 13 | if (!name) { 14 | return message.channel.send( 15 | `${emotes.error} Please provide a valid user`, 16 | ); 17 | } 18 | 19 | const url = `https://api.github.com/users/${name}`; 20 | 21 | let response; 22 | try { 23 | response = await fetch(url).then(res => res.json()); 24 | } 25 | catch (e) { 26 | return message.channel.send( 27 | `${emotes.error} An error occured, please try again!`, 28 | ); 29 | } 30 | 31 | try { 32 | const embed = new MessageEmbed() 33 | .setColor(config.embedcolor) 34 | .setTitle(`${response.login} (${response.id})`) 35 | .setDescription(response.bio ? response.bio : 'None') 36 | .addFields( 37 | { name: '》 Followers', value: `\`\`\`${response.followers.toLocaleString()}\`\`\``, inline: true }, 38 | { name: '》 Following', value: `\`\`\`${response.following.toLocaleString()}\`\`\``, inline: true }, 39 | { name: '》 Repositories', value: `\`\`\`${response.public_repos.toLocaleString()}\`\`\``, inline: true }, 40 | { name: '》 Email', value: `\`\`\`${response.email ? response.email : 'None'}\`\`\`` }, 41 | { name: '》 Company', value: `\`\`\`${response.company ? response.company : 'None'}\`\`\`` }, 42 | { name: '》 Location', value: `\`\`\`${response.location ? response.location : 'None'}\`\`\`` }, 43 | ) 44 | .setURL(response.html_url) 45 | .setThumbnail(response.avatar_url) 46 | .setFooter('© Karma', 'https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png') 47 | .setTimestamp(); 48 | 49 | message.channel.send(embed); 50 | } 51 | catch (err) { 52 | return message.channel.send( 53 | `${emotes.error} Please provide a valid user`, 54 | ); 55 | } 56 | 57 | } 58 | } -------------------------------------------------------------------------------- /Commands/Fun/iq.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | module.exports = { 4 | help: { 5 | name: 'iq', 6 | aliases: ['iq'], 7 | description: 'Test your iq :brain: ', 8 | category: __dirname.split("Commands\\")[1] 9 | }, 10 | run: async (client, message, args) => { 11 | 12 | let user = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.member 13 | try { 14 | const iq = Math.floor(Math.random() * 226); 15 | const embed = new MessageEmbed() 16 | .setTitle(":brain: IQ Test:") 17 | .setDescription(`:bulb: ${user}'s **IQ is:** \`${iq}\` `) 18 | .setColor("FF0000") 19 | .setThumbnail("https://media.giphy.com/media/l44QzsOLXxcrigdgI/giphy.gif") 20 | .setTimestamp() 21 | .setFooter('© Karma', 'https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png') 22 | .setColor(config.embedcolor); 23 | message.channel.send(embed); 24 | 25 | } catch (err) { 26 | message.channel.send({ 27 | embed: { 28 | color: `${config.embedcolor}`, 29 | description: `${emotes.error} Something went wrong...` 30 | } 31 | }) 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /Commands/Fun/npm.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const fetch = require('node-fetch'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'npm', 7 | aliases: ['npm'], 8 | description: 'Shows information about the npm package', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message, args) => { 12 | 13 | 14 | const package = args[0]; 15 | if (!package) { 16 | return message.channel.send( 17 | `${emotes.error} Please provide a valid package.` 18 | ); 19 | } 20 | 21 | let response; 22 | try { 23 | response = await fetch('https://api.npms.io/v2/search?q=' + args[0]).then(res => res.json()); 24 | } 25 | catch (e) { 26 | return message.channel.send( 27 | `${emotes.error} An error occured, please try again!` 28 | ); 29 | } 30 | 31 | try { 32 | const pkg = response.results[0].package; 33 | const embed = new MessageEmbed() 34 | .setTitle(pkg.name) 35 | .setThumbnail('https://images-ext-2.discordapp.net/external/ouvh4fn7V9pphARfI-8nQdcfnYgjHZdXWlEg2sNowyw/https/cdn.auth0.com/blog/npm-package-development/logo.png') 36 | .setURL(pkg.links.npm) 37 | .setDescription(pkg.description) 38 | .addFields( 39 | { name: '》 Author :', value: pkg.author ? pkg.author.name : 'None' }, 40 | { name: '》 Version :', value: pkg.version }, 41 | { name: '》 Repository :', value: pkg.links.repository ? pkg.links.repository : 'None' }, 42 | { name: '》 Maintainers :', value: pkg.maintainers ? pkg.maintainers.map(e => e.username).join(', ') : 'None' }, 43 | { name: '》 Keywords :', value: pkg.keywords ? pkg.keywords.join(', ') : 'None' }, 44 | ) 45 | .setColor(config.embedcolor) 46 | .setFooter('© Karma', 'https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png') 47 | .setTimestamp(); 48 | 49 | message.channel.send(embed); 50 | } 51 | catch (e) { 52 | return message.channel.send( 53 | `${emotes.error} Please provide a valid package.`, 54 | ); 55 | }; 56 | }, 57 | }; -------------------------------------------------------------------------------- /Commands/Fun/osu.js: -------------------------------------------------------------------------------- 1 | const osu = require('node-osu'); 2 | const { MessageEmbed } = require('discord.js'); 3 | const api = new osu.Api("", { 4 | // END OF OSU API KEY 5 | notFoundAsError: true, 6 | completeScores: false 7 | }) 8 | 9 | module.exports = { 10 | help: { 11 | name: 'osu', 12 | aliases: ['osu'], 13 | description: 'Shows information about the OSU player', 14 | category: __dirname.split("Commands\\")[1] 15 | }, 16 | run: async (client, message, args) => { 17 | 18 | let username = args[0] 19 | if (!args[0]) return message.channel.send('Please, provide a valid user\'s nickname! (osu!)') 20 | 21 | api.getUser({ u: username }).then(user => { 22 | const osu = new MessageEmbed() 23 | .setTitle(`<:osu:760439827086311446> User Osu Search System`) 24 | .setThumbnail(`http://s.ppy.sh/a/${user.id}}`) 25 | .setColor(config.embedcolor) 26 | .addField('》`Nickname:`', user.name) 27 | .addField('》`PP:`', Math.round(user.pp.raw)) 28 | .addField('》`Rank:`', user.pp.rank) 29 | .addField('》`Level:`', Math.round(user.level)) 30 | .addField('》`Score:`', user.scores.ranked) 31 | .addField('》`Country:`', user.country) 32 | .addField('》`Country Rank:`', user.pp.countryRank) 33 | .addField('》`Playcount:`', user.counts.plays) 34 | .addField('》`Accuracy:`', `${user.accuracyFormatted}`) 35 | .setTimestamp() 36 | .setFooter(`© Karma `, "https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png") 37 | message.channel.send(osu) 38 | }); 39 | }, 40 | }; -------------------------------------------------------------------------------- /Commands/Fun/ping.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | module.exports = { 4 | help: { 5 | name: 'ping', 6 | aliases: ['ping'], 7 | description: 'Shows Bot\'s Latency', 8 | category: __dirname.split("Commands\\")[1] 9 | }, 10 | run: async(client, message) => { 11 | 12 | const embed = new MessageEmbed() 13 | .setColor(config.embedcolor) 14 | .setThumbnail("https://media.discordapp.net/attachments/747094092596510841/767079159977082910/2102a19ea556e1d1c54f40a3eda0d775.gif") 15 | .setDescription(`**${message.author.tag}** 🏓`) 16 | .addField("• Ping:", `\`${Math.round(client.ws.ping)} ms\``, true) 17 | .setTimestamp() 18 | .setFooter(`© Karma `, "https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png") 19 | message.channel.send(embed); 20 | }, 21 | } -------------------------------------------------------------------------------- /Commands/Fun/reddit.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const Discord = require("discord.js"); 3 | const redditimage = require('reddit.images'); 4 | 5 | module.exports = { 6 | help: { 7 | name: 'reddit', 8 | aliases: ['reddit'], 9 | description: 'Shows random memes from the given subreddit', 10 | category: __dirname.split("Commands\\")[1] 11 | }, 12 | run: async (client, message, args) => { 13 | 14 | try { 15 | if (!args[0]) return message.reply("**Please provide a subreddit.**") 16 | const subreds = args[0] 17 | 18 | redditimage.reddit.FetchSubreddit(subreds).then((data) => { 19 | const reddit = new MessageEmbed() 20 | .setTitle(data.title) 21 | .setURL(data.postLink) 22 | .setImage(data.image) 23 | .setDescription(`👍 **${data.upvotes}** | 👎 **${data.downvotes}**`) 24 | .setAuthor(`r/${subreds}`, "https://cdn.discordapp.com/attachments/799226474640048149/799273472990642196/2018_social_media_popular_app_logo_reddit-512.png", data.postLink) 25 | .setColor(config.embedcolor) 26 | .setFooter(`If the image didn't load click the title.`, message.guild.iconURL({ dynamic: true })) 27 | .setTimestamp() 28 | 29 | 30 | if (data.NSFW === true) { 31 | message.channel.send('Wait... this meme was flagged as `nsfw` meme, are you sure you want to continue? (`yes`) or (`no`)') 32 | let nsfwFilter = m => m.author.id === message.author.id; 33 | let nsfwCollector = new Discord.MessageCollector(message.channel, nsfwFilter, { max: 999 }); 34 | nsfwCollector.on('collect', async msg => { 35 | if (msg.content.toLowerCase() === 'yes') { 36 | if (msg.channel.nsfw) { 37 | message.channel.send(reddit) 38 | await nsfwCollector.stop() 39 | return; 40 | } else { 41 | message.channel.send('This channel is NOT a nsfw channel.') 42 | await nsfwCollector.stop() 43 | return; 44 | } 45 | } else if (msg.content.toLowerCase() === 'no') { 46 | message.channel.send('Alright.') 47 | await nsfwCollector.stop() 48 | return; 49 | } else { 50 | message.channel.send('Please provide a valid answer! (`yes`) or (`no`)') 51 | return; 52 | } 53 | }) 54 | } else if (data.spoiler === true) { 55 | message.channel.send('This meme was flagged as `spoiler` meme, are you sure you want to continue? (`yes`) or (`no`)') 56 | let spoilerFilter = m => m.author.id === message.author.id; 57 | let spoilerCollector = new Discord.MessageCollector(message.channel, spoilerFilter, { max: 999 }); 58 | spoilerCollector.on('collect', async msg => { 59 | if (msg.content.toLowerCase() === 'yes') { 60 | message.channel.send(reddit) 61 | await spoilerCollector.stop() 62 | return; 63 | } else if (msg.content.toLowerCase() === 'no') { 64 | message.channel.send('Seems like you dont want spoilers, alright ig.') 65 | await spoilerCollector.stop() 66 | return; 67 | } else { 68 | message.channel.send('Please provide a valid answer! (`yes`) or (`no`)') 69 | return; 70 | } 71 | }) 72 | } else if (data.NSFW || data.spoiler) { 73 | return message.channel.send(reddit) 74 | } 75 | }) 76 | } catch (e) { 77 | if (e.status === 403) return message.channel.send('Meme Is Private!') 78 | if (e.status === 404) return message.channel.send('Meme Not Found!') 79 | return message.channel.send('Invalid subreddit.') 80 | } 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /Commands/Fun/weather.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const weather = require('weather-js') 3 | module.exports = { 4 | help: { 5 | name: 'weather', 6 | aliases: ['weather'], 7 | description: 'Shows the weather :o ', 8 | category: __dirname.split("Commands\\")[1] 9 | }, 10 | run: async (client, message, args) => { 11 | 12 | if (args.length === 0) { 13 | let errorembed = new MessageEmbed() 14 | .setTitle("Error :cry:") 15 | .setDescription("Please enter a location!") 16 | .setColor(config.embedcolor) 17 | .setTimestamp() 18 | .setFooter('© Karma ', 'https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png') 19 | return message.channel.send(errorembed); 20 | } 21 | 22 | weather.find({ search: args.join(" "), degreeType: 'C' }, function (err, result) { 23 | 24 | if (result.length === 0) { 25 | let errorembed = new MessageEmbed() 26 | .setTitle("Error :cry:") 27 | .setDescription("Please enter a vaild location!") 28 | .setColor(config.embedcolor) 29 | .setTimestamp() 30 | .setFooter('© Karma ', 'https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png') 31 | return message.channel.send(errorembed); 32 | } 33 | 34 | var current = result[0].current; 35 | var location = result[0].location; 36 | if (err) { 37 | let errorembed = new MessageEmbed() 38 | .setTitle("Error :cry:") 39 | .setDescription("Please enter a vaild location!") 40 | .setColor(config.embedcolor) 41 | .setTimestamp() 42 | .setFooter('© Karma ', 'https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png') 43 | return message.channel.send(errorembed); 44 | } 45 | 46 | 47 | let embed = new MessageEmbed() 48 | .setDescription(`**${current.skytext}**`) 49 | .setAuthor(`Weather for ${current.observationpoint}`) 50 | .setThumbnail(current.imageUrl) 51 | .setColor(config.embedcolor) 52 | .addField('Timezone', `UTC${location.timezone}`, true) 53 | .addField('Degree Type', location.degreetype, true) 54 | .addField('Temperature', `${current.temperature} Degrees`, true) 55 | .addField('Feels Like', `${current.feelslike} Degrees`, true) 56 | .addField('Winds', current.winddisplay, true) 57 | .addField('Humidity', `${current.humidity}%`, true) 58 | .setTimestamp() 59 | .setFooter('© Karma ', 'https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png') 60 | message.channel.send(embed) 61 | }) 62 | 63 | } 64 | } -------------------------------------------------------------------------------- /Commands/Fun/zalgo.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const Zalgo = require('to-zalgo'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'zalgo', 7 | aliases: ['zalgo'], 8 | description: 'Converts your text into Zalgo ', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message, args) => { 12 | const embed = new MessageEmbed() 13 | .setColor(config.embedcolor) 14 | .setDescription(`${Zalgo(args.join(" "))}`) 15 | .setTimestamp() 16 | .setFooter('© Karma ', 'https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png') 17 | message.channel.send(embed) 18 | } 19 | } -------------------------------------------------------------------------------- /Commands/Image/affect.js: -------------------------------------------------------------------------------- 1 | const Canvacord = require('canvacord'); 2 | const { MessageAttachment } = require('discord.js'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'affect', 7 | aliases: ['affect'], 8 | description: 'This won\'t affect my baby, Huh?', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message, args) => { 12 | 13 | let user = await message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args.join(' ').toLocaleLowerCase()) || message.guild.members.cache.find(r => r.displayName.toLowerCase() === args.join(' ').toLocaleLowerCase()) || message.member; 14 | let m = await message.channel.send(`${emotes.load} **Please Wait...**`); 15 | 16 | let avatar = user.user.displayAvatarURL({ 17 | format: 'png', 18 | }); 19 | 20 | await Canvacord.Canvas.affect(avatar) 21 | .then(data => { 22 | Canvacord.write(data, './affect.png') 23 | let attachment = new MessageAttachment(data, 'affect.png'); 24 | m.delete({ timeout: 5000 }), 25 | message.channel.send(attachment) 26 | }); 27 | }, 28 | }; -------------------------------------------------------------------------------- /Commands/Image/beautiful.js: -------------------------------------------------------------------------------- 1 | const Canvacord = require('canvacord'); 2 | const { MessageAttachment } = require('discord.js'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'beautiful', 7 | aliases: ['beatiful'], 8 | description: 'This is Beautiful!', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message, args) => { 12 | 13 | let user = await message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args.join(' ').toLocaleLowerCase()) || message.guild.members.cache.find(r => r.displayName.toLowerCase() === args.join(' ').toLocaleLowerCase()) || message.member; 14 | let m = await message.channel.send(`${emotes.load} **Please Wait...**`); 15 | 16 | let avatar = user.user.displayAvatarURL({ 17 | format: 'png', 18 | }); 19 | 20 | await Canvacord.Canvas.beautiful(avatar) 21 | .then(data => { 22 | Canvacord.write(data, './beautiful.png') 23 | let attachment = new MessageAttachment(data, 'beautiful.png'); 24 | m.delete({ timeout: 5000 }), 25 | message.channel.send(attachment) 26 | }); 27 | } 28 | } -------------------------------------------------------------------------------- /Commands/Image/delete.js: -------------------------------------------------------------------------------- 1 | const Canvacord = require('canvacord'); 2 | const { MessageAttachment } = require('discord.js'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'delete', 7 | aliases: ['delete'], 8 | description: 'Delete this shit rn', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message, args) => { 12 | 13 | let user = await message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args.join(' ').toLocaleLowerCase()) || message.guild.members.cache.find(r => r.displayName.toLowerCase() === args.join(' ').toLocaleLowerCase()) || message.member; 14 | let m = await message.channel.send(`${emotes.load} **Please Wait...**`); 15 | 16 | let avatar = user.user.displayAvatarURL({ 17 | format: 'png', 18 | }); 19 | 20 | await Canvacord.Canvas.delete(avatar) 21 | .then(data => { 22 | Canvacord.write(data, './delete.png') 23 | let attachment = new MessageAttachment(data, 'delete.png'); 24 | m.delete({ timeout: 5000 }), 25 | message.channel.send(attachment) 26 | }); 27 | } 28 | } -------------------------------------------------------------------------------- /Commands/Image/fire.js: -------------------------------------------------------------------------------- 1 | const AmeClient = require('amethyste-api'); 2 | const AmeAPI = new AmeClient(config.AME_API); 3 | const { MessageAttachment } = require('discord.js'); 4 | 5 | module.exports = { 6 | help: { 7 | name: 'fire', 8 | aliases: ['fire'], 9 | description: 'test', 10 | category: __dirname.split("Commands\\")[1] 11 | }, 12 | run: async (client, message, args) => { 13 | 14 | let user = await message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args.join(' ').toLocaleLowerCase()) || message.guild.members.cache.find(r => r.displayName.toLowerCase() === args.join(' ').toLocaleLowerCase()) || message.member; 15 | let m = await message.channel.send(`${emotes.load} **Please Wait...**`); 16 | let buffer = await AmeAPI.generate("fire", { url: user.user.displayAvatarURL({ format: "png", size: 2048 }) }); 17 | let attachment = new MessageAttachment(buffer, "fire.png"); 18 | m.delete({ timeout: 5000 }); 19 | message.channel.send(attachment); 20 | 21 | } 22 | } -------------------------------------------------------------------------------- /Commands/Image/respect.js: -------------------------------------------------------------------------------- 1 | const AmeClient = require('amethyste-api'); 2 | const AmeAPI = new AmeClient(config.AME_API); 3 | const { MessageAttachment } = require('discord.js'); 4 | 5 | module.exports = { 6 | help: { 7 | name: 'respect', 8 | aliases: ['respect'], 9 | description: 'respect', 10 | category: __dirname.split("Commands\\")[1] 11 | }, 12 | run: async (client, message, args) => { 13 | 14 | let user = await message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args.join(' ').toLocaleLowerCase()) || message.guild.members.cache.find(r => r.displayName.toLowerCase() === args.join(' ').toLocaleLowerCase()) || message.member; 15 | let m = await message.channel.send(`${emotes.load} **Please Wait...**`); 16 | let buffer = await AmeAPI.generate("missionpassed", { url: user.user.displayAvatarURL({ format: "png", size: 2048 }) }); 17 | let attachment = new MessageAttachment(buffer, "respect.png"); 18 | m.delete({ timeout: 5000 }); 19 | message.channel.send(attachment); 20 | } 21 | } -------------------------------------------------------------------------------- /Commands/Image/rip.js: -------------------------------------------------------------------------------- 1 | const Canvacord = require('canvacord'); 2 | const { MessageAttachment } = require('discord.js'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'rip', 7 | aliases: ['rip'], 8 | description: 'Rip.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async(client, message, args) => { 12 | 13 | let user = await message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args.join(' ').toLocaleLowerCase()) || message.guild.members.cache.find(r => r.displayName.toLowerCase() === args.join(' ').toLocaleLowerCase()) || message.member; 14 | let m = await message.channel.send(`${emotes.load} **Please Wait...**`); 15 | 16 | let avatar = user.user.displayAvatarURL({ 17 | format: 'png', 18 | }); 19 | 20 | await Canvacord.Canvas.rip(avatar) 21 | .then(data => { 22 | Canvacord.write(data, './rip.png') 23 | let attachment = new MessageAttachment(data, 'rip.png'); 24 | m.delete({ timeout: 5000 }), 25 | message.channel.send(attachment) 26 | }); 27 | } 28 | } -------------------------------------------------------------------------------- /Commands/Image/scary.js: -------------------------------------------------------------------------------- 1 | const AmeClient = require('amethyste-api'); 2 | const AmeAPI = new AmeClient(config.AME_API); 3 | const { MessageAttachment } = require('discord.js'); 4 | 5 | module.exports = { 6 | help: { 7 | name: 'scary', 8 | aliases: ['scary'], 9 | description: 'S-Scary.', 10 | category: __dirname.split("Commands\\")[1] 11 | }, 12 | run: async (client, message, args) => { 13 | 14 | let user = await message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args.join(' ').toLocaleLowerCase()) || message.guild.members.cache.find(r => r.displayName.toLowerCase() === args.join(' ').toLocaleLowerCase()) || message.member; 15 | let m = await message.channel.send(`${emotes.load} **Please Wait...**`); 16 | let buffer = await AmeAPI.generate("scary", { url: user.user.displayAvatarURL({ format: "png", size: 2048 }) }); 17 | let attachment = new MessageAttachment(buffer, "scary.png"); 18 | m.delete({ timeout: 5000 }); 19 | message.channel.send(attachment); 20 | 21 | } 22 | } -------------------------------------------------------------------------------- /Commands/Image/trash.js: -------------------------------------------------------------------------------- 1 | const Canvacord = require('canvacord'); 2 | const { MessageAttachment } = require('discord.js'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'trash', 7 | aliases: ['trash'], 8 | description: 'TRASH NO!', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async(client, message, args) => { 12 | 13 | 14 | let user = await message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args.join(' ').toLocaleLowerCase()) || message.guild.members.cache.find(r => r.displayName.toLowerCase() === args.join(' ').toLocaleLowerCase()) || message.member; 15 | let m = await message.channel.send(`${emotes.load} **Please Wait...**`); 16 | 17 | let avatar = user.user.displayAvatarURL({ 18 | format: 'png', 19 | }); 20 | 21 | await Canvacord.Canvas.trash(avatar) 22 | .then(data => { 23 | Canvacord.write(data, './rip.png') 24 | let attachment = new MessageAttachment(data, 'rip.png'); 25 | m.delete({ timeout: 5000 }), 26 | message.channel.send(attachment) 27 | }); 28 | } 29 | } -------------------------------------------------------------------------------- /Commands/Image/triggered.js: -------------------------------------------------------------------------------- 1 | const Canvacord = require('canvacord'); 2 | const { MessageAttachment } = require('discord.js'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'triggered', 7 | aliases: ['triggered'], 8 | description: 'Triggered, Dang.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async(client, message, args) => { 12 | 13 | let user = await message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args.join(' ').toLocaleLowerCase()) || message.guild.members.cache.find(r => r.displayName.toLowerCase() === args.join(' ').toLocaleLowerCase()) || message.member; 14 | let m = await message.channel.send(`${emotes.load} **Please Wait...**`); 15 | 16 | let avatar = user.user.displayAvatarURL({ 17 | format: 'png', 18 | }); 19 | 20 | await Canvacord.Canvas.trigger(avatar) 21 | .then(data => { 22 | Canvacord.write(data, './triggered.gif') 23 | let attachment = new MessageAttachment(data, 'triggered.gif'); 24 | m.delete({ timeout: 5000 }), 25 | message.channel.send(attachment) 26 | }); 27 | } 28 | } -------------------------------------------------------------------------------- /Commands/Info/help.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const { stripIndents } = require('common-tags'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'help', 7 | aliases: ['help'], 8 | description: 'Shows all the commands.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message, args) => { 12 | 13 | const embed = new MessageEmbed() 14 | .setColor(config.embedcolor) 15 | .setAuthor(`${message.guild.me.displayName}`, message.guild.iconURL()) 16 | .setThumbnail(client.user.displayAvatarURL()); 17 | 18 | if (!args[0]) { 19 | 20 | let commandCategories = []; 21 | 22 | let markedNSFW = false; 23 | client.commands.forEach(c => { 24 | if (!commandCategories.includes(c.help.category)) { 25 | if (config.devs !== message.author.id && c.help.category === ('Owner')) return; 26 | if (!message.channel.nsfw && c.help.category === 'Nsfw') { 27 | if (!markedNSFW) { 28 | markedNSFW = true; 29 | embed.addField(`${emotes.nsfw} NSFW [3] -`, 'This section can only be used in an NSFW channel.'); 30 | } 31 | } 32 | else commandCategories.push(c.help.category); 33 | }; 34 | }) 35 | 36 | commandCategories.forEach(emote => { 37 | let cmds = client.commands.filter(c => c.help.category === (emote)); 38 | embed.setDescription(`**Karma's Prefix Is \`${config.prefix}\`\n\nFor Help Related To A Particular Command Type -\n\`${config.prefix}help [command name] Or ${config.prefix}help [alias]\`**`) 39 | embed.addField(`${emotes[toID(emote)]} ${emote} [${cmds.size}] -`, cmds.map(c => `\`${c.help.name}\``).join(" ")); 40 | }); 41 | embed.setImage('https://cdn.discordapp.com/attachments/770248422992248862/780032317909237760/unknown.png'); 42 | embed.setTimestamp(); 43 | 44 | return message.channel.send(embed); 45 | } else { 46 | let command = client.commands.get(client.aliases.get(args[0].toLowerCase() || args[0].toLowerCase())); 47 | if (!command) return message.channel.send(embed.setTitle("**Invalid Command!**").setDescription(`**Do \`${prefix}help\` For the List Of the Commands!**`)) 48 | command = command.help 49 | 50 | embed.setDescription(stripIndents`**Karma Prefix Is \`${config.prefix}\`**\n 51 | ** Command -** ${command.name.slice(0, 1).toUpperCase() + command.name.slice(1)}\n 52 | ** Description -** ${command.description || "No Description provided."}\n 53 | ** Needed Permissions -** ${command.accessableby || "everyone can use this command!"}\n 54 | ** Aliases -** ${command.aliases ? command.aliases.join(", ") : "None."}`) 55 | embed.setFooter(message.guild.name, message.guild.iconURL()) 56 | 57 | return message.channel.send(embed) 58 | } 59 | } 60 | } -------------------------------------------------------------------------------- /Commands/Info/info.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | module.exports = { 4 | help: { 5 | name: 'botinfo', 6 | aliases: ['info'], 7 | description: 'Shows the stats of the Bot', 8 | category: __dirname.split("Commands\\")[1] 9 | }, 10 | run: async (client, message) => { 11 | 12 | const mapping = { 13 | " ": " ", 14 | "0": ":zero:", 15 | "1": ":one:", 16 | "2": ":two:", 17 | "3": ":three:", 18 | "4": ":four:", 19 | "5": ":five:", 20 | "6": ":six:", 21 | "7": ":seven:", 22 | "8": ":eight:", 23 | "9": ":nine:", 24 | "!": "!", 25 | "?": "?", 26 | "#": "#", 27 | "*": "*" 28 | }; 29 | 30 | "abcdefghijklmnopqrstuvwxyz".split("").forEach(c => { 31 | mapping[c] = mapping[c.toUpperCase()] = `:regional_indicator_${c}:`; 32 | }); 33 | let guilds; 34 | let channels; 35 | let users; 36 | setTimeout(() => { 37 | guilds = 38 | `${client.guilds.cache.size}` 39 | .split("") 40 | .map(c => mapping[c] || c) 41 | .join("") 42 | channels = 43 | `${client.channels.cache.size}` 44 | .split("") 45 | .map(c => mapping[c] || c) 46 | .join("") 47 | let sayy = 0; 48 | client.guilds.cache.forEach(x => { 49 | sayy += x.memberCount 50 | }); 51 | users = 52 | `${sayy}` 53 | .split("") 54 | .map(c => mapping[c] || c) 55 | .join("") 56 | }, 200) 57 | 58 | setTimeout(() => { 59 | const embed = new MessageEmbed() 60 | .setImage("https://cdn.discordapp.com/attachments/770248422992248862/780032317909237760/unknown.png") 61 | .setThumbnail(client.user.avatarURL()) 62 | .setDescription("**Karma Bot Project.**" + "\n\n **Number of servers serviced :** " + guilds + 63 | "\n **Number of channels served : ** " + channels + 64 | "\n **Number of users served : ** " + users + 65 | "\n\n<:discordbotdev:757489652214267904> **Developers:** \n <@552814506070507531>") 66 | .addField("Invite Link: ", `**[Click Here!](https://discord.com/api/oauth2/authorize?client_id=636484020301201418&permissions=32&scope=bot)**`, true) 67 | .addField("Support Link: ", `**[Click Here!](https://discord.gg/NtyaM9d)**`, true) 68 | .addField("Vote Link:", `**[Click Here!](https://top.gg/bot/636484020301201418/vote)**`, true) 69 | .setTimestamp() 70 | .setFooter('© Karma', 'https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png') 71 | .setColor(config.embedcolor); 72 | message.react('755471130315194399') 73 | message.channel.send(embed) 74 | }, 500) 75 | } 76 | } -------------------------------------------------------------------------------- /Commands/Info/invite.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | module.exports = { 4 | help: { 5 | name: 'invite', 6 | aliases: ['inv'], 7 | description: 'Link for Bot\'s Invite', 8 | category: __dirname.split("Commands\\")[1], 9 | }, 10 | run: async (client, message) => { 11 | 12 | const embed = new MessageEmbed() 13 | .setThumbnail(client.user.avatarURL()) 14 | .setDescription("**Karma Bot Project** \n\n**👋 Hey!\n Do you want Invite me? [Click Here](https://discord.com/api/oauth2/authorize?client_id=636484020301201418&permissions=268435504&scope=bot) to Invite me!\nThanks for supporting me.** ❤️") 15 | .addField("Support Link: ", `**[Click Here!](https://discord.gg/NtyaM9d)**`, true) 16 | .addField("Vote Link:", `**[Click Here!](https://top.gg/bot/636484020301201418/vote)**`, true) 17 | .setTimestamp() 18 | .setFooter("© Karma", "https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png") 19 | .setColor(config.embedcolor); 20 | message.channel.send(embed) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Commands/Info/repo.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | module.exports = { 4 | help: { 5 | name: 'repo', 6 | aliases: ['repo'], 7 | description: 'Link to the Github Repository', 8 | category: __dirname.split("Commands\\")[1] 9 | }, 10 | run: async (client, message) => { 11 | 12 | const embed = new MessageEmbed() 13 | .setThumbnail(client.user.avatarURL()) 14 | .setDescription("**Karma Bot Project** \n\n<:GitHub:803579137759379497> **Karma Bot is Open Source! [Click Here](https://github.com/DeltaCoderr/KarmaBot) to check the Github!\n" + emotes.flyinghearts + "Contributions are Welcomed, Thanks for supporting me.** ❤️") 15 | .addField("Invite Link: ", `**[Click Here!](https://discord.com/api/oauth2/authorize?client_id=636484020301201418&permissions=32&scope=bot)**`, true) 16 | .addField("Support Link: ", `**[Click Here!](https://discord.gg/NtyaM9d)**`, true) 17 | .addField("Vote Link:", `**[Click Here!](https://top.gg/bot/636484020301201418/vote)**`, true) 18 | .setTimestamp() 19 | .setFooter("© Karma", "https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png") 20 | .setColor(config.embedcolor); 21 | message.channel.send(embed) 22 | } 23 | } -------------------------------------------------------------------------------- /Commands/Info/uptime.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const moment = require("moment"); 3 | require('moment-duration-format'); 4 | 5 | module.exports = { 6 | help: { 7 | name: 'uptime', 8 | aliases: ['uptime'], 9 | description: 'Shows the Bot\'s uptime', 10 | category: __dirname.split("Commands\\")[1] 11 | }, 12 | run: async (client, message) => { 13 | 14 | let uptime = moment.duration(client.uptime).format("D [ days] h[ hours] m[ minutes] s[ seconds]") 15 | 16 | let bicon = client.user.displayAvatarURL() 17 | const botembed = new MessageEmbed() 18 | .setTitle("Karma Bot Project") 19 | .setColor(config.embedcolor) 20 | .setDescription(` **Karma has been active for** \`${uptime}\`. \n **The ping is currently** \`${bot.ws.ping} ms\`. \n\n ❗ **__Attention!__** **Karma is restarting himself after \`10 to 15 hours\` for a good quality and lagless sound!**`) 21 | .setTimestamp() 22 | .setFooter('© Karma ', 'https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png') 23 | .setThumbnail(bicon); 24 | message.channel.send(botembed); 25 | } 26 | } -------------------------------------------------------------------------------- /Commands/Music/clear-queue.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { embedcolor } = require('../../Configs/config'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'clear-queue', 7 | aliases: ['clear-queue'], 8 | description: 'Clears the whole Queue.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message) => { 12 | 13 | const embed = new Discord.MessageEmbed() 14 | .setTitle('Something went wrong!') 15 | .setDescription(`${emotes.error} - You're not in a voice channel !`) 16 | .setFooter('Karma Music System') 17 | .setColor(embedcolor) 18 | .setTimestamp(); 19 | 20 | const embed2 = new Discord.MessageEmbed() 21 | .setTitle('Something went wrong!') 22 | .setDescription(`${emotes.error} - You are not in the same voice channel !`) 23 | .setFooter('Karma Music System') 24 | .setColor(embedcolor) 25 | .setTimestamp(); 26 | 27 | const embed3 = new Discord.MessageEmbed() 28 | .setTitle('Something went wrong!') 29 | .setDescription(`${emotes.error} - No music currently playing !`) 30 | .setFooter('Karma Music System') 31 | .setColor(embedcolor) 32 | .setTimestamp(); 33 | 34 | const embed4 = new Discord.MessageEmbed() 35 | .setTitle('Something went wrong!') 36 | .setDescription(`${emotes.error} - There is only one song in the queue.`) 37 | .setFooter('Karma Music System') 38 | .setColor(embedcolor) 39 | .setTimestamp(); 40 | 41 | const embed5 = new Discord.MessageEmbed() 42 | .setTitle('Success!') 43 | .setDescription(`${emotes.success} - The queue has just been **removed** !`) 44 | .setFooter(client.user.username + ' Music System') 45 | .setColor('GREEN') 46 | .setTimestamp(); 47 | 48 | if (!message.member.voice.channel) return message.channel.send(embed); 49 | 50 | if (message.guild.me.voice.channel && message.member.voice.channel.id !== message.guild.me.voice.channel.id) return message.channel.send(embed2); 51 | 52 | if (!client.player.getQueue(message)) return message.channel.send(embed3); 53 | 54 | if (client.player.getQueue(message).tracks.length <= 1) return message.channel.send(embed4); 55 | 56 | client.player.clearQueue(message); 57 | 58 | message.channel.send(embed5); 59 | 60 | } 61 | } -------------------------------------------------------------------------------- /Commands/Music/filter.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { embedcolor } = require('../../Configs/config'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'filter', 7 | aliases: ['filter'], 8 | description: 'Inserts the Provided Filter into the Music.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message, args) => { 12 | 13 | const embed = new Discord.MessageEmbed() 14 | .setTitle('Something went wrong!') 15 | .setDescription(`${emotes.error} - You're not in a voice channel !`) 16 | .setFooter('Karma Music System') 17 | .setColor(embedcolor) 18 | .setTimestamp(); 19 | 20 | const embed2 = new Discord.MessageEmbed() 21 | .setTitle('Something went wrong!') 22 | .setDescription(`${emotes.error} - You are not in the same voice channel !`) 23 | .setFooter('Karma Music System') 24 | .setColor(embedcolor) 25 | .setTimestamp(); 26 | 27 | const embed3 = new Discord.MessageEmbed() 28 | .setTitle('Something went wrong!') 29 | .setDescription(`${emotes.error} - No music currently playing !`) 30 | .setFooter('Karma Music System') 31 | .setColor(embedcolor) 32 | .setTimestamp(); 33 | 34 | const embed4 = new Discord.MessageEmbed() 35 | .setTitle('Something went wrong!') 36 | .setDescription(`${emotes.error} - Please specify a valid filter to enable or disable !`) 37 | .setFooter('Karma Music System') 38 | .setColor(embedcolor) 39 | .setTimestamp(); 40 | 41 | const embed5 = new Discord.MessageEmbed() 42 | .setTitle('Something went wrong!') 43 | .setDescription(`${emotes.error} - This filter doesn't exist, try for example (bassboost, pulsator...) !`) 44 | .setFooter('Karma M Music System') 45 | .setColor(embedcolor) 46 | .setTimestamp(); 47 | 48 | const embed6 = new Discord.MessageEmbed() 49 | .setTitle('Success!') 50 | .setDescription(`${emotes.success} - I'm **adding** the filter to the music, please wait... Note : the longer the music is, the longer this will take.`) 51 | .setFooter('Karma Music System') 52 | .setColor(embedcolor) 53 | .setTimestamp(); 54 | 55 | const embed7 = new Discord.MessageEmbed() 56 | .setTitle('Success!') 57 | .setDescription(`${emotes.success} - I'm **disabling** the filter on the music, please wait... Note : the longer the music is playing, the longer this will take.`) 58 | .setFooter('Karma Music System') 59 | .setColor(embedcolor) 60 | .setTimestamp(); 61 | 62 | if (!message.member.voice.channel) return message.channel.send(embed); 63 | 64 | if (message.guild.me.voice.channel && message.member.voice.channel.id !== message.guild.me.voice.channel.id) return message.channel.send(embed2); 65 | 66 | if (!client.player.getQueue(message)) return message.channel.send(embed3); 67 | 68 | if (!args[0]) return message.channel.send(embed4); 69 | 70 | const filterToUpdate = Object.keys(filters).find((x) => x.toLowerCase() === args[0].toLowerCase()); 71 | 72 | if (!filterToUpdate) return message.channel.send(embed5); 73 | 74 | const filtersUpdated = {}; 75 | 76 | filtersUpdated[filterToUpdate] = client.player.getQueue(message).filters[filterToUpdate] ? false : true; 77 | 78 | client.player.setFilters(message, filtersUpdated); 79 | 80 | if (filtersUpdated[filterToUpdate]) message.channel.send(embed6); 81 | else message.channel.send(embed7); 82 | } 83 | } -------------------------------------------------------------------------------- /Commands/Music/filters.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { embedcolor } = require('../../Configs/config'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'filters', 7 | aliases: ['filters'], 8 | description: 'Shows all the filters.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message) => { 12 | const embednoinvoice = new Discord.MessageEmbed() 13 | .setTitle('Error!') 14 | .setDescription(`${emotes.error} - You're not in a voice channel !`) 15 | .setFooter('Karma Music System') 16 | .setColor(embedcolor) 17 | .setTimestamp(); 18 | const embednosong = new Discord.MessageEmbed() 19 | .setTitle('Error!') 20 | .setDescription(`${emotes.error} - No songs currently playing !`) 21 | .setFooter('Karma Music System') 22 | .setColor(embedcolor) 23 | .setTimestamp(); 24 | if (!message.member.voice.channel) return message.channel.send(embednoinvoice); 25 | 26 | if (!client.player.getQueue(message)) return message.channel.send(embednosong); 27 | 28 | const disabledEmoji = emotes.error; 29 | const enabledEmoji = emotes.success; 30 | 31 | const filtersStatuses = [[], []]; 32 | 33 | Object.keys(filters).forEach((filterName) => { 34 | const array = filtersStatuses[0].length > filtersStatuses[1].length ? filtersStatuses[1] : filtersStatuses[0]; 35 | array.push(filters[filterName] + " : " + (client.player.getQueue(message).filters[filterName] ? enabledEmoji : disabledEmoji)); 36 | }); 37 | 38 | message.channel.send({ 39 | embed: { 40 | footer: { text: 'Karma Music System' }, 41 | fields: [ 42 | { name: 'Filters', value: filtersStatuses[0].join('\n'), inline: true }, 43 | { name: '** **', value: filtersStatuses[1].join('\n'), inline: true }, 44 | ], 45 | timestamp: new Date(), 46 | color: embedcolor, 47 | description: `List of all filters enabled or disabled.\nUse \`${config.prefix}filter\` to add a filter to a song.`, 48 | }, 49 | }); 50 | } 51 | } -------------------------------------------------------------------------------- /Commands/Music/leave.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { embedcolor } = require('../../Configs/config'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'leave', 7 | aliases: ['leave'], 8 | description: 'Leaves the VC.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message) => { 12 | 13 | 14 | const embednoinvoice = new Discord.MessageEmbed() 15 | .setTitle('Error!') 16 | .setDescription(`${emotes.error} - You're not in a voice channel !`) 17 | .setFooter('Karma Music System') 18 | .setColor(embedcolor) 19 | if (!message.member.voice.channel) return message.channel.send(embednoinvoice); 20 | 21 | client.player.setRepeatMode(message, false); 22 | client.player.stop(message); 23 | 24 | await message.member.voice.channel.leave() 25 | 26 | const left = new Discord.MessageEmbed() 27 | .setTitle('Left The Voice Channel') 28 | .setDescription(`${emotes.success} **Successfully left the voice channel!**`) 29 | .setFooter('Karma Music System') 30 | .setColor(embedcolor) 31 | return message.channel.send(left) 32 | } 33 | } -------------------------------------------------------------------------------- /Commands/Music/loop.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { embedcolor } = require('../../Configs/config'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'loop', 7 | aliases: ['loop'], 8 | description: 'Loops the Music.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message, args) => { 12 | 13 | const embed1 = new Discord.MessageEmbed() 14 | .setTitle('Something went wrong!') 15 | .setDescription(`${emotes.error} - You're not in a voice channel !`) 16 | .setFooter('Karma Music System') 17 | .setColor(embedcolor) 18 | .setTimestamp(); 19 | 20 | const embed2 = new Discord.MessageEmbed() 21 | .setTitle('Something went wrong!') 22 | .setDescription(`${emotes.error} - No music currently playing !`) 23 | .setFooter('Karma Music System') 24 | .setColor(embedcolor) 25 | .setTimestamp(); 26 | 27 | const embed3 = new Discord.MessageEmbed() 28 | .setTitle('Success!') 29 | .setDescription(`${emotes.success} - Repeat mode **disabled** !`) 30 | .setFooter('Karma Music System') 31 | .setColor(embedcolor) 32 | .setTimestamp(); 33 | 34 | const embed4 = new Discord.MessageEmbed() 35 | .setTitle('Success!') 36 | .setDescription(`${emotes.success} - Repeat mode **enabled** the whole queue will be repeated endlessly !`) 37 | .setFooter('Karma Music System') 38 | .setColor(embedcolor) 39 | .setTimestamp(); 40 | 41 | const embed5 = new Discord.MessageEmbed() 42 | .setTitle('Success!') 43 | .setDescription(`${emotes.success} - Repeat mode **disabled** !`) 44 | .setFooter('Karma Music System') 45 | .setColor(embedcolor) 46 | .setTimestamp(); 47 | 48 | const embed6 = new Discord.MessageEmbed() 49 | .setTitle('Success!') 50 | .setDescription(`${emotes.success} - Repeat mode **enabled** the current music will be repeated endlessly !`) 51 | .setFooter('Karma Music System') 52 | .setColor(embedcolor) 53 | .setTimestamp(); 54 | 55 | 56 | if (!message.member.voice.channel) return message.channel.send(embed1); 57 | 58 | if (message.guild.me.voice.channel && message.member.voice.channel.id !== message.guild.me.voice.channel.id) return message.channel.send(`${emotes.error} - You are not in the same voice channel !`); 59 | 60 | if (!client.player.getQueue(message)) return message.channel.send(embed2); 61 | 62 | if (args.join(" ").toLowerCase() === 'queue') { 63 | if (client.player.getQueue(message).loopMode) { 64 | client.player.setLoopMode(message, false); 65 | return message.channel.send(embed3); 66 | } else { 67 | client.player.setLoopMode(message, true); 68 | return message.channel.send(embed4); 69 | }; 70 | } else { 71 | if (client.player.getQueue(message).repeatMode) { 72 | client.player.setRepeatMode(message, false); 73 | return message.channel.send(embed5); 74 | } else { 75 | client.player.setRepeatMode(message, true); 76 | return message.channel.send(embed6); 77 | }; 78 | } 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /Commands/Music/lyrics.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js') 2 | const Genius = require("genius-lyrics"); 3 | const Client = new Genius.Client(""); 4 | 5 | module.exports = { 6 | help: { 7 | name: 'lyrics', 8 | aliases: ['lyrics'], 9 | description: 'Get the Lyrics of any song', 10 | category: __dirname.split("Commands\\")[1] 11 | }, 12 | run: async (client, message, args) => { 13 | 14 | let embed = new MessageEmbed() 15 | .setDescription(` ${emotes.load} **Please wait, im looking for the Lyrics, It can take \`few \` seconds**.`) 16 | .setColor("FF0000") 17 | if (!args.length) { 18 | return message.channel.send("Please provide the Song name.") 19 | } 20 | 21 | const msg = await message.channel.send(embed) 22 | try { 23 | const songs = await Client.songs.search(args.join(" ")); 24 | const lyrics = await songs[0].lyrics(); 25 | const artist = await Client.artists.get() 26 | 27 | console.log(lyrics) 28 | console.log(artist.name) 29 | 30 | if (lyrics.length > 4095) { 31 | msg.delete() 32 | return message.channel.send('Lyrics are too long to be returned as embed'); 33 | } 34 | 35 | if (lyrics.length < 2048) { 36 | const lyricsEmbed = new MessageEmbed() 37 | 38 | .setColor("FF0000") 39 | .setDescription(lyrics.trim()) 40 | .setTimestamp() 41 | .setFooter('© Karma Music', 'https://cdn.discordapp.com/attachments/725019921159028808/739771007803326505/Screenshot_20200803-1503282.png');;; 42 | return msg.edit(lyricsEmbed); 43 | } else { 44 | // lyrics.length > 2048 45 | const firstLyricsEmbed = new MessageEmbed() 46 | .setAuthor('Karma Lyrics', 'https://cdn.discordapp.com/attachments/725019921159028808/739771007803326505/Screenshot_20200803-1503282.png') 47 | .setColor("FF0000") 48 | .setDescription(lyrics.slice(0, 2048));; 49 | const secondLyricsEmbed = new MessageEmbed() 50 | .setColor("FF0000") 51 | .setDescription(lyrics.slice(2048, lyrics.length)) 52 | .setTimestamp() 53 | .setFooter('© Karma Music', 'https://cdn.discordapp.com/attachments/725019921159028808/739771007803326505/Screenshot_20200803-1503282.png');; 54 | msg.edit(firstLyricsEmbed); 55 | message.channel.send(secondLyricsEmbed); 56 | return; 57 | } 58 | 59 | } catch (e) { 60 | 61 | embed.setDescription("Got err : " + e) 62 | msg.edit(embed) 63 | console.log(e); 64 | } 65 | } 66 | } -------------------------------------------------------------------------------- /Commands/Music/np.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { embedcolor } = require('../../Configs/config'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'np', 7 | aliases: ['np'], 8 | description: 'Now Playing.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message) => { 12 | 13 | 14 | const embed1 = new Discord.MessageEmbed() 15 | .setTitle('Something went wrong!') 16 | .setDescription(`${emotes.error} - You're not in a voice channel !`) 17 | .setFooter('Karma Music System') 18 | .setColor(embedcolor) 19 | .setTimestamp(); 20 | 21 | const embed2 = new Discord.MessageEmbed() 22 | .setTitle('Something went wrong!') 23 | .setDescription(`${emotes.error} - You're not in my voice channel!`) 24 | .setFooter('Karma Music System') 25 | .setColor(embedcolor) 26 | .setTimestamp(); 27 | 28 | const embed3 = new Discord.MessageEmbed() 29 | .setTitle('Something went wrong!') 30 | .setDescription(`${emotes.error} - I'm not playing anything?`) 31 | .setFooter('Karma Music System') 32 | .setColor(embedcolor) 33 | .setTimestamp(); 34 | 35 | if (!message.member.voice.channel) return message.reply(embed1); 36 | if (message.guild.me.voice.channel && message.guild.me.voice.channelID !== message.member.voice.channelID) return message.reply(embed2); 37 | 38 | const queue = client.player.getQueue(message); 39 | if (!queue) return message.reply(embed3); 40 | 41 | const current = queue.playing; 42 | 43 | const filters = []; 44 | 45 | Object.keys(client.player.getQueue(message).filters).forEach((filterName) => { 46 | if (client.player.getQueue(message).filters[filterName]) filters.push(filterName); 47 | }); 48 | 49 | const embed = new Discord.MessageEmbed() 50 | .setTitle("Now Playing!") 51 | .addField("📋 Title:", current.title, true) 52 | .addField("💬 Author:", current.author, true) 53 | .addField("👤 Queued by:", current.requestedBy.tag, true) 54 | .addField("📜 Views:", current.views, true) 55 | .addField(`⏲️ Duration:`, current.duration, true) 56 | .addField(`${emotes.success} Filters activated:`, filters.length, true ) 57 | .addField(`${emotes.diskspin} Progress:`, client.player.createProgressBar(message, { timecodes: true, length: 15 })) 58 | .setTimestamp() 59 | .setFooter(`Requested by: ${message.author.tag}`, message.author.displayAvatarURL()) 60 | .setColor(embedcolor); 61 | 62 | if (current.thumbnail) embed.setThumbnail(current.thumbnail); 63 | 64 | message.reply(embed); 65 | 66 | } 67 | } -------------------------------------------------------------------------------- /Commands/Music/pause.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { embedcolor } = require('../../Configs/config'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'pause', 7 | aliases: ['pause'], 8 | description: 'Pauses the song.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message) => { 12 | const embed1 = new Discord.MessageEmbed() 13 | .setTitle('Something went wrong!') 14 | .setDescription(`${emotes.error} - You're not in a voice channel !`) 15 | .setFooter('Karma Music System') 16 | .setColor(embedcolor) 17 | .setTimestamp(); 18 | 19 | const embed2 = new Discord.MessageEmbed() 20 | .setTitle('Something went wrong!') 21 | .setDescription(`${emotes.error} - You are not in the same voice channel !`) 22 | .setFooter('Karma Music System') 23 | .setColor(embedcolor) 24 | .setTimestamp(); 25 | 26 | const embed3 = new Discord.MessageEmbed() 27 | .setTitle('Something went wrong!') 28 | .setDescription(`${emotes.error} - No music currently playing !`) 29 | .setFooter('Karma Music System') 30 | .setColor(embedcolor) 31 | .setTimestamp(); 32 | 33 | const embed4 = new Discord.MessageEmbed() 34 | .setTitle('Something went wrong!') 35 | .setDescription(`${emotes.error} - The music is already paused !`) 36 | .setFooter('Karma Music System') 37 | .setColor(embedcolor) 38 | .setTimestamp(); 39 | 40 | if (!message.member.voice.channel) return message.channel.send(embed1); 41 | 42 | if (message.guild.me.voice.channel && message.member.voice.channel.id !== message.guild.me.voice.channel.id) return message.channel.send(embed2); 43 | 44 | if (!client.player.getQueue(message)) return message.channel.send(embed3); 45 | 46 | if (client.player.getQueue(message).paused) return message.channel.send(embed4); 47 | 48 | const success = client.player.pause(message); 49 | const embed5 = new Discord.MessageEmbed() 50 | .setTitle('Success!') 51 | .setDescription(`${emotes.success} - Song ${client.player.getQueue(message).playing.title} paused !`) 52 | .setFooter('Karma Music System') 53 | .setColor(embedcolor) 54 | .setTimestamp(); 55 | if (success) message.channel.send(embed5); 56 | } 57 | } -------------------------------------------------------------------------------- /Commands/Music/play.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { embedcolor } = require('../../Configs/config'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'play', 7 | aliases: ['play'], 8 | description: 'Plays the given song.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message, args) => { 12 | const embed1 = new Discord.MessageEmbed() 13 | .setTitle('Something went wrong!') 14 | .setDescription(`${emotes.error} - You're not in a voice channel !`) 15 | .setFooter('Karma Music System') 16 | .setColor(embedcolor) 17 | .setTimestamp(); 18 | 19 | const embed2 = new Discord.MessageEmbed() 20 | .setTitle('Something went wrong!') 21 | .setDescription(`${emotes.error} - You're not in my voice channel !`) 22 | .setFooter('Karma Music System') 23 | .setColor(embedcolor) 24 | .setTimestamp(); 25 | 26 | const embed3 = new Discord.MessageEmbed() 27 | .setTitle('Something went wrong!') 28 | .setDescription(`${emotes.error} - Please include a search query !`) 29 | .setFooter('Karma Music System') 30 | .setColor(embedcolor) 31 | .setTimestamp(); 32 | 33 | if (!message.member.voice.channel) return message.reply(embed1); 34 | if (message.guild.me.voice.channel && message.guild.me.voice.channelID !== message.member.voice.channelID) return message.reply(embed2); 35 | 36 | const query = args.join(" "); 37 | if (!query) return message.reply(embed3); 38 | 39 | await client.player.play(message, query, true); 40 | } 41 | } -------------------------------------------------------------------------------- /Commands/Music/queue.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { embedcolor } = require('../../Configs/config'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'queue', 7 | aliases: ['queue'], 8 | description: 'Shows the Queue\'d Music', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message) => { 12 | const embed1 = new Discord.MessageEmbed() 13 | .setTitle('Something went wrong!') 14 | .setDescription(`${emotes.error} - You're not in a voice channel !`) 15 | .setFooter('Karma Music System') 16 | .setColor(embedcolor) 17 | .setTimestamp(); 18 | 19 | const embed2 = new Discord.MessageEmbed() 20 | .setTitle('Something went wrong!') 21 | .setDescription(`${emotes.error} - You're not in my voice channel !`) 22 | .setFooter('Karma Music System') 23 | .setColor(embedcolor) 24 | .setTimestamp(); 25 | 26 | const embed3 = new Discord.MessageEmbed() 27 | .setTitle('Something went wrong!') 28 | .setDescription(`${emotes.error} - No songs currently playing !`) 29 | .setFooter('Karma Music System') 30 | .setColor(embedcolor) 31 | .setTimestamp(); 32 | 33 | if (!message.member.voice.channel) return message.channel.send(embed1); 34 | 35 | if (message.guild.me.voice.channel && message.member.voice.channel.id !== message.guild.me.voice.channel.id) return message.channel.send(embed2); 36 | 37 | const queue = client.player.getQueue(message); 38 | 39 | if (!client.player.getQueue(message)) return message.channel.send(embed3); 40 | const embed4 = new Discord.MessageEmbed() 41 | .setTitle(`Queue for ${message.guild.name} ${emotes.diskspin}`) 42 | .setDescription(`**Current**: ${queue.playing.title} | ${queue.playing.author}\n\n` + (queue.tracks.map((track, i) => { 43 | return `**#${i + 1}** - Title: **${track.title}** | Uploaded by: **${track.author}** | Requested by: **${track.requestedBy.username}**` 44 | }).slice(0, 5).join('\n') + `\n\n${queue.tracks.length > 5 ? `And **${queue.tracks.length - 5}** other songs...` : `In the playlist **${queue.tracks.length}** song(s)...`}`)) 45 | .setFooter('Karma Music System') 46 | .setColor(embedcolor) 47 | .setTimestamp(); 48 | message.channel.send(embed4); 49 | 50 | } 51 | } -------------------------------------------------------------------------------- /Commands/Music/resume.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { embedcolor } = require('../../Configs/config'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'resume', 7 | aliases: ['resume'], 8 | description: 'Resume the song.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message) => { 12 | 13 | const embed1 = new Discord.MessageEmbed() 14 | .setTitle('Something went wrong!') 15 | .setDescription(`${emotes.error} - You're not in a voice channel !`) 16 | .setFooter('Karma Music System') 17 | .setColor(embedcolor) 18 | .setTimestamp(); 19 | 20 | const embed2 = new Discord.MessageEmbed() 21 | .setTitle('Something went wrong!') 22 | .setDescription(`${emotes.error} - You're not in my voice channel !`) 23 | .setFooter('Karma Music System') 24 | .setColor(embedcolor) 25 | .setTimestamp(); 26 | 27 | const embed3 = new Discord.MessageEmbed() 28 | .setTitle('Something went wrong!') 29 | .setDescription(`${emotes.error} - No music currently playing !`) 30 | .setFooter('Karma Music System') 31 | .setColor(embedcolor) 32 | .setTimestamp(); 33 | 34 | const embed4 = new Discord.MessageEmbed() 35 | .setTitle('Something went wrong!') 36 | .setDescription(`${emotes.error} - The music is already playing !`) 37 | .setFooter('Karma Music System') 38 | .setColor(embedcolor) 39 | .setTimestamp(); 40 | 41 | if (!message.member.voice.channel) return message.channel.send(embed1); 42 | 43 | if (message.guild.me.voice.channel && message.member.voice.channel.id !== message.guild.me.voice.channel.id) return message.channel.send(embed2); 44 | 45 | if (!client.player.getQueue(message)) return message.channel.send(embed3); 46 | 47 | if (!client.player.getQueue(message).paused) return message.channel.send(embed4); 48 | 49 | const success = client.player.resume(message); 50 | const embed5 = new Discord.MessageEmbed() 51 | .setTitle('Success!') 52 | .setDescription(`${emotes.success} - Song ${client.player.getQueue(message).playing.title} resumed !`) 53 | .setFooter('Karma Music System') 54 | .setColor(embedcolor) 55 | .setTimestamp(); 56 | if (success) message.channel.send(embed5); 57 | } 58 | } -------------------------------------------------------------------------------- /Commands/Music/search.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { embedcolor } = require('../../Configs/config'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'search', 7 | aliases: ['search'], 8 | description: 'Searches the given Song from Youtube.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message, args) => { 12 | 13 | 14 | const embed1 = new Discord.MessageEmbed() 15 | .setTitle('Something went wrong!') 16 | .setDescription(`${emotes.error} - You're not in a voice channel !`) 17 | .setFooter('Karma Music System') 18 | .setColor(embedcolor) 19 | .setTimestamp(); 20 | 21 | const embed2 = new Discord.MessageEmbed() 22 | .setTitle('Something went wrong!') 23 | .setDescription(`${emotes.error} - You're not in my voice channel !`) 24 | .setFooter('Karma Music System') 25 | .setColor(embedcolor) 26 | .setTimestamp(); 27 | 28 | const embed3 = new Discord.MessageEmbed() 29 | .setTitle('Something went wrong!') 30 | .setDescription(`${emotes.error} - Please indicate the title of a song !`) 31 | .setFooter('Karma Music System') 32 | .setColor(embedcolor) 33 | .setTimestamp(); 34 | 35 | if (!message.member.voice.channel) return message.channel.send(embed1); 36 | 37 | if (message.guild.me.voice.channel && message.member.voice.channel.id !== message.guild.me.voice.channel.id) return message.channel.send(embed2); 38 | 39 | if (!args[0]) return message.channel.send(embed3); 40 | 41 | client.player.play(message, args.join(" ")); 42 | 43 | } 44 | } -------------------------------------------------------------------------------- /Commands/Music/shuffle.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { embedcolor } = require('../../Configs/config'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'shuffle', 7 | aliases: ['shuffle'], 8 | description: 'Shuffles the Queue.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message) => { 12 | const embednoinvoice = new Discord.MessageEmbed() 13 | .setTitle('Error!') 14 | .setDescription(`${emotes.error} - You're not in a voice channel !`) 15 | .setFooter('Karma Music System') 16 | .setColor(embedcolor) 17 | .setTimestamp(); 18 | const embednosong = new Discord.MessageEmbed() 19 | .setTitle('Error!') 20 | .setDescription(`${emotes.error} - No songs currently playing !`) 21 | .setFooter('Karma Music System') 22 | .setColor(embedcolor) 23 | .setTimestamp(); 24 | const embedshuffle = new Discord.MessageEmbed() 25 | .setTitle('Shuffled!') 26 | .setDescription(`${emotes.success} - Queue shuffled **${client.player.getQueue(message).tracks.length}** song(s) !`) 27 | .setFooter('Karma Music System') 28 | .setColor(embedcolor) 29 | .setTimestamp(); 30 | if (!message.member.voice.channel) return message.channel.send(embednoinvoice); 31 | 32 | if (!client.player.getQueue(message)) return message.channel.send(embednosong); 33 | 34 | client.player.shuffle(message); 35 | 36 | return message.channel.send(embedshuffle); 37 | 38 | } 39 | } -------------------------------------------------------------------------------- /Commands/Music/skip.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { embedcolor } = require('../../Configs/config'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'skip', 7 | aliases: ['skip'], 8 | description: 'Skips the Music.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message) => { 12 | 13 | const embed1 = new Discord.MessageEmbed() 14 | .setTitle('Something went wrong!') 15 | .setDescription(`${emotes.error} - You're not in a voice channel !`) 16 | .setFooter('Karma Music System') 17 | .setColor(embedcolor) 18 | .setTimestamp(); 19 | 20 | const embed2 = new Discord.MessageEmbed() 21 | .setTitle('Something went wrong!') 22 | .setDescription(`${emotes.error} - You're not in my voice channel !`) 23 | .setFooter('Karma Music System') 24 | .setColor(embedcolor) 25 | .setTimestamp(); 26 | 27 | const embed3 = new Discord.MessageEmbed() 28 | .setTitle('Something went wrong!') 29 | .setDescription(`${emotes.error} - No music currently playing !`) 30 | .setFooter('Karma Music System') 31 | .setColor(embedcolor) 32 | .setTimestamp(); 33 | 34 | const embed4 = new Discord.MessageEmbed() 35 | .setTitle('Success!') 36 | .setDescription(`${emotes.success} - The current music has just been **skipped** !`) 37 | .setFooter('Karma Music System') 38 | .setColor(embedcolor) 39 | .setTimestamp(); 40 | 41 | if (!message.member.voice.channel) return message.channel.send(embed1); 42 | 43 | if (message.guild.me.voice.channel && message.member.voice.channel.id !== message.guild.me.voice.channel.id) return message.channel.send(embed2); 44 | 45 | if (!client.player.getQueue(message)) return message.channel.send(embed3); 46 | 47 | const success = client.player.skip(message); 48 | 49 | if (success) message.channel.send(embed4); 50 | } 51 | } -------------------------------------------------------------------------------- /Commands/Music/volume.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { embedcolor } = require('../../Configs/config'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'volume', 7 | aliases: ['volume'], 8 | description: 'Adjust the volume of the Song.', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message, args) => { 12 | 13 | const embed1 = new Discord.MessageEmbed() 14 | .setTitle('Something went wrong!') 15 | .setDescription(`${emotes.error} - You're not in a voice channel !`) 16 | .setFooter('Karma Music System') 17 | .setColor(embedcolor) 18 | .setTimestamp(); 19 | 20 | const embed2 = new Discord.MessageEmbed() 21 | .setTitle('Something went wrong!') 22 | .setDescription(`${emotes.error} - You're not in my voice channel !`) 23 | .setFooter('Karma Music System') 24 | .setColor(embedcolor) 25 | .setTimestamp(); 26 | 27 | const embed3 = new Discord.MessageEmbed() 28 | .setTitle('Something went wrong!') 29 | .setDescription(`${emotes.error} - No music currently playing !`) 30 | .setFooter('Karma Music System') 31 | .setColor(embedcolor) 32 | .setTimestamp(); 33 | 34 | const embed4 = new Discord.MessageEmbed() 35 | .setTitle('Something went wrong!') 36 | .setDescription(`${emotes.error} - Please enter the volume amount to set!`) 37 | .setFooter('Karma Music System') 38 | .setColor(embedcolor) 39 | .setTimestamp(); 40 | 41 | const embed5 = new Discord.MessageEmbed() 42 | .setTitle('Something went wrong!') 43 | .setDescription(`${emotes.error} - Volume amount must be in range of \`0-100\`!`) 44 | .setFooter('Karma Music System') 45 | .setColor(embedcolor) 46 | .setTimestamp(); 47 | 48 | if (!message.member.voice.channel) return message.reply(embed1); 49 | if (message.guild.me.voice.channel && message.guild.me.voice.channelID !== message.member.voice.channelID) return message.reply(embed2); 50 | 51 | const queue = client.player.getQueue(message); 52 | if (!queue) return message.reply(embed3); 53 | 54 | const amount = args[0]; 55 | if (!amount || isNaN(amount)) return message.reply(embed4); 56 | if (parseInt(amount) < 0 || parseInt(amount) > 100) return message.reply(embed5); 57 | 58 | queue.player.setVolume(message, parseInt(amount)); 59 | const embed6 = new Discord.MessageEmbed() 60 | .setTitle('Success!') 61 | .setDescription(`${emotes.success} - Volume changed to **${queue.volume}%**!`) 62 | .setFooter('Karma Music System') 63 | .setColor(embedcolor) 64 | .setTimestamp(); 65 | message.reply(embed6); 66 | 67 | } 68 | } -------------------------------------------------------------------------------- /Commands/Nsfw/bondage.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const fetch = require('node-fetch'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'bondage', 7 | aliases: ['bondage'], 8 | description: 'Shows Bondage Pictures', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message) => { 12 | if (!message.channel.nsfw) return message.channel.send({ 13 | embed: { 14 | color: config.embedcolor, 15 | description: "You can only use this command in an NSFW Channel!" 16 | } 17 | }) 18 | 19 | await fetch("https://shiro.gg/api/images/nsfw/bondage") 20 | .then(res => res.json()) 21 | .then(body => { 22 | const embed = new MessageEmbed() 23 | .setTitle(":smirk: Bondage") 24 | .setImage(body.url) 25 | .setColor(config.embedcolor) 26 | .setFooter(`Tags: Bondage`) 27 | .setURL(body.url); 28 | message.channel.send(embed); 29 | }); 30 | }, 31 | }; 32 | -------------------------------------------------------------------------------- /Commands/Nsfw/hentai.js: -------------------------------------------------------------------------------- 1 | const fetch = require('node-fetch'); 2 | const { MessageEmbed } = require('discord.js'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'hentai', 7 | aliases: ['hentai'], 8 | description: 'Shows Hentai Pictures', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message) => { 12 | 13 | if (!message.channel.nsfw) { 14 | message.react('💢'); 15 | return message.channel.send({ 16 | embed: { 17 | color: config.embedcolor, 18 | description: "You can use only this command in an NSFW Channel!" 19 | } 20 | }); 21 | }; 22 | 23 | await fetch("https://shiro.gg/api/images/nsfw/hentai") 24 | .then(res => res.json()) 25 | .then(body => { 26 | const embed = new MessageEmbed() 27 | .setTitle(":smirk: Hentai") 28 | .setImage(body.url) 29 | .setColor(config.embedcolor) 30 | .setFooter(`Tags: Hentai`) 31 | .setURL(body.url); 32 | message.channel.send(embed); 33 | }); 34 | }, 35 | }; -------------------------------------------------------------------------------- /Commands/Nsfw/thigh.js: -------------------------------------------------------------------------------- 1 | const fetch = require('node-fetch'); 2 | const { MessageEmbed } = require('discord.js'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'thigh', 7 | aliases: ['thigh'], 8 | description: 'Shows Thigh Pictures', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message) => { 12 | if (!message.channel.nsfw) { 13 | message.react('💢'); 14 | return message.channel.send({ 15 | embed: { 16 | color: config.embedcolor, 17 | description: "You can only use this command in an NSFW Channel!" 18 | } 19 | }) 20 | } 21 | 22 | await fetch("https://shiro.gg/api/images/nsfw/thighs") 23 | .then(res => res.json()) 24 | .then(body => { 25 | const embed = new MessageEmbed() 26 | .setTitle(":smirk: Thighs") 27 | .setImage(body.url) 28 | .setColor(config.embedcolor) 29 | .setFooter(`Tags: Thighs`) 30 | .setURL(body.url); 31 | message.channel.send(embed); 32 | }); 33 | } 34 | } -------------------------------------------------------------------------------- /Commands/Other/addemoji.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const Discord = require('discord.js') 3 | const { checkPermission } = require('../../Base/Permissions'); 4 | let isUrl = require("is-url"); 5 | module.exports = { 6 | help: { 7 | name: 'addemoji', 8 | aliases: ['addmemoji'], 9 | description: 'Adds an emoji to your server', 10 | category: __dirname.split("Commands\\")[1] 11 | }, 12 | run: async (client, message, args) => { 13 | 14 | /**** Checking Permissions ****/ 15 | let clientPermission = await checkPermission('client', message, [ 16 | 'MANAGE_EMOJIS', 17 | ]); 18 | if (clientPermission) return 19 | 20 | let memberPermission = await checkPermission('member', message, [ 21 | 'MANAGE_EMOJIS', 22 | ]) 23 | if (memberPermission) return; 24 | 25 | /*** Regular Code ***/ 26 | let type = ""; 27 | let name = ""; 28 | let emote = args.join(" ").match(/?/gi); 29 | 30 | if (emote) { 31 | emote = args[0]; 32 | type = "emoji"; 33 | name = args.join(" ").replace(/?/gi, "").trim().split(" ")[0]; 34 | } else { 35 | emote = `${args.find(arg => isUrl(arg))}` 36 | name = args.find(arg => arg != emote); 37 | type = "url"; 38 | } 39 | let emoji = { name: "" }; 40 | let Link; 41 | if (type == "emoji") { 42 | emoji = Discord.Util.parseEmoji(emote); 43 | Link = `https://cdn.discordapp.com/emojis/${emoji.id}.${emoji.animated ? "gif" : "png"}` 44 | } else { 45 | if (!name) return message.channel.send("Please Provide an Name for the Emoji!\n`k!addemoji [Link] [Emoji Name]` "); 46 | Link = message.attachments.first() ? message.attachments.first().url : emote 47 | } 48 | 49 | try { 50 | const Added = new MessageEmbed() 51 | .setColor(config.embedcolor) 52 | .setTitle(`${emotes.verified} Emoji Added`) 53 | .setDescription(`${emotes.verified} Emoji has been Added! | Name : ${name || `${emoji.name}`} | Preview : [Click Here](${Link})`); 54 | 55 | await message.guild.emojis.create(`${Link}`, `${`${name || emoji.name}`}`) 56 | message.channel.send(Added) 57 | } catch (err) { 58 | console.log(err) 59 | return message.channel.send(`${emotes.error} An error has occured!\n\n**Possible Reasons:**\n\`\`\`- This server has reached the emojis limit\n- The bot doesn't have permissions.\n- The emoji size is too big.\`\`\``) 60 | } 61 | } 62 | } -------------------------------------------------------------------------------- /Commands/Other/avatar.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | module.exports = { 4 | help: { 5 | name: 'avatar', 6 | aliases: ['av'], 7 | description: 'Shows the avatar of a certain user', 8 | category: __dirname.split("Commands\\")[1] 9 | }, 10 | run: async (client, message, args) => { 11 | 12 | const member = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args.join(' ').toLocaleLowerCase()) || message.guild.members.cache.find(r => r.displayName.toLowerCase() === args.join(' ').toLocaleLowerCase()) || message.member; 13 | const embed = new MessageEmbed() 14 | .setAuthor(member.user.tag, member.user.displayAvatarURL({ dynamic: true, size: 1024 })) 15 | .setColor(config.embedcolor) 16 | .setTitle(`**Avatar**`) 17 | .setDescription(`\`Links:\` **[png](${member.user.displayAvatarURL({ format: "png", size: 1024 })}) | [jpg](${member.user.displayAvatarURL({ format: "jpg", size: 1024 })}) | [gif](${member.user.displayAvatarURL({ format: "gif", size: 1024, dynamic: true })}) | [webp](${member.user.displayAvatarURL({ format: "webp", size: 1024 })})**`) 18 | .setImage(member.user.displayAvatarURL({ dynamic: true, size: 1024 })) 19 | .setFooter(`Requested by ${message.member.displayName}`, message.author.displayAvatarURL({ dynamic: true, size: 1024 })) 20 | .setTimestamp() 21 | return message.channel.send(embed) 22 | } 23 | } -------------------------------------------------------------------------------- /Commands/Other/emojilist.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | module.exports = { 4 | help: { 5 | name: 'emojilist', 6 | aliases: ['emojilist'], 7 | description: 'Shows the List of all the Emojis in the server', 8 | category: __dirname.split("Commands\\")[1] 9 | }, 10 | run: async (client, message) => { 11 | 12 | let Emojis = ""; 13 | let EmojisAnimated = ""; 14 | let EmojiCount = 0; 15 | let Animated = 0; 16 | let OverallEmojis = 0; 17 | 18 | function Emoji(id) { 19 | return client.emojis.cache.get(id).toString(); 20 | } 21 | message.guild.emojis.cache.forEach((emoji) => { 22 | OverallEmojis++; 23 | if (emoji.animated) { 24 | Animated++; 25 | EmojisAnimated += Emoji(emoji.id); 26 | } else { 27 | EmojiCount++; 28 | Emojis += Emoji(emoji.id); 29 | } 30 | }); 31 | let Embed = new MessageEmbed() 32 | .setTitle(`Emojis in ${message.guild.name} | Emojis [${OverallEmojis}] `) 33 | .setDescription( 34 | `**Animated [${Animated}]**:\n${EmojisAnimated}\n\n**Standard [${EmojiCount}]**:\n${Emojis}` 35 | ) 36 | .setColor(config.embedcolor); 37 | 38 | if (Embed.length > 2000) { 39 | return message.channel.send( 40 | `I'm sorry but, my limit is 2000 characters only!` 41 | ); 42 | } else { 43 | message.channel.send(Embed); 44 | } 45 | 46 | } 47 | } -------------------------------------------------------------------------------- /Commands/Other/profile.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const moment = require("moment"); 3 | require('moment-duration-format'); 4 | 5 | module.exports = { 6 | help: { 7 | name: 'profile', 8 | aliases: ['userinfo'], 9 | description: 'Shows the Info about the user', 10 | category: __dirname.split("Commands\\")[1] 11 | }, 12 | run: async (client, message, args) => { 13 | 14 | let user = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.member 15 | let durumm; 16 | let durum = user.presence.status 17 | 18 | let roles = user.roles.cache.map(x => x).filter(z => z.name !== "@everyone"); 19 | 20 | if (roles.length > 100) { 21 | roles = "There is so much roles to show." 22 | } 23 | 24 | let safe = message.author.createdTimestamp 25 | 26 | if (safe > 604800017) { 27 | safe = "`Reliable` <:discordinvisible:757485982227365939>" 28 | } else { 29 | safe = "`Suspicious` <:discorddnd:757485967266545704>" 30 | } 31 | 32 | 33 | if (durum === "online") durumm = `Online <:discordinvisible:757485982227365939> ` 34 | if (durum === "offline") durumm = `Offline <:discordoffline:757485996999966801> ` 35 | if (durum === "idle") durumm = `Idle <:discordidle:757483463501676614>` 36 | if (durum === "dnd") durumm = `Do not disturb <:discorddnd:757485967266545704> ` 37 | 38 | let lastMessage 39 | let lastMessageTime 40 | let nitroBadge = user.user.avatarURL({ dynamic: true }) 41 | let flags = user.user.flags.toArray().join(``) 42 | 43 | if (!flags) { 44 | flags = "User doesn't have any badge" 45 | } 46 | 47 | flags = flags.replace("HOUSE_BRAVERY", "• <:hsquadbravery:757488491792826410>\`HypeSquad Bravery\`") 48 | flags = flags.replace("EARLY_SUPPORTER", "• \`Early Supporter\`") 49 | flags = flags.replace("EARLY_VERIFIED_DEVELOPER", "• <:discordbotdev:757489652214267904> \`Verified Bot Developer\`") 50 | flags = flags.replace("HOUSE_BRILLIANCE", "• <:hsquadbrilliance:757487710775672863> \`HypeSquad Brilliance\`") 51 | flags = flags.replace("HOUSE_BALANCE", "• <:hsquadbalance:757487549605347348>\`HypeSquad Balance\`") 52 | flags = flags.replace("DISCORD_PARTNER", "• <:partner:739714991732686848> \`Partner\`") 53 | flags = flags.replace("HYPESQUAD_EVENTS", "• \`Hypesquad Event\`") 54 | flags = flags.replace("DISCORD_CLASSIC", "• \`Discord Classic\`") 55 | 56 | if (nitroBadge.includes("gif")) { 57 | flags = flags + ` 58 | • \`Nitro\`` 59 | } 60 | 61 | let stat = user.presence.activities[0] 62 | let custom 63 | 64 | if (user.presence.activities.some(r => r.name === "Spotify")) { 65 | custom = "Listening to Spotify" 66 | } else if (stat && stat.name !== "Custom Status") { 67 | custom = stat.name 68 | } else { 69 | custom = "Nothing" 70 | } 71 | 72 | if (user.presence.activities.some(r => r.name !== "Spotify") && stat && stat.state !== null) { 73 | stat = stat.state 74 | } else { 75 | stat = "Nothing" 76 | } 77 | 78 | if (user.lastMessage) { 79 | lastMessage = user.lastMessage.content 80 | lastMessageTime = moment(user.lastMessage.createdTimestamp).format('MMMM Do YYYY, H:mm:ss a') 81 | } else { 82 | lastMessage = "None" 83 | lastMessageTime = "None" 84 | } 85 | 86 | const embeddd = new MessageEmbed() 87 | .setColor(config.embedcolor) 88 | .setAuthor(message.author.tag, message.author.avatarURL({ dynamic: true })) 89 | .setDescription(`__**User Info**__ 90 | **•** \`ID:\` **${user.id}** 91 | **•** \`Profile:\` **${user}** 92 | **•** \`Bot:\` **${user.user.bot ? 'Yes' : 'No'}** 93 | **•** \`Created At:\` **${moment(user.user.createdAt).format('MMMM Do YYYY, H:mm:ss a')}** 94 | __**Member Info**__ 95 | **•** \`Nickname:\` **${user.displayName ? user.displayName : 'yok'} ** 96 | **•** \`Joined At:\` **${moment(user.joinedAt).format('MMMM Do YYYY, H:mm:ss a')}** 97 | **•** \`Activity:\` **${custom}** 98 | __**Roles:**__ 99 | ${roles} 100 | __**Messages Info**__ 101 | **•** \`Last Message:\` **${lastMessage}** 102 | **•** \`Last Message At:\` **${lastMessageTime}** 103 | __**Badge Information**__ 104 | ${flags} 105 | 106 | __**Safety Check**__ 107 | • ${safe}`) 108 | .setThumbnail(user.user.avatarURL({ dynamic: true })) 109 | .setTimestamp() 110 | .setFooter('© Karma', 'https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png') 111 | 112 | message.channel.send(embeddd) 113 | 114 | } 115 | } -------------------------------------------------------------------------------- /Commands/Other/snipe.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js') 2 | 3 | module.exports = { 4 | help: { 5 | name: 'snipe', 6 | aliases: ['snipe'], 7 | description: 'Shows the latest Deleted Message.', 8 | category: __dirname.split("Commands\\")[1] 9 | }, 10 | run: async(client, message) => { 11 | 12 | const msg = client.snipes.get(message.channel.id) 13 | const embedn = new Discord.MessageEmbed() 14 | .setAuthor(message.guild.name, message.guild.iconURL()) 15 | .setColor(config.embedcolor) 16 | .setFooter(client.user.username, client.user.avatarURL()) 17 | .setDescription(`<@${message.author.id}> **There is no deleted messages.**`) 18 | .setTimestamp(); 19 | if(!msg) return message.channel.send(embedn) 20 | 21 | const embed = new Discord.MessageEmbed() 22 | 23 | if(msg.content) 24 | 25 | embed.addField('Content Of the Message :', msg.content) 26 | .setAuthor(msg.author, msg.authorimg) 27 | .setColor(config.embedcolor) 28 | .setFooter(" Requested by " + message.author.tag , message.author.avatarURL()) 29 | .setTimestamp() 30 | 31 | if(msg.image) 32 | embed.setImage(msg.image) 33 | .setColor(config.embedcolor) 34 | .setDescription(`**Content of the message:**`) 35 | .setAuthor(msg.author, msg.authorimg) 36 | 37 | message.channel.send(embed) 38 | } 39 | } -------------------------------------------------------------------------------- /Commands/Other/urban.js: -------------------------------------------------------------------------------- 1 | const urban = require('relevant-urban'); 2 | const { MessageEmbed } = require('discord.js') 3 | module.exports = { 4 | help: { 5 | name: 'urban', 6 | aliases: ['urban'], 7 | description: 'Shows the Urban definition', 8 | category: __dirname.split("Commands\\")[1] 9 | }, 10 | run: async (client, message, args) => { 11 | 12 | if (!args[0]) return message.channel.send(`${emotes.error} Boi, Provide an Word`) 13 | 14 | let def; 15 | 16 | if (args.length) { 17 | 18 | const defs = await urban(args.join(' ')).catch(() => { }) 19 | 20 | if (!defs) return message.channel.send(new MessageEmbed().setColor('FF0000').setDescription(`\u200B\n\nNo match found for **${args.join(' ')}**`).setThumbnail('https://files.catbox.moe/kkkxw3.png')) 21 | 22 | if (defs.constructor.name === 'Array') { 23 | let total = Object.keys(defs).length 24 | 25 | if (!total) return message.channel.send(new MessageEmbed().setColor('FF0000').setDescription(`\u200B\n\nNo match found for **${args.join(' ')}**`).setThumbnail('https://files.catbox.moe/kkkxw3.png')) 26 | 27 | def = defs[1] 28 | 29 | } else if (defs.constructor.name === 'Definition') { 30 | 31 | def = defs 32 | 33 | } 34 | 35 | return message.channel.send(new MessageEmbed() 36 | .setAuthor(`Urban Dictionary`, `https://files.catbox.moe/kkkxw3.png`, `https://www.urbandictionary.com/`) 37 | .setThumbnail("https://cdn.discordapp.com/attachments/739360499086524476/745639669836021841/UD_2.PNG") 38 | .setTitle(`Definition of ${defs.word}`) 39 | .setURL(defs.urbanURL) 40 | .addField('Example(s)', defs.example ? defs.example : 'N/A') 41 | .setColor(config.embedcolor) 42 | .setFooter(`Submitted by ${defs.author}`) 43 | .setTimestamp() 44 | ) 45 | } else { 46 | return message.channel.send(new MessageEmbed() 47 | .setAuthor(`Urban Dictionary`, `https://files.catbox.moe/kkkxw3.png`, `https://www.urbandictionary.com/`) 48 | .setTitle("Something went wrong.") 49 | .setColor(config.embedcolor)) 50 | } 51 | 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Commands/Other/wiki.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const fetch = require('node-fetch'); 3 | 4 | module.exports = { 5 | help: { 6 | name: 'wiki', 7 | aliases: ['wiki'], 8 | description: 'Shows Information about query from Wikipedia', 9 | category: __dirname.split("Commands\\")[1] 10 | }, 11 | run: async (client, message, args) => { 12 | 13 | const body = await fetch(`https://en.wikipedia.org/api/rest_v1/page/summary/${encodeURIComponent(args.join(" "))}`, ).then(res => res.json().catch(() => { })); 14 | 15 | if (!body) return message.channel.sendmessage.channel.send({ 16 | embed: { 17 | color: config.embedcolor, 18 | title: "❌ Error Page Not Found." 19 | } 20 | }) 21 | if (body.title && body.title === "Not found.") return message.channel.send({ 22 | embed: { 23 | color: config.embedcolor, 24 | title: "❌ Error Page Not Found." 25 | } 26 | }); 27 | 28 | const embed = new MessageEmbed() 29 | .setTitle(`🌐 ${body.title} `) 30 | .addField("More Info: ", `**[Click Here!](${body.content_urls.desktop.page})**`, true) 31 | .setDescription(`** ${body.extract}**`) 32 | .setColor(config.embedcolor) 33 | .setTimestamp() 34 | .setFooter(`© Karma `, "https://cdn.discordapp.com/attachments/725019921159028808/739770316754256012/Screenshot_20200803-1459592.png") 35 | 36 | if (body.thumbnail) embed.setThumbnail(body.thumbnail.source); 37 | message.channel.send(embed); 38 | } 39 | } -------------------------------------------------------------------------------- /Commands/Owner/eval.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = { 3 | help: { 4 | name: 'eval', 5 | aliases: ['eval'], 6 | description: 'Evaluate any Javascript Code.', 7 | category: __dirname.split("Commands\\")[1] 8 | }, 9 | run: async (client, message) => { 10 | 11 | if (config.devs !== message.author.id) return message.channel.send('Only the Developer can use this command.'); 12 | 13 | const content = message.content.split(' ').slice(1).join(' '); 14 | const result = new Promise((resolve) => resolve(eval(content))); 15 | 16 | return result.then((output) => { 17 | if (typeof output !== 'string') { 18 | output = require('util').inspect(output, { depth: 0 }); 19 | } 20 | if (output.includes(client.token)) { 21 | output = output.replace(message.client.token, 'T0K3N'); 22 | } 23 | message.channel.send(output, { 24 | code: 'js' 25 | }); 26 | }).catch((err) => { 27 | err = err.toString(); 28 | if (err.includes(message.client.token)) { 29 | err = err.replace(message.client.token, 'T0K3N'); 30 | } 31 | message.channel.send(err, { 32 | code: 'js' 33 | }); 34 | }); 35 | 36 | } 37 | } -------------------------------------------------------------------------------- /Commands/Owner/reload.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | module.exports = { 4 | help: { 5 | name: 'reload', 6 | aliases: ['reload'], 7 | description: 'Reloads the Command.', 8 | category: __dirname.split("Commands\\")[1] 9 | }, 10 | run: async(client, message, args) => { 11 | 12 | if(config.devs !== message.author.id) return message.channel.send('Only the Developer can use this command.'); 13 | 14 | let cmdfolder = args[0]; 15 | if(!cmdfolder) return message.channel.send('❌ | Provide a command Folder!'); 16 | 17 | let command = args[1]; 18 | if(!command) return message.channel.send('❌ | Provide a command!'); 19 | 20 | try { 21 | require(`../${cmdfolder}/${command}`); 22 | } catch(e) { 23 | return message.channel.send('❌ | No command with that name found.'); 24 | } 25 | 26 | delete require.cache[require.resolve(`../${cmdfolder}/${command}`)]; 27 | let pull = require(`../${cmdfolder}/${command}`); 28 | client.commands.set(pull.help.name, pull); 29 | logger.success(`Reload the Command!`); 30 | return message.channel.send('✅ Done'); 31 | } 32 | } -------------------------------------------------------------------------------- /Configs/config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | token: '', 3 | prefix: '', 4 | devs: '', 5 | embedcolor: '', 6 | database: '', 7 | FACT_API: '', 8 | AME_API: '' 9 | } 10 | -------------------------------------------------------------------------------- /Configs/emotes.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | flyinghearts: "", 3 | load: "", 4 | verified: "", 5 | error: "", 6 | info: "", 7 | music1: "", 8 | queue: "", 9 | success: "", 10 | music: "", 11 | fun: "", 12 | chatbot: "", 13 | image: "", 14 | anime: "", 15 | nsfw: "", 16 | other: "", 17 | diskspin: "", 18 | owner: "", 19 | buttons: "" 20 | } 21 | -------------------------------------------------------------------------------- /Configs/filters.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | bassboost: "Bassboost", 3 | heavybass: "8D", 4 | vaporwave: "Vaporwave", 5 | nightcore: "Nightcore", 6 | phaser: "Phaser", 7 | tremolo: "Tremolo", 8 | vibrato: "Vibrato", 9 | reverse: "Reverse", 10 | treble: "Treble", 11 | normalizer: "Normalizer", 12 | surrounding: "Surrounding", 13 | pulsator: "Pulsator", 14 | subboost: "Subboost", 15 | karaoke: "Karaoke", 16 | flanger: "Flanger", 17 | gate: "Gate", 18 | haas: "Haas", 19 | mcompand: "Mcompand", 20 | mono: "Mono", 21 | mstlr: "MSTLR", 22 | mstrr: "MSTRR", 23 | compressor: "Compressor", 24 | expander: "Exapnder", 25 | softlimiter: "Softlimiter", 26 | chorus: "Chorus", 27 | chorus2d: "Chorus2D", 28 | chorus3d: "Chorus3D", 29 | fadein: "FadeIN" 30 | } -------------------------------------------------------------------------------- /Events/message.js: -------------------------------------------------------------------------------- 1 | const { Message } = require('discord.js'); 2 | const { Bot } = require('../Structures/Client'); 3 | const { db } = require('../Structures/Database') 4 | const fetch = require('node-fetch'); 5 | 6 | /** 7 | * @param { Bot } client 8 | * @param { Message } message 9 | * @param { db } database 10 | */ 11 | 12 | module.exports = async (client, message) => { 13 | 14 | if (!message.guild || message.author.bot) return; 15 | const { config } = client; 16 | 17 | if (message.content.startsWith(config.prefix)) { 18 | 19 | let args = message.content.slice(config.prefix.length).trim().split(/ +/g); 20 | let cmd = args.shift().toLowerCase(); 21 | 22 | var commandFile = client.commands.get(cmd) || client.commands.get(client.aliases.get(cmd)) 23 | if (commandFile) commandFile.run(client, message, args) 24 | } else { 25 | 26 | const channel = await db.get(`chatbot_${message.guild.id}`); 27 | if (!channel) return; 28 | const sChannel = message.guild.channels.cache.get(channel); 29 | if (!sChannel) return; 30 | if (message.author.bot || sChannel.id !== message.channel.id) return; 31 | message.content = message.content.replace(/@(everyone)/gi, "everyone").replace(/@(here)/gi, "here"); 32 | if (message.content.includes(`@`)) { 33 | return sChannel.send(`**:x: Please dont mention anyone**`); 34 | } 35 | sChannel.startTyping(); 36 | if (!message.content) return sChannel.send("Please say something."); 37 | fetch(`https://api.deltacoderr.repl.co/chatbot?message=${encodeURIComponent(message.content)}&name=${client.user.username}&user=${message.author.username}&gender=Male`) 38 | .then(res => res.json()) 39 | .then(data => { 40 | sChannel.send(`> ${message.content} \n ${data.message}`); 41 | }); 42 | sChannel.stopTyping(); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Events/messageDelete.js: -------------------------------------------------------------------------------- 1 | const { Message } = require('discord.js'); 2 | const { Bot } = require('../Structures/Client'); 3 | 4 | /** 5 | * @param { Bot } client 6 | * @param { Message } message 7 | */ 8 | 9 | module.exports = async (client, message) => { 10 | 11 | client.snipes.set(message.channel.id, { 12 | content: message.content, 13 | author: message.author.tag, 14 | authorimg: message.author.avatarURL({ dynamic: true }), 15 | image: message.attachments.first() ? message.attachments.first().proxyURL : null, 16 | channelname: message.channel.name, 17 | messageid: message.id, 18 | channelid: message.channel.id 19 | }) 20 | } -------------------------------------------------------------------------------- /Events/ready.js: -------------------------------------------------------------------------------- 1 | 2 | const { Bot } = require('../Structures/Client'); 3 | 4 | /** 5 | * @param { Bot } client 6 | **/ 7 | 8 | module.exports = (client) => { 9 | 10 | logger.success(`[API]: Logged in as ${client.user.username}`); 11 | } -------------------------------------------------------------------------------- /Installation.md: -------------------------------------------------------------------------------- 1 | # Karma Bot Installation 2 | 3 | ## Bot Setup 🔊 4 | * **Clone the Repo** by typing ``git clone https://github.com/DeltaCoderr/KarmaBot`` or Download the .rar file by clicking **[Here](https://github.com/DeltaCoderr/KarmaBot/archive/main.zip)** 5 | 6 | * Set up your **[config.js](https://github.com/DeltaCoderr/KarmaBot/blob/main/configs/config.js)** file with your respective information. 7 | ``` 8 | module.exports = { 9 | token: '', // Your Bot Token 10 | prefix: '', // Your Prefix 11 | devs: '', // Owner's Discord ID 12 | embedcolor: '', // EmbedColor 13 | MongoURI: '', // Database URL for storing Channel's Data. 14 | AME_API: '' // AME_API for Image Commands. Key can be found -> https://docs.api.amethyste.moe 15 | 16 | } 17 | ``` 18 | * Set up your **[emotes.js](https://github.com/DeltaCoderr/KarmaBot/blob/main/configs/emotes.js)** file with your Emoji IDS. 19 | ``` 20 | module.exports = { 21 | flyinghearts: "", 22 | load: "", 23 | verified: "", 24 | error: "", 25 | info: "", 26 | music1: "", 27 | queue: "", 28 | success: "", 29 | music: "", 30 | fun: "", 31 | chatbot: "", 32 | image: "", 33 | anime: "", 34 | nsfw: "", 35 | other: "", 36 | diskspin: "", 37 | owner: "", 38 | buttons: "" 39 | } 40 | ``` 41 | * **Install** all the packages by typing **``npm i ``** 42 | 43 | * **Start** the bot by typing **``node index.js``** 44 | 45 | ## If you still got issues, Join the Support server 46 | 47 | -------------------------------------------------------------------------------- /Loader.js: -------------------------------------------------------------------------------- 1 | 2 | const fs = require('fs'); 3 | const { Bot } = require('./Structures/Client'); 4 | 5 | /** 6 | * @param { Bot } client 7 | */ 8 | 9 | async function LoadCommands(client) { 10 | 11 | let folders = await fs.readdirSync(`${__dirname}/Commands`); 12 | 13 | folders.forEach((folder) => { 14 | fs.readdir(`${__dirname}/Commands/${folder}`, (err, files) => { 15 | 16 | if (err) return logger.error(`An Error Occured while Loading Commands. ${err.stack}`); 17 | 18 | if (!files) return logger.warn(`[WARN]: No Files found in "${folder.toUpperCase()}" Dir.`); 19 | 20 | files.forEach((file) => { 21 | 22 | let props = require(`./Commands/${folder}/${file}`); 23 | 24 | /* Name */ 25 | if (!props.help || !props.help.name) return logger.error(`[WARN]: ${file} doesn't have enough Properties.`); 26 | 27 | client.commands.set(props.help.name, props); 28 | 29 | /* Aliases */ 30 | if (!props.help.aliases) return logger.warn(`[WARN]: ${file} doesn't have enough Aliases.`); 31 | 32 | for (let i = 0; i < props.help.aliases.length; i++) { 33 | client.aliases.set(props.help.aliases[i], props.help.name); 34 | }; 35 | }); 36 | logger.success(`[LOADED]: Folder - ${folder}`); 37 | }); 38 | }); 39 | } 40 | 41 | async function LoadEvents(client) { 42 | 43 | fs.readdir(`${__dirname}/Events`, async (err, files) => { 44 | 45 | if (err) return logger.error(`An Error Occcured While Loading Events. ${err.stack}`); 46 | 47 | if (!files) return logger.warn(`[WARN]: Event Folder Doesn't have any files.`); 48 | 49 | for (let i = 0; i < files.length; i++) { 50 | const event = require(`./Events/${files[i]}`); 51 | let eventName = files[i].split(".")[0]; 52 | client.on(eventName, event.bind(null, client)); 53 | logger.log(`[LOADED]: Event - ${files[i]}`); 54 | } 55 | }); 56 | } 57 | 58 | async function LoadPlayerEvents(client) { 59 | 60 | const { Player } = require('discord-player'); 61 | 62 | const player = new Player(client, { 63 | enableLive: true, 64 | autoSelfDeaf: true, 65 | leaveOnEnd: true, 66 | leaveOnEndCooldown: 5000, 67 | leaveOnEmpty: true, 68 | leaveOnStop: true 69 | }) 70 | 71 | client.player = player 72 | 73 | fs.readdir('./player-events/', (err, files) => { 74 | if (err) return console.error(err); 75 | files.forEach(file => { 76 | const event = require(`./player-events/${file}`), eventName = file.split(".")[0]; 77 | logger.info(`Loading player event ${eventName}`); 78 | client.player.on(eventName, event.bind(null, client)); 79 | }); 80 | }); 81 | 82 | } 83 | 84 | async function LoadButtons(client) { 85 | const disbut = require('discord-buttons')(client) 86 | } 87 | 88 | module.exports = { LoadCommands, LoadEvents, LoadPlayerEvents, LoadButtons } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Note : The source code of the bot is outdated as I'm not working on the bot currently. This repository will remain archived. 2 | 3 | Karma 4 | 5 | # KarmaBot ✨ 6 | 7 | [![Run on Repl.it](https://repl.it/badge/github/DeltaCoderr/KarmaBot)](https://repl.it/github/DeltaCoderr/KarmaBot) 8 | [![](https://img.shields.io/badge/discord.js-v12.5.3-blue.svg?logo=npm)](https://github.com/discordjs) 9 | [![Stars](https://img.shields.io/github/stars/DeltaCoderr/KarmaBot.svg)](https://github.com/DeltaCoderr/KarmaBot) 10 | [![License](https://img.shields.io/github/license/DeltaCoderr/KarmaBot.svg)](https://github.com/DeltaCoderr/KarmaBot/blob/master/LICENSE) 11 | 12 | > A Multipurpose Discord Bot with a Music System used by 200K+ users and more than 2000 servers. 13 | 14 | Karma Bot is an open source Discord bot coded in JavaScript with [Discord.js](https://discord.js.org) by [DeltaCoderr](https://github.com/DeltaCoderr). 15 | 16 | ## Categories 📑 17 | - [x] Music & Filter 18 | - [x] Fun 19 | - [x] Anime 20 | - [x] Buttons 21 | - [x] NSFW 22 | - [x] Utility 23 | - [X] Image 24 | - [X] ChatBot 25 | 26 | ### Commands List 💫 27 | 28 | Karma has a lot of features, with **8 main categories**: 29 | 30 | * 🎵 **Music**: `play`, `skip`, `queue`, `np`,`filters` and **10** more! 31 | * 👩‍💼 **Information**: `info`, `help`, `invite` and **2** more! 32 | * 🚓 **Anime**: `anime`, `hug`, `karma`, `neko` and **11** more! 33 | * 🔲 **Buttons** : `snake`, and **1** more! 34 | * 🤖 **ChatBot**: `chatbot` and **2** more! 35 | * 👻 **Fun**: `binary`, `clyde`, `comment`, `eject`, `iq`, `reddit` and **8** more! 36 | * 🖨️ **Image**: `fire`, `respect`, `scary`, `triggered` and **5** more! 37 | * ✉️ **Other**: `profile`, `addemoji`, `snipe`, `wiki` and **3** more! 38 | * 👑 **Owner**: `eval`, `reload` 39 | 40 | ## Status 📥 41 | 42 | [![Status](https://top.gg/api/widget/status/636484020301201418.svg)](https://top.gg/bot/636484020301201418) 43 | [![Servers](https://top.gg/api/widget/servers/636484020301201418.svg)](https://top.gg/bot/636484020301201418) 44 | [![Upvotes](https://top.gg/api/widget/upvotes/636484020301201418.svg)](https://top.gg/bot/636484020301201418) 45 | [![Owner](https://top.gg/api/widget/owner/636484020301201418.svg)](https://top.gg/bot/636484020301201418) 46 | 47 | ## Invite the Bot 💕 48 | 49 | 50 | Karma Bot 51 | 52 | 53 | 54 | ### Support Server :label: 55 | 56 |

57 | 58 | * **[Bot Website](https://karma.deltaa.me)** 59 | 60 | ## Installation 61 | The Installation guide can be found in the [Installation.md](https://github.com/DeltaCoderr/KarmaBot/blob/master/Installation.md) file. 62 | 63 | ## License ©️ 64 | Karma Bot 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. 65 | 66 | ## ✨ Contributors : 67 | [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](https://github.com/DeltaCoderr/Covid-19-Tracker)  68 | 69 | Thanks goes to these wonderful people : 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 |

DeltaCoderr

👑

Madnesssik

🎵

Zayynee

💻

PartMan

💻
85 | 86 | 87 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /Structures/Client.js: -------------------------------------------------------------------------------- 1 | const { Client, Collection } = require('discord.js') 2 | const { LoadCommands, LoadEvents, LoadPlayerEvents, LoadButtons } = require('../Loader'); 3 | 4 | require('../Utils/Logger'); 5 | require('../Utils/Global'); 6 | require('../Structures/Database'); 7 | 8 | class Bot extends Client { 9 | 10 | /** 11 | * @param { import ('discord.js').ClientOptions } props; 12 | */ 13 | 14 | constructor(props) { 15 | if (!props) props = {} 16 | 17 | props.partials = ['MESSAGE', 'CHANNEL', 'REACTION']; 18 | super(props) 19 | }; 20 | 21 | 22 | _init() { 23 | this.config = require('../Configs/config'); 24 | 25 | if (!this.config.token) 26 | return logger.error(`[ERROR]: No Token Provided in Config File!`); 27 | 28 | if (!this.config.devs.length) { 29 | return logger.error(`[ERROR]: No Dev ID Provided`); 30 | } 31 | 32 | if (!this.config.database) { 33 | return logger.error(`[ERROR]: No Database URL Provided.!`); 34 | } 35 | 36 | this.commands = new Collection(); 37 | 38 | this.aliases = new Collection(); 39 | 40 | LoadCommands(this); 41 | 42 | LoadEvents(this); 43 | 44 | LoadPlayerEvents(this); 45 | 46 | LoadButtons(this); 47 | 48 | this.login(this.config.token).catch(() => { 49 | logger.error(`[ERROR]: Invalid Token Provided.`); 50 | }); 51 | }; 52 | } 53 | 54 | module.exports.Bot = Bot; -------------------------------------------------------------------------------- /Structures/Database.js: -------------------------------------------------------------------------------- 1 | const { Database } = require('quickmongo'); 2 | const db = new Database(config.database); 3 | 4 | db.on('ready', () => { 5 | logger.success("Database Connected!"); 6 | }); 7 | 8 | module.exports = { db }; -------------------------------------------------------------------------------- /Utils/Global.js: -------------------------------------------------------------------------------- 1 | global.toID = function (text) { 2 | if (typeof text === 'string') return text.toLowerCase().replace(/[^a-z0-9]/g, ''); 3 | } 4 | 5 | 6 | global.config = require('../Configs/config'); 7 | global.emotes = require('../Configs/emotes') 8 | global.filters = require('../Configs/filters') -------------------------------------------------------------------------------- /Utils/Logger.js: -------------------------------------------------------------------------------- 1 | const moment = require("moment"); 2 | const chalk = require('chalk'); 3 | const util = require('util'); 4 | 5 | global.logger = module.exports = class Logger { 6 | static log(content, { color = 'grey', tag = 'Log' } = {}) { 7 | this.write(content, { color, tag }); 8 | } 9 | 10 | static success(content, { color = 'green', tag = 'Success' } = {}) { 11 | this.write(content, { color, tag }); 12 | } 13 | 14 | static info(content, { color = 'blue', tag = 'Info' } ={}) { 15 | this.write(content, { color, tag }); 16 | } 17 | 18 | static warn(content, { color = 'orange', tag = 'Warn' } = {}) { 19 | this.write(content, { color, tag }); 20 | } 21 | 22 | static error(content, { color = 'red', tag = 'Error' } = {}) { 23 | this.write(content, { color, tag, error: true }); 24 | } 25 | 26 | static debug(content, { color = 'yellow', tag = 'Debug' } = {}) { 27 | this.write(content, { color, tag, error: true }); 28 | } 29 | 30 | static write(content, { color = 'grey', tag = 'Log', error = false } = {}) { 31 | const timestamp = chalk.cyan(`[${moment().format('DD-MM-YYYY kk:mm:ss')}]:`); 32 | const levelTag = chalk.bold(`[${tag}]`); 33 | const text = chalk[color](this.clean(content)); 34 | const stream = error ? process.stderr : process.stdout; 35 | stream.write(`${timestamp} ${levelTag} ${text}\n`); 36 | } 37 | 38 | static clean(item) { 39 | if (typeof item === 'string') return item; 40 | const cleaned = util.inspect(item, { depth: Infinity }); 41 | return cleaned; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | 2 | const { Bot } = require('./Structures/Client'); 3 | const client = new Bot(); 4 | 5 | client.snipes = new Map() 6 | 7 | client._init(); -------------------------------------------------------------------------------- /node.sh: -------------------------------------------------------------------------------- 1 | export NVM_DIR=/home/runner/nvm 2 | export NODE_VERSION=14 3 | 4 | if ! ls $NVM_DIR > /dev/null 2>&1 5 | then mkdir -p $NVM_DIR 6 | curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash 7 | fi 8 | 9 | [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" 10 | nvm use $NODE_VERSION 11 | 12 | # You may want to run this if you change node version 13 | rm -rf node_modules/ 14 | npm i 15 | 16 | # install a custom npm version 17 | if [ $(npm -v) != "6.14.9" ] 18 | then npm i -g npm@6.14.9 19 | fi 20 | 21 | #just to check if any package is missing 22 | npm outdated | grep "MISSING" 23 | if [ $? -eq 0 ] 24 | then npm i 25 | fi 26 | 27 | node . -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "karmabot", 3 | "version": "3.1.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "DeltaCoderr", 10 | "license": "ISC", 11 | "dependencies": { 12 | "@discordjs/opus": "^0.5.3", 13 | "@weky/inlinereply": "^0.0.0", 14 | "amethyste-api": "^1.1.5", 15 | "axios": "^0.21.1", 16 | "canvacord": "^5.2.1", 17 | "chalk": "^4.1.1", 18 | "common-tags": "^1.8.0", 19 | "discord-buttons": "^4.0.0", 20 | "discord-player": "^4.1.0", 21 | "discord.js": "^12.5.3", 22 | "ffmpeg-static": "^4.3.0", 23 | "fs": "0.0.1-security", 24 | "genius-lyrics": "^4.2.9", 25 | "is-url": "^1.2.4", 26 | "mal-scraper": "^2.11.3", 27 | "moment": "^2.29.1", 28 | "nekos.life": "^2.0.7", 29 | "node-fetch": "^2.6.1", 30 | "node-osu": "^2.2.1", 31 | "opusscript": "0.0.8", 32 | "quickmongo": "^5.2.0", 33 | "reddit.images": "^1.0.2", 34 | "relevant-urban": "^2.0.0", 35 | "to-zalgo": "^1.0.1", 36 | "twemoji-parser": "^13.1.0", 37 | "util": "^0.12.4", 38 | "weather-js": "^2.0.0", 39 | "weky": "^3.1.8", 40 | "ytdl-core": "^4.8.3" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /player-events/botDisconnect.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | 3 | module.exports = (client, message) => { 4 | const embed = new Discord.MessageEmbed() 5 | .setTitle('Karma Disconnected!') 6 | .setDescription(`${emotes.error} - Music stopped as i have been disconnected from the channel !`) 7 | .setFooter('Karma Music System') 8 | .setColor(config.embedcolor) 9 | .setTimestamp(); 10 | message.channel.send(embed); 11 | 12 | }; -------------------------------------------------------------------------------- /player-events/channelEmpty.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | 3 | module.exports = (client, message) => { 4 | const embed = new Discord.MessageEmbed() 5 | .setTitle('Channel Empty!') 6 | .setDescription(`${emotes.error} - Music stopped as there is no more member in the voice channel !`) 7 | .setFooter('Karma Music System') 8 | .setColor(config.embedcolor) 9 | .setTimestamp(); 10 | message.channel.send(embed); 11 | 12 | }; -------------------------------------------------------------------------------- /player-events/error.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | 3 | 4 | module.exports = (client, error, message) => { 5 | const embedNotPlaying = new Discord.MessageEmbed() 6 | .setTitle('Error!') 7 | .setDescription(`${emotes.error} - There is no music being played on this server !`) 8 | .setFooter('Karma Music System') 9 | .setColor(config.embedcolor) 10 | .setTimestamp(); 11 | const embedNotConnected = new Discord.MessageEmbed() 12 | .setTitle('Error!') 13 | .setDescription(`${emotes.error} - You are not connected in any voice channel !`) 14 | .setFooter('Karma Music System') 15 | .setColor(config.embedcolor) 16 | .setTimestamp(); 17 | const embedUnableToJoin = new Discord.MessageEmbed() 18 | .setTitle('Error!') 19 | .setDescription(`${emotes.error} - I am not able to join your voice channel, please check my permissions !`) 20 | .setFooter('Karma Music System') 21 | .setColor(config.embedcolor) 22 | .setTimestamp(); 23 | const embedDefault = new Discord.MessageEmbed() 24 | .setTitle('Error!') 25 | .setDescription(`${emotes.error} - Something went wrong ... Error : ${error}`) 26 | .setFooter('Karma Music System') 27 | .setColor(config.embedcolor) 28 | .setTimestamp(); 29 | 30 | switch (error) { 31 | case 'NotPlaying': 32 | message.channel.send(embedNotPlaying); 33 | break; 34 | case 'NotConnected': 35 | message.channel.send(embedNotConnected); 36 | break; 37 | case 'UnableToJoin': 38 | message.channel.send(embedUnableToJoin); 39 | break; 40 | default: 41 | // message.channel.send(embedDefault); 42 | }; 43 | }; -------------------------------------------------------------------------------- /player-events/noResults.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | 3 | 4 | module.exports = (client, message, query) => { 5 | const embed = new Discord.MessageEmbed() 6 | .setTitle('No Results!') 7 | .setDescription(`${emotes.error} - No results found on YouTube for ${query} !`) 8 | .setFooter('Karma Music System') 9 | .setColor(config.embedcolor) 10 | .setTimestamp(); 11 | message.channel.send(embed); 12 | 13 | }; -------------------------------------------------------------------------------- /player-events/playlistAdd.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | 3 | 4 | module.exports = (client, message, playlist) => { 5 | const embed = new Discord.MessageEmbed() 6 | .setTitle('Playlist Add!') 7 | .setDescription(`${emotes.music} - ${playlist.title} has been added to the queue (**${playlist.items.length}** songs) !`) 8 | .setFooter('Karma Music System') 9 | .setColor(config.embedcolor) 10 | .setTimestamp(); 11 | message.channel.send(embed); 12 | 13 | }; -------------------------------------------------------------------------------- /player-events/queueEnd.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | 3 | 4 | module.exports = (client, message) => { 5 | const embed = new Discord.MessageEmbed() 6 | .setTitle('Queue End!') 7 | .setDescription(`${emotes.error} - Music stopped as there is no more music in the queue !`) 8 | .setFooter('Karma Music System') 9 | .setColor(config.embedcolor) 10 | .setTimestamp(); 11 | message.channel.send(embed); 12 | 13 | }; -------------------------------------------------------------------------------- /player-events/searchCancel.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | 3 | 4 | module.exports = (client, message) => { 5 | const embed = new Discord.MessageEmbed() 6 | .setTitle('Search Cancelled!') 7 | .setDescription(`${emotes.error} - You did not provide a valid response ... Please send the command again !`) 8 | .setFooter('Karma Music System') 9 | .setColor(config.embedcolor) 10 | .setTimestamp(); 11 | message.channel.send(embed); 12 | 13 | }; -------------------------------------------------------------------------------- /player-events/searchInvalidResponse.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | 3 | 4 | module.exports = (client, message, tracks) => { 5 | const embed = new Discord.MessageEmbed() 6 | .setTitle('Search Invalid Response!') 7 | .setDescription(`${emotes.error} - You must send a valid number between **1** and **${tracks.length}** !`) 8 | .setFooter('Karma Music System') 9 | .setColor(config.embedcolor) 10 | .setTimestamp(); 11 | message.channel.send(embed); 12 | 13 | }; -------------------------------------------------------------------------------- /player-events/searchResults.js: -------------------------------------------------------------------------------- 1 | module.exports = (client, message, query, tracks) => { 2 | message.channel.send({ 3 | embed: { 4 | author: { name: `Here are your search results for ${query}` }, 5 | footer: { text: 'Karma Music System' }, 6 | color: config.embedcolor, 7 | timestamp: new Date(), 8 | description: `${tracks.map((t, i) => `**${i + 1}** - ${t.title}`).join('\n')}`, 9 | }, 10 | }); 11 | }; -------------------------------------------------------------------------------- /player-events/trackAdd.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | 3 | 4 | module.exports = (client, message, track) => { 5 | const embed = new Discord.MessageEmbed() 6 | .setTitle('Track Added!') 7 | .setDescription(`${emotes.music} - ${track.title} has been added to the queue !`) 8 | .setFooter('Karma Music System') 9 | .setColor(config.embedcolor) 10 | .setTimestamp(); 11 | message.channel.send(embed); 12 | 13 | }; -------------------------------------------------------------------------------- /player-events/trackStart.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | 3 | 4 | module.exports = (client, message, track) => { 5 | const embed = new Discord.MessageEmbed() 6 | .setTitle('Track Started!') 7 | .setDescription(`${emotes.music} - Now playing ${track.title} into ${message.member.voice.channel.name} ...`) 8 | .setURL(track.url) 9 | .setThumbnail(track.thumbnail) 10 | .setFooter('Karma Music System') 11 | .setColor(config.embedcolor) 12 | .setTimestamp(); 13 | message.channel.send(embed); 14 | 15 | }; --------------------------------------------------------------------------------