diff --git a/commands/info-search/Anime.js b/commands/info-search/Anime.js new file mode 100644 index 0000000..bce6c50 --- /dev/null +++ b/commands/info-search/Anime.js @@ -0,0 +1,52 @@ +const Discord = require("discord.js"); + +const malScraper = require('mal-scraper'); + + +module.exports = { + name: "anime", + category: "suchen", + description: "Informieren Sie sich über einen Anime", + usage: "[command | Anime]", + run: async (client, message, args) => { + //command + const search = `${args}`; + if (!search) + return message.reply('Bitte geben Sie eine Suchanfrage ein!'); + + malScraper.getInfoFromName(search) + .then((data) => { + const malEmbed = new Discord.MessageEmbed() + .setAuthor(`Meine Anime-Liste Suchergebnis für ${args}`.split(',').join(' ')) + .setThumbnail(data.picture) + .setColor('RANDOM') //What ever u want color! + .addField('Premiered', `\`${data.premiered}\``, true) + .addField('Broadcast', `\`${data.broadcast}\``, true) + .addField('Genres', `\`${data.genres}\``, true) + .addField('English Title', `\`${data.englishTitle}\``, true) + .addField('Japanese Title', `\`${data.japaneseTitle}\``, true) + .addField('Type', `\`${data.type}\``, true) + .addField('Episodes', `\`${data.episodes}\``, true) + .addField('Rating', `\`${data.rating}\``, true) + .addField('Aired', `\`${data.aired}\``, true) + .addField('Score', `\`${data.score}\``, true) + .addField('Favorite', `\`${data.favorites}\``, true) + .addField('Ranked', `\`${data.ranked}\``, true) + .addField('Duration', `\`${data.duration}\``, true) + .addField('Studios', `\`${data.studios}\``, true) + .addField('Popularity', `\`${data.popularity}\``, true) + .addField('Members', `\`${data.members}\``, true) + .addField('Score Stats', `\`${data.scoreStats}\``, true) + .addField('Source', `\`${data.source}\``, true) + .addField('Synonyms', `\`${data.synonyms}\``, true) + .addField('Status', `\`${data.status}\``, true) + .addField('Identifier', `\`${data.id}\``, true) + .addField('Link', data.url, true) + .setTimestamp() + .setFooter(`Requested ${message.member.displayName}`, message.author.displayAvatarURL({ dynamic: true })) + + message.channel.send(malEmbed); + + }) + } +}; \ No newline at end of file diff --git a/commands/info-search/Invite.js b/commands/info-search/Invite.js new file mode 100644 index 0000000..da5ff48 --- /dev/null +++ b/commands/info-search/Invite.js @@ -0,0 +1,41 @@ +const Discord = require('discord.js'); + + + + +module.exports = { + + name:"invites", + aliases: ["invs"], + category: "info", + accessableby: "" + , + run: async (bot, message, args) => { + try { + let member = 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; + + let invites = await message.guild.fetchInvites() + + let memberInvites = invites.filter(i => i.inviter && i.inviter.id === member.user.id); + + if (memberInvites.size <= 0) { + return message.channel.send(`**${member.displayName} hat niemanden auf den Server eingeladen!**`, (member === message.member ? null : member)); + {} } + + let content = memberInvites.map(i => i.code).join("\n"); + let index = 0; + memberInvites.forEach(invite => index += invite.uses); + + let embed = new Discord.MessageEmbed() + .setColor("GREEN") + .setFooter(message.guild.name, message.guild.iconURL()) + .setAuthor(`Invite Tracker für ${message.guild.name}`) + .setDescription(`Informationen zu Einladungen von ${member.displayName}`) + .addField("**Keine. Eingeladene Personen**", index) + .addField("Invitation Codes\n\n", content); + message.channel.send(embed); + } catch (e) { + return message.channel.send(e.message) + } + } +}; \ No newline at end of file diff --git a/commands/info-search/avatar.js b/commands/info-search/avatar.js new file mode 100644 index 0000000..206321d --- /dev/null +++ b/commands/info-search/avatar.js @@ -0,0 +1,39 @@ +const Discord = require("discord.js"); +const { MessageEmbed } = require("discord.js"); +const { Color } = require("../../config.json"); + +module.exports = { + name: "avatar", + aliases: ["icon", "pfp"], + category: "fun", + description: "Mitglieder-Avatar anzeigen!", + usage: "Avatar | ", + accessableby: "everyone", + run: async (client, message, args) => { + //Start + + let Member = message.mentions.users.first() || message.guild.member(args[0]) || message.author; + + let embed = new Discord.MessageEmbed() + .setColor(Color) + .addField( + "Links", + `[Png](${Member.displayAvatarURL({ + format: "png", + dynamic: true + })}) | [Jpg](${Member.displayAvatarURL({ + format: "jpg", + dynamic: true + })}) | [Webp](${Member.displayAvatarURL({ + format: "webp", + dynamic: true + })})` + ) + .setImage(Member.displayAvatarURL({ dynamic: true })) + .setTimestamp(); + + message.channel.send(embed); + + //End + } +}; \ No newline at end of file diff --git a/commands/info-search/badge.js b/commands/info-search/badge.js new file mode 100644 index 0000000..7ffe60a --- /dev/null +++ b/commands/info-search/badge.js @@ -0,0 +1,21 @@ +const { Client, Message, MessageEmbed } = require('discord.js'); + +module.exports = { + + name: 'badges', + category: 'info', + /** + * @param {Client} client + * @param {Message} message + * @param {String[]} args + */ + run: async(client, message, args) => { + const user = message.mentions.users.first() || message.author; + + const flags = user.flags.toArray(); + + console.log(flags); + + message.channel.send(`${user}'s badges: ${flags.join(', ')}`) + } +} \ No newline at end of file diff --git a/commands/info-search/botinfo.js b/commands/info-search/botinfo.js new file mode 100644 index 0000000..b9c78c4 --- /dev/null +++ b/commands/info-search/botinfo.js @@ -0,0 +1,33 @@ +const db = require("quick.db"); +const Discord = require ("discord.js") +const { version } = require('../../package.json'); +const ms = require('pretty-ms'); +const { version: discordjsVersion } = require('discord.js'); +module.exports = { + + name: "botinfo", + + category: "info", + aliases: ['uptime', 'botstats', 'stats'], + description: 'Check\'s bot\'s status', + run: async (client, message, args, del, member) => { + message.delete(); + message.channel.send(new Discord.MessageEmbed() + .setColor('RANDOM') + .setTitle(`${message.author.tag}`) + .setThumbnail(client.user.displayAvatarURL({ dynamic: true })) + .addField('**• Version**', `1.0.0`, true) + .addField(`**• Users**`, `${client.users.cache.size} users`, true) + .addField('**• Servers**', `${client.guilds.cache.size} guilds`, true) + .addField('**• Discord.js**', `13.2.0`, true) + .addField('**• Ping**', `${client.ws.ping}ms`, true) + .addField('**• Commands**', `${client.commands.size} cmds`,true) + .addField('Wichtige Links ','**• [Support](https://difficult-knights.de/index.php?site=ticketcenter)** • **[Website](https://difficult-knights.de)** ** • [Invite Me](https://discord.com/api/oauth2/authorize?client_id=974563800319676446&permissions=8&scope=bot)**') + + .setTimestamp() + .setFooter( + `Difficult-Knights BOT`, + client.user.displayAvatarURL() + )) + } +}; diff --git a/commands/info-search/dashboard.js b/commands/info-search/dashboard.js new file mode 100644 index 0000000..1f2e48c --- /dev/null +++ b/commands/info-search/dashboard.js @@ -0,0 +1,29 @@ +const db = require("quick.db"); +const Discord = require ("discord.js") +const { version } = require('../../package.json'); +const ms = require('pretty-ms'); +const { version: discordjsVersion } = require('discord.js'); +module.exports = { + + name: "dashboard", + + category: "info", + aliases: ['dash', 'dashboard', 'dashboards'], + description: 'Check\'s bot\'s dashboard', + run: async (client, message, args, del, member) => { + + const members = message.guild.members.cache; + + message.channel.send(new Discord.MessageEmbed() + .setColor('RANDOM') + .setTitle(`${message.author.tag}`) + .setThumbnail(client.user.displayAvatarURL({ dynamic: true })) + .addField('**• Websites**', `**[Dash](https://Difficult-Knights.de/)**`, true) + + .setTimestamp() + .setFooter( + `Difficult-Knights BOT`, + client.user.displayAvatarURL() + )) + } +}; diff --git a/commands/info-search/developer.js b/commands/info-search/developer.js new file mode 100644 index 0000000..9041580 --- /dev/null +++ b/commands/info-search/developer.js @@ -0,0 +1,32 @@ +const db = require("quick.db"); +const Discord = require ("discord.js") +const { version } = require('../../package.json'); +const ms = require('pretty-ms'); +const { version: discordjsVersion } = require('discord.js'); +module.exports = { + + name: "developer", + + category: "info", + aliases: ['developers', 'developer'], + description: 'Check\'s bot\'s status', + run: async (client, message, args, del, member) => { + message.delete(); + message.channel.send(new Discord.MessageEmbed() + .setColor('RANDOM') + .setTitle(`${message.author.tag}`) + .setThumbnail(client.user.displayAvatarURL({ dynamic: true })) + .addField( + "**• Developers**", + "#0001 , ↷ ! Miu ༉‧#0002" + ) + + .addField('Wichtige Links ','**• [Support](https://difficult-knights.de/index.php?site=ticketcenter)** • **[Website](https://Difficult-Knights.de/)** ** • [Invite Me](https://discord.com/api/oauth2/authorize?client_id=974563800319676446&permissions=8&scope=bot)**') + + .setTimestamp() + .setFooter( + `Difficult-Knights BOT`, + client.user.displayAvatarURL() + )) + } +}; diff --git a/commands/info-search/djs.js b/commands/info-search/djs.js new file mode 100644 index 0000000..b4e3c0d --- /dev/null +++ b/commands/info-search/djs.js @@ -0,0 +1,45 @@ +const fetch = require("node-fetch"); + +module.exports = { + + name: "discord", + category: "search", + aliases: ["discorddocs", "djs", "docs"], + + run: async(client, message, args) => { + const search = args[0]; + if (!search) return message.channel.send({ + embed: { + "color": 0x4D5E94, + "description": "❌ **Was suchst du?**" + + } + }); + let version = args[1]; + if (!version) version = `stable`; + + fetch(`https://djsdocs.sorta.moe/v2/embed?src=${encodeURIComponent(version)}&q=${encodeURIComponent(search)}`) + .then(res => res.json()) + .then(body => { + if (body === null) return message.channel.send({ + embed: { + "color": 0x4D5E94, + "author": { + "name": "Discord.js Docs (master)", + "url": "https://discord.js.org/#/docs/main/master", + "icon_url": "https://discord.js.org/favicon.ico" + }, + "title": "Search results:", + "description": "❌ **Keine Ergebnisse, bitte versuchen Sie es erneut.**" + } + }); + body.color = 0x4D5E94; + message.channel.send({ embed: body }); + }) + .catch(e => { + message.channel.send({ + embed: { "color": 0x4D5E94, "author": { "name": "Discord.js Docs (master)", "url": "https://discord.js.org/#/docs/main/master", "icon_url": "https://discord.js.org/favicon.ico" }, "title": "Search results:", "description": "No results." } + }); + }); + } +} diff --git a/commands/info-search/embed.is b/commands/info-search/embed.is new file mode 100644 index 0000000..89bc494 --- /dev/null +++ b/commands/info-search/embed.is @@ -0,0 +1,147 @@ +const Discord = require("discord.js") + +module.exports = { + + name: 'embedgen', + + aliases: ["emb"], + + description: 'embed Generator', + + category: "info", + + run: async (client, message, args) => { + + try { + + const filter = msg => msg.author.id == message.author.id; + + const options = { + + max: 1 + + }; + + //=============================================================================================== + + // Getting Started + + const embed = new Discord.MessageEmbed(); + + message.channel.send("Reply `skip` or `no` for next question, Reply `cancel` to stop the command."); + + + + //=============================================================================================== + + // Getting Title + + message.channel.send("So, Do you want your embed to have any title?"); + + let title = await message.channel.awaitMessages(filter, options); + + if (title.first().content == 'cancel') return message.channel.send('Embed Generator Cancelled.') + + if (title.first().content !== 'skip' && title.first().content !== 'cancel') embed.setTitle(title.first().content); + + + + //=============================================================================================== + + // Getting Description + + message.channel.send("great, now o you want your embed to have any Description?"); + + let Description = await message.channel.awaitMessages(filter, options); + + if (Description.first().content == 'cancel') return message.channel.send('Embed Generator Cancelled.') + + if (Description.first().content !== 'skip' && Description.first().content !== 'cancel') embed.setDescription(Description.first().content); + + + + //=============================================================================================== + + // Getting Footer + + message.channel.send("So, Do you want your embed to have any Footer?"); + + let Footer = await message.channel.awaitMessages(filter, options); + + if (Footer.first().content == 'cancel') return message.channel.send('Embed Generator Cancelled. ') + + if (Footer.first().content !== 'skip' && Footer.first().content !== 'cancel') embed.setFooter(Footer.first().content); + + + + //=============================================================================================== + + // Getting URL + + if (title.first().content !== 'skip' && title.first().content !== 'cancel') { + + message.channel.send("So, Do you want your embed to have any masked link on title?, say `no` if you do not have set title"); + + let URL = await message.channel.awaitMessages(filter, options); + + if (URL.first().content == 'cancel') return message.channel.send('Embed Generator Cancelled.') + + if (URL.first().content !== 'skip' && URL.first().content !== 'cancel') embed.setURL(URL.first().content); + + } + + + + //=============================================================================================== + + // Getting Color + + message.channel.send("So, Do you want your embed to have any specifci color? Default is Black"); + + let Color = await message.channel.awaitMessages(filter, options); + + if (Color.first().content == 'cancel') return message.channel.send('Embed Generator Cancelled.') + + if (Color.first().content !== 'skip' && Color.first().content !== 'cancel') embed.setColor(Color.first().content.toUpperCase() || "2f3136") + + + + //=============================================================================================== + + // Getting Author Field + + message.channel.send("So, Do you want your embed to have any Author Field?"); + + let Author = await message.channel.awaitMessages(filter, options); + + if (Author.first().content == 'cancel') return message.channel.send('Embed Generator Cancelled.') + + if (Author.first().content !== 'skip' && Author.first().content !== 'cancel') embed.setAuthor(Author.first().content); + + + + //=============================================================================================== + + // Getting TimeStamp + + message.channel.send("So, Do you want your embed to have any TimeStamp? Reply `yes` or `no`"); + + let TimeStamp = await message.channel.awaitMessages(filter, options); + + if (TimeStamp.first().content == 'cancel') return message.channel.send('Embed Generator Cancelled.') + + if (TimeStamp.first().content !== 'yes') embed.setTimestamp(); + + + + message.channel.send(embed) + + } catch (error) { + + console.error(error); + + } + + } + +} diff --git a/commands/info-search/embed.js b/commands/info-search/embed.js new file mode 100644 index 0000000..9209bdd --- /dev/null +++ b/commands/info-search/embed.js @@ -0,0 +1,72 @@ +const Discord = require("discord.js") +module.exports = { + name: 'embedgen', + aliases: ["emb"], + description: 'Einbettungsgenerator', + category: "info", + run: async (client, message, args) => { + + try { + + const filter = msg => msg.author.id == message.author.id; + const options = { + max: 1 + }; + //=============================================================================================== + // Getting Started + const embed = new Discord.MessageEmbed(); + message.channel.send("Antworten Sie mit `skip` oder `no` für die nächste Frage. Antworten Sie mit `cancel`, um den Befehl zu stoppen."); + + + //=============================================================================================== + // Getting Title + message.channel.send("Also, möchten Sie, dass Ihre Einbettung einen Titel hat?"); + let title = await message.channel.awaitMessages(filter, options); + if (title.first().content == 'cancel') return message.channel.send('Einbettungsgenerator abgebrochen.') + if (title.first().content !== 'skip' && title.first().content !== 'cancel') embed.setTitle(title.first().content); + + //=============================================================================================== + // Getting Description + message.channel.send("Toll, jetzt möchten Sie, dass Ihre Einbettung eine Beschreibung hat?"); + let Description = await message.channel.awaitMessages(filter, options); + if (Description.first().content == 'cancel') return message.channel.send('Einbettungsgenerator abgebrochen.') + if (Description.first().content !== 'skip' && Description.first().content !== 'cancel') embed.setDescription(Description.first().content); + + //=============================================================================================== + // Getting Footer + message.channel.send("Also, möchten Sie, dass Ihre Einbettung eine Fußzeile hat? Oder Abbrechen"); + let Footer = await message.channel.awaitMessages(filter, options); + if (Footer.first().content == 'cancel') return message.channel.send('Einbettungsgenerator abgebrochen. ') + if (Footer.first().content !== 'skip' && Footer.first().content !== 'cancel') embed.setFooter(Footer.first().content); + + //=============================================================================================== + // Getting URL + + + //=============================================================================================== + // Getting Color + message.channel.send("Möchten Sie also, dass Ihre Einbettung eine bestimmte Farbe hat? Standard ist Schwarz"); + let Color = await message.channel.awaitMessages(filter, options); + if (Color.first().content == 'cancel') return message.channel.send('Einbettungsgenerator abgebrochen.') + if (Color.first().content !== 'skip' && Color.first().content !== 'cancel') embed.setColor(Color.first().content.toUpperCase() || "2f3136") + + //=============================================================================================== + // Getting Author Field + message.channel.send("Möchten Sie also, dass Ihre Einbettung ein Autorenfeld hat?"); + let Author = await message.channel.awaitMessages(filter, options); + if (Author.first().content == 'cancel') return message.channel.send('Einbettungsgenerator abgebrochen.') + if (Author.first().content !== 'skip' && Author.first().content !== 'cancel') embed.setAuthor(Author.first().content); + + //=============================================================================================== + // Getting TimeStamp + message.channel.send("Wollen Sie also, dass Ihre Einbettung einen TimeStamp hat? Antworten Sie mit `yes` oder `no`."); + let TimeStamp = await message.channel.awaitMessages(filter, options); + if (TimeStamp.first().content == 'cancel') return message.channel.send('Einbettungsgenerator abgebrochen.') + if (TimeStamp.first().content !== 'yes') embed.setTimestamp(); + + message.channel.send(embed) + } catch (error) { + console.error(error); + } + } +} \ No newline at end of file diff --git a/commands/info-search/github.js b/commands/info-search/github.js new file mode 100644 index 0000000..00ec69c --- /dev/null +++ b/commands/info-search/github.js @@ -0,0 +1,47 @@ +const { Discord, discord } = require("discord.js"); +const { MessageEmbed } = require("discord.js"); +const moment = require("moment"); +const fetch = require("node-fetch") + +module.exports = { + name: "github", + aliases: ["git"], + category: "search", + usage: "Github ", + exmaple: "Github Emoji", + description: `Github User Account Information!`, + run: async (client, message, args) => { + + try { + + if (!args[0]) return message.channel.send(`Bitte geben Sie mir einen Benutzernamen!`) + + fetch(`https://api.github.com/users/${args.join('-')}`) + .then(res => res.json()).then(body => { + if(body.message) return message.channel.send(`Benutzer nicht gefunden | Bitte geben Sie mir einen gültigen Benutzernamen!`); + let { login, avatar_url, name, id, html_url, public_repos, followers, following, location, created_at, bio } = body; + + const embed = new MessageEmbed() + .setAuthor(`${login} Information!`, avatar_url) + .setColor(`#211F1F`) + .setThumbnail(`${avatar_url}`) + .addField(`Username`, `${login}`) + .addField(`ID`, `${id}`) + .addField(`Bio`, `${bio || "No Bio"}`) + .addField(`Public Repositories`, `${public_repos || "None"}`, true) + .addField(`Followers`, `${followers}`, true) + .addField(`Following`, `${following}`, true) + .addField(`Location`, `${location || "No Location"}`) + .addField(`Account Created`, moment.utc(created_at).format("dddd, MMMM, Do YYYY")) + .setFooter(`Tysm für die Benutzung von mir! ${message.author.username}`) + + message.channel.send(embed) + + }) + + } catch (error) { + console.log(`[Befehle] [github] Fehler im Github-Befehl:\n`, error); + return message.channel.send(`Etwas ist schief gelaufen Versuchen Sie es später noch einmal!`) + } + } +}; \ No newline at end of file diff --git a/commands/info-search/imbd.js b/commands/info-search/imbd.js new file mode 100644 index 0000000..5347f84 --- /dev/null +++ b/commands/info-search/imbd.js @@ -0,0 +1,36 @@ +const discord = require("discord.js"); +const imdb = require("imdb-api"); + +module.exports = { +name: "imdb", + description: "Informieren Sie sich über Serien und Filme", + category: "info", + usage: "imdb ", + run: async (client, message, args, color) => { + + if(!args.length) { + return message.channel.send("Bitte geben Sie den Namen des Films oder der Serie an") + } + + const imob = new imdb.Client({apiKey: "5e36f0db"}) //You need to paste you imdb api + + let movie = await imob.get({'name': args.join(" ")}) + + let embed = new discord.MessageEmbed() + .setTitle(movie.title) + .setColor("RANDOM") + .setThumbnail(movie.poster) + .setDescription(movie.plot) + .setFooter(`Ratings: ${movie.rating}`) + .addField("Country", movie.country, true) + .addField("Languages", movie.languages, true) + .addField("Type", movie.type, true); + + + message.channel.send(embed) + + + + } + +} \ No newline at end of file diff --git a/commands/info-search/insta.js b/commands/info-search/insta.js new file mode 100644 index 0000000..4c4d5bc --- /dev/null +++ b/commands/info-search/insta.js @@ -0,0 +1,44 @@ +const axios = require('axios') +const { MessageEmbed } = require('discord.js'); +module.exports = { + name: "ig", + category: "search", + run: async (client, message, args) => { + if (!args[0]) { + return message.channel.send(`Bitte geben Sie einen Kanalnamen ein`) + } + let url, response, account, details; + try { + url = `https://instagram.com/${args[0]}/?__a=1`; + response = await axios.get(url) + account = response.data + details = account.graphql.user + } catch (error) { + return message.channel.send(`Kein Konto`) + } + + const embed = new MessageEmbed() + .setTitle(`${details.is_verified ? `${details.username} ` : ` ${details.username}`} ${details.is_private ? '🔒' : ''} `) + .setDescription(details.biography) + .setThumbnail(details.profile_pic_url) + .addFields( + { + name: "Total Posts:", + value: details.edge_owner_to_timeline_media.count.toLocaleString(), + inline: true + }, + { + name: "Followers:", + value: details.edge_followed_by.count.toLocaleString(), + inline: true + }, + { + name: "Following:", + value: details.edge_follow.count.toLocaleString(), + inline: true + } + ) + await message.channel.send(embed) + + } +} \ No newline at end of file diff --git a/commands/info-search/lol b/commands/info-search/lol new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/commands/info-search/lol @@ -0,0 +1 @@ + diff --git a/commands/info-search/membercount.js b/commands/info-search/membercount.js new file mode 100644 index 0000000..ba224e7 --- /dev/null +++ b/commands/info-search/membercount.js @@ -0,0 +1,32 @@ +const db = require("quick.db"); +const Discord = require ("discord.js") +const { version } = require('../../package.json'); +const ms = require('pretty-ms'); +const { version: discordjsVersion } = require('discord.js'); +module.exports = { + + name: "membercount", + + category: "info", + aliases: ['membercount', 'membercounts', 'mc'], + description: 'Überprüfen Sie den Status des Bots', + run: async (client, message, args, del, member) => { + + const members = message.guild.members.cache; + + message.channel.send(new Discord.MessageEmbed() + .setColor('RANDOM') + .setTitle(`${message.author.tag}`) + .setThumbnail(client.user.displayAvatarURL({ dynamic: true })) + .addField('**• Membercount**', `${message.guild.memberCount}`, true) + .addField(`**• Humans**`, `${members.filter(member => !member.user.bot).size} users`, true) + .addField('**• Bots**', `${members.filter(member => member.user.bot).size} bots`, true) + .addField('Wichtige Links ','**• [Support](https://difficult-knights.de/index.php?site=ticketcenter)** • **[Website](https://Difficult-Knights.de/)** ** • [Invite Me](https://discord.com/api/oauth2/authorize?client_id=974563800319676446&permissions=8&scope=bot)**') + + .setTimestamp() + .setFooter( + `Difficult-Knights BOT`, + client.user.displayAvatarURL() + )) + } +}; diff --git a/commands/info-search/npm.js b/commands/info-search/npm.js new file mode 100644 index 0000000..a603e8e --- /dev/null +++ b/commands/info-search/npm.js @@ -0,0 +1,52 @@ +const { MessageEmbed } = require("discord.js"); +const fetch = require("node-fetch"); +const moment = require("moment"); +module.exports = { + name: "npm", + description: "Suchen Sie nach Paketen auf npm!", + category: "search", + run: async (client, message, args) => { + let query = args.join(' '); + if (!query) query = await awaitMessages(message); + if (!query) return; + const res = await fetch(`https://registry.npmjs.com/${encodeURIComponent(query)}`).catch(err => console.log(err)); + if (res.status === 404) return message.channel.send('Keine Suchergebnisse gefunden, versuchen Sie vielleicht, nach etwas zu suchen, das existiert.'); + const body = await res.json(); + const embed = new MessageEmbed() + .setColor(0xde2c2c) + .setTitle(body.name) + .setURL(`https://www.npmjs.com/package/${body.name}`) + .setDescription(body.description || 'No description.') + .addField('❯ Version', body['dist-tags'].latest, true) + .addField('❯ License', body.license || 'None', true) + .addField('❯ Author', body.author ? body.author.name : '???', true) + .addField('❯ Creation Date', moment.utc(body.time.created).format('YYYY/MM/DD hh:mm:ss'), true) + .addField('❯ Modification Date', body.time.modified ? moment.utc(body.time.modified).format('YYYY/MM/DD hh:mm:ss') : 'None', true) + .addField('❯ Repository', body.repository ? `[View Here](${body.repository.url.split('+')[1]})` : 'None', true) + .addField('❯ Maintainers', body.maintainers.map(user => user.name).join(', ')) + message.channel.send(embed); + + + async function awaitMessages(message) { + let responce; + + const filter = (user) => { + return user.author.id === message.author.id; + }; + + message.channel.send('**Wonach möchten Sie suchen?** \nGeben Sie „cancel“ ein, um den Befehl abzubrechen.'); + + await message.channel.awaitMessages(filter, { max: 1, time: 120000, errors: ['time'] }) + .then((msg) => { + const firstMsg = msg.first(); + if (firstMsg.content.toLowerCase() === 'cancel') return firstMsg.react('👍'); + responce = firstMsg.content; + }) + .catch(() => { + message.channel.send('Nun, Sie haben zu lange gebraucht, um den Befehl abzubrechen.'); + }); + + return responce; + } + }, +}; \ No newline at end of file diff --git a/commands/info-search/ping.js b/commands/info-search/ping.js new file mode 100644 index 0000000..756f5d3 --- /dev/null +++ b/commands/info-search/ping.js @@ -0,0 +1,16 @@ +const discord = require("discord.js"); + +module.exports = { + name: "ping", + category: "info", + description: "Gibt Latenz und API-Ping zurück", + run: async (client, message, args) => { + + let embed = new discord.MessageEmbed() + .setDescription(`Pong - ${client.ws.ping}ms`) + .setColor("RANDOM") + .setFooter(`Angefordert von ${message.author.username}`) + + message.channel.send(embed) + } +} \ No newline at end of file diff --git a/commands/info-search/pokemon.js b/commands/info-search/pokemon.js new file mode 100644 index 0000000..29abbe0 --- /dev/null +++ b/commands/info-search/pokemon.js @@ -0,0 +1,35 @@ +const { get } = require("request-promise-native"); +const { MessageEmbed } = require("discord.js") +module.exports = { + name: "pokemon", + description: "Holen Sie sich eine beliebige Pokemon-Beschreibung", + category: "info", + usage: "pokemon ", + run (client, message, args) { + + +const options = { + url: `https://courses.cs.washington.edu/courses/cse154/webservices/pokedex/pokedex.php?pokemon=${args.join(" ")}`, + json: true + +} + +message.channel.send(`Fetching Informtion for the Pokemon`).then(msg => { + get(options).then(body => { + + let embed = new MessageEmbed() + .setAuthor(body.name, `https://courses.cs.washington.edu/courses/cse154/webservices/pokedex/${body.images.typeIcon}`) + .setDescription(`Typ dieses Pokémon ist **${body.info.type}**. ${body.info.description}`) + .setThumbnail(`https://courses.cs.washington.edu/courses/cse154/webservices/pokedex/${body.images.photo}`) + .setColor("RANDOM") + .setFooter(`Schwäche von Pokémon- ${body.info.weakness}`, `https://courses.cs.washington.edu/courses/cse154/webservices/pokedex/${body.images.weaknessIcon}`) + + message.channel.send(embed) + msg.delete() + }) +}) + + + +} +} \ No newline at end of file diff --git a/commands/info-search/server.js b/commands/info-search/server.js new file mode 100644 index 0000000..b676e37 --- /dev/null +++ b/commands/info-search/server.js @@ -0,0 +1,115 @@ +const { MessageEmbed } = require('discord.js'); + +const moment = require('moment'); + +const filterLevels = { + + DISABLED: 'Off', + + MEMBERS_WITHOUT_ROLES: 'No Role', + + ALL_MEMBERS: 'Everyone' + +}; + +const verificationLevels = { + + NONE: 'None', + + LOW: 'Low', + + MEDIUM: 'Medium', + + HIGH: '(╯°□°)╯︵ ┻━┻', + + VERY_HIGH: '┻━┻ ミヽ(ಠ益ಠ)ノ彡┻━┻' + +}; + +const regions = { + + brazil: 'Brazil', + + europe: 'Europe', + + hongkong: 'Hong Kong', + + india: 'India', + + japan: 'Japan', + + russia: 'Russia', + + singapore: 'Singapore', + + southafrica: 'South Africa', + + sydeny: 'Sydeny', + + 'us-central': 'US Central', + + 'us-east': 'US East', + + 'us-west': 'US West', + + 'us-south': 'US South' + +}; + +module.exports = { + + name: "serverinfo", + + category: "info", + + aliases: ["serverinfo"], + + description: "Informieren Sie sich über Ihren Server.", + + usage: "serverinfo ", + +run: (client, message, args) => { + + const roles = message.guild.roles.cache.sort((a, b) => b.position - a.position).map(role => role.toString()); + + const members = message.guild.members.cache; + + const channels = message.guild.channels.cache; + + const emojis = message.guild.emojis.cache; + + const embed = new MessageEmbed() + + .setDescription(`**Gildeninformationen für __${message.guild.name}__**`) + + .setColor('BLUE') + + .setThumbnail(message.guild.iconURL({ dynamic: true })) + + .addField('**• Owner:**', `${message.guild.owner.user.tag}`, true) + .addField('** • Created At**', `${moment(message.guild.createdTimestamp).format('LL')} ${moment(message.guild.createdTimestamp).fromNow()}`, true) + .addField('** • Roles**', ` ${roles.length}`, true) + .addField('** • Emojis**', ` ${emojis.size}`, true) + .addField('** • Boost Count**', ` ${message.guild.premiumSubscriptionCount || '0'}`, true) + .addField('** • Verification Level**', ` ${verificationLevels[message.guild.verificationLevel]}`, true) + .addField('** • Content Filter**', ` ${filterLevels[message.guild.explicitContentFilter]}`, true) + .addField('** • Member**', ` ${message.guild.memberCount}`, true) + .addField('** • Shard**', `0`, true) + .addField('** • Channels**', `⌨️ ${channels.filter(channel => channel.type === 'text').size} | 🔈 ${channels.filter(channel => channel.type === 'voice').size}`, true) + .addField('** • Bots**', `${members.filter(member => member.user.bot).size}`, true) + + + + + .setFooter( + `Difficult-Knights BOT`, + client.user.displayAvatarURL() + ) + .setTimestamp(); + + + message.channel.send(embed); + + } + +}; diff --git a/commands/info-search/serveravatar.js b/commands/info-search/serveravatar.js new file mode 100644 index 0000000..59eab3a --- /dev/null +++ b/commands/info-search/serveravatar.js @@ -0,0 +1,19 @@ +const discord = require("discord.js") + +module.exports = { + name: "servericon", + aliases: ["sav", "guildavatar"], + category: "info", + description: "Holen Sie sich einen Avatar des Servers", + run: async (client, message, args) => { + + let embed = new discord.MessageEmbed() + + embed.setDescription(`[Download](${message.guild.iconURL({ dynamic: true, size: 1024 })})`) + embed.setImage(message.guild.iconURL({ dynamic: true, size: 1024 })) + embed.setColor("RANDOM") + + message.channel.send(embed) + + } +} \ No newline at end of file diff --git a/commands/info-search/snupe.js b/commands/info-search/snupe.js new file mode 100644 index 0000000..8b2b809 --- /dev/null +++ b/commands/info-search/snupe.js @@ -0,0 +1,30 @@ +const Discord = require("discord.js") +const db = require("quick.db") + +module.exports = { + name: "snipe", + aliases: ["ms", "messagesnipe"], + category: "info", + usage: "(prefix)snipe", + description: "Holen Sie sich die letzte gelöschte Nachricht mit Autor und Bild (falls vorhanden)", + run:async (client, message, args) => { + + const msg = client.snipes.get(message.channel.id) + if(!msg) return message.channel.send("Es gibt nichts zu schnüffeln!") + const embed = new Discord.MessageEmbed() + .setAuthor(msg.author) + .setDescription(msg.content) + if(msg.image)embed + .setImage(msg.image) + .setColor("00FFFF") + .setTimestamp() + .setFooter( + `Difficult-Knights BOT`, + client.user.displayAvatarURL() + ) + + message.channel.send(embed) + + + } +} \ No newline at end of file diff --git a/commands/info-search/tweeter.js b/commands/info-search/tweeter.js new file mode 100644 index 0000000..2b6e035 --- /dev/null +++ b/commands/info-search/tweeter.js @@ -0,0 +1,35 @@ + +const Discord = require("discord.js") +const request = require("node-superfetch") //npm i node-superfetch +const {stripIndents} = require("common-tags") //npm i common-tags +const twitter = require("twitter-api.js") //npm i twitter-api.js +module.exports = { + name: "twitter", + aliases: ["twe"], + category: "search", + premiumOnly: "true", + run: async (client, msg, args) => { + let user = args[0] + if(!user) return msg.channel.send("Geben Sie Ihren Twitter-Namen an") + + try { + const body = await twitter.users(user) + const tweet = new Discord.MessageEmbed() + .setColor("BLUE") + .setAuthor(`@${body.screen_name.toLowerCase()}`, body.verified ? "https://emoji.gg/assets/emoji/6817_Discord_Verified.png" : null) + .setDescription(stripIndents` ${body.description} + \`•\` Followers: **${(body.followers_count).toLocaleString()}** + \`•\` Following: **${(body.friends_count).toLocaleString()}** + \`•\` Tweets: **${(body.statuses_count).toLocaleString()}** + \`•\` Account Created At: ${body.created_at}`) + .setFooter(`Twitter ID: ${body.id}`, "https://abs.twimg.com/favicons/twitter.ico") + .setThumbnail(body.profile_image_url_https.replace('_normal', '')) + .setImage(body.profile_banner_url) + msg.channel.send(tweet) + } catch (e) { + if(e.status === 403) return msg.channel.send("Dieser Benutzer im privaten Modus oder gelöschtes Konto") + else if(e.status === 404) return msg.channel.send("Not Found") + else return msg.channel.send(`Unknown error: \`${e.message}\``) + } + } +} \ No newline at end of file diff --git a/commands/info-search/uptimee.js b/commands/info-search/uptimee.js new file mode 100644 index 0000000..5117a89 --- /dev/null +++ b/commands/info-search/uptimee.js @@ -0,0 +1,18 @@ +const { MessageEmbed } = require("discord.js"); +const Discord = require("discord.js"); +module.exports = { + name: "uptime", + category: "info", + description: "Zeigt die Betriebszeit des Bots an.", + usage: "uptime", + + run: async (client, message, args) => { + let days = Math.floor(client.uptime / 86400000); + let hours = Math.floor(client.uptime / 3600000) % 24; + let minutes = Math.floor(client.uptime / 60000) % 60; + let seconds = Math.floor(client.uptime / 1000) % 60; + + return message.channel.send(`__Uptime:__\n${days}d ${hours}h ${minutes}m ${seconds}s`); + } + +} \ No newline at end of file diff --git a/commands/info-search/whois.js b/commands/info-search/whois.js new file mode 100644 index 0000000..b7ead0a --- /dev/null +++ b/commands/info-search/whois.js @@ -0,0 +1,101 @@ +const { MessageEmbed } = require("discord.js") +const moment = require("moment") + +module.exports = { + name: "userinfo", + category: "info", + aliases: ["whois", "user"], + usage: "userinfo ", + description: "Holen Sie sich Vorab-Statistiken einer bestimmten Person oder sich selbst", + run: async (client, message, args) => { + + + let user; + + if (!args[0]) { + user = message.member; + } else { + + + + + + user = message.mentions.members.first() || await message.guild.members.fetch(args[0]).catch(err => { return message.channel.send(":x: Kann diese Person nicht finden") }) + } + + if (!user) { + return message.channel.send(":x: Kann diese Person nicht finden!") + } + + + //OPTIONS FOR STATUS + + let stat = { + online: "https://emoji.gg/assets/emoji/9166_online.png", + idle: "https://emoji.gg/assets/emoji/3929_idle.png", + dnd: "https://emoji.gg/assets/emoji/2531_dnd.png", + offline: "https://emoji.gg/assets/emoji/7445_status_offline.png" + } + + //NOW BADGES + let badges = await user.user.flags + badges = await badges ? badges.toArray() : ["None"] + + let newbadges = []; + badges.forEach(m => { + newbadges.push(m.replace("_", " ")) + }) + + let embed = new MessageEmbed() + .setThumbnail(user.user.displayAvatarURL({ dynamic: true })) + + //ACTIVITY + let array = [] + if (user.user.presence.activities.length) { + + let data = user.user.presence.activities; + + for (let i = 0; i < data.length; i++) { + let name = data[i].name || "None" + let xname = data[i].details || "None" + let zname = data[i].state || "None" + let type = data[i].type + + array.push(`**${type}** : \`${name} : ${xname} : ${zname}\``) + + if (data[i].name === "Spotify") { + embed.setThumbnail(`https://i.scdn.co/image/${data[i].assets.largeImage.replace("spotify:", "")}`) + } + + embed.setDescription(array.join("\n")) + + } + } + + //EMBED COLOR BASED ON member + embed.setColor(user.displayHexColor === "#000000" ? "#ffffff" : user.displayHexColor) + + //OTHER STUFF + embed.setAuthor(user.user.tag, user.user.displayAvatarURL({ dynamic: true })) + + //CHECK IF USER HAVE NICKNAME + if (user.nickname !== null) embed.addField("Nickname", user.nickname) + embed.addField("Joined At", moment(user.joinedAt).format("LLLL")) + .addField("Account Created At", moment(user.user.createdAt).format("LLLL")) + .addField("Common Information", `ID: \`${user.user.id}\`\nDiscriminator: ${user.user.discriminator}\nBot: ${user.user.bot}\nDeleted User: ${user.deleted}`) + .addField("Badges", newbadges.join(", ").toLowerCase() || "None") + .setFooter(user.user.presence.status, stat[user.user.presence.status]) + + + + return message.channel.send(embed).catch(err => { + return message.channel.send("Error : " + err) + }) + + + + } + + + + } \ No newline at end of file