commit 16736ec18f337ab611982105aba8586b92a5c935 Author: Raven Scott Date: Wed Jan 4 11:44:59 2023 -0500 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5693cd7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules +.env +package-lock.json diff --git a/README.md b/README.md new file mode 100644 index 0000000..4bf5f04 --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +# Discord-Linux Discord.JS v14 Base Template + +Only 3 dependencies required to run this bot! + +Message intents are NOT supported in this bot, this is due to the verification that Discord is enabling. + +Structure: + +**commands** - This folder contains commands + +**event** - This folder contains files related to discord.js events. (Like "ready", "interactionCreate") + +**handler** - This folder contains files that read the commands folders contents. + +**index.js** - This is the main file to run the bot. + + + +1) Use ```npm i ``` + +2) Create a .env file ``` touch .env``` + +3) Edit .env +``` +TOKEN = token +``` + +4) Go to Handler -- > index.js and change "GUIDIDHERE" to your Discord Server's Guild ID + +5) Go into https://discord.com/developers/applications and enable Privileged Intents. + +6) Run the bot ```node index.js``` + + +Want to make this better? Issue a pull request! diff --git a/commands/Info/ping.js b/commands/Info/ping.js new file mode 100644 index 0000000..7c34f89 --- /dev/null +++ b/commands/Info/ping.js @@ -0,0 +1,86 @@ +const { EmbedBuilder } = require('discord.js'); +var unirest = require('unirest'); +const cmd = require('cmd-promise') +const fs = require("fs"); +let lang +module.exports = { + name: "send", + private: false, + description: "send an inquiry to the AI", + options: [{ + "name": "inquiry", + "description": "What you would like to send.", + "required": true, + "type": 3 // 6 is type USER +}], + run: async (client, interaction) => { + let data = interaction.options._hoistedOptions[0].value + + function detectCodingLanguages(str) { + const languages = { + 'javascript': 'js', + 'nodejs': 'js', + 'node': 'js', + 'python': 'py', + 'ruby': 'rb', + 'c#': 'csharp', + 'c++': 'cpp', + 'php': 'php', + 'go': 'go', + 'bash': 'bash' + + }; + + let detectedLanguages = []; + + for (let language in languages) { + if (str.includes(language)) { + detectedLanguages.push(languages[language]); + } + } + + return detectedLanguages; + } + + console.log(detectCodingLanguages(data)[0]) + + if (detectCodingLanguages(data)){ + lang = detectCodingLanguages(data)[0] + } else { + lang = "js" + } + +unirest + .post('https://codex-ai-v9q6.onrender.com/') + .headers({'Accept': 'application/json', 'Content-Type': 'application/json'}) + .send({ "prompt": data }) + .then((response) => { + if (response.body.bot.length > 1980){ + fs.writeFile('/tmp/paste', response.body.bot, err => { + if (err) { + console.error(err) + return + } + }) + cmd("sleep 2; cat /tmp/paste | dpaste").then(pasteout => { + const mainEmbed = new EmbedBuilder() + .setColor('#0099ff') + .addFields( + { name: 'Please check the below output log:', value: pasteout.stdout.replace("Pro tip: you can password protect your paste just by typing a username and password after your paste command.", "").replace("Paste Saved: ", "").replace("-------------------------------------------------------", "") }, + ).setTitle("Response too large") + .setDescription("Our AI was too Powerful!") + .setFooter({ text: `Requested by ${interaction.user.tag}`, iconURL: `${interaction.user.displayAvatarURL()}` }); + (async () => { + return await interaction.editReply({ embeds: [mainEmbed] }) + + })(); + + }) + } else { + + interaction.editReply("```" + lang + response.body.bot + "```") + } + }) + + }, +}; diff --git a/events/interactionCreate.js b/events/interactionCreate.js new file mode 100644 index 0000000..709522e --- /dev/null +++ b/events/interactionCreate.js @@ -0,0 +1,93 @@ +const client = require("../raven_ai"); +require("dotenv").config(); +const { glob } = require("glob"); +const { promisify } = require("util"); +const globPromise = promisify(glob); + +client.on("interactionCreate", async (interaction) => { + + // Slash Commands + const slashCommands = await globPromise(`${process.cwd()}/commands/*/*.js`); + const arrayOfSlashCommands = []; + + // Map the slash commands into data to be processed + slashCommands.map((value) => { + const file = require(value); + const splitted = value.split("/"); + const directory = splitted[splitted.length - 2]; + + if (!file?.name) return; + + const properties = { + directory, + ...file + }; + client.slashCommands.set(file.name, properties); + + if (["MESSAGE", "USER"].includes(file.type)) delete file.description; + + // Push the data + arrayOfSlashCommands.push(file); + }); + + + // Slash Command Handling + if (interaction.isChatInputCommand()) { + + // Grabbing Command Data for this interaction + let commandData = [] + + // We use ForEach here to filter our array into the single commands info. + await arrayOfSlashCommands.forEach(command => { + if (command.name == interaction.commandName) { + commandData.push(command) + } + }); + + // Process and Parse Data + let dataToProcess = JSON.stringify(commandData[0]) + let parsedData = JSON.parse(dataToProcess) + + // If the command is private, set ephemeral true else, set false + if (parsedData.private == true) { + await interaction.deferReply({ + ephemeral: true + }).catch(() => {}); + + } else { + await interaction.deferReply({ + ephemeral: false + }).catch(() => {}); + } + + + const cmd = client.slashCommands.get(interaction.commandName); + if (!cmd) + return interaction.followUp({ + content: "An error has occurred " + }); + + const args = []; + + for (let option of interaction.options.data) { + if (option.type === "SUB_COMMAND") { + if (option.name) args.push(option.name); + option.options?.forEach((x) => { + if (x.value) args.push(x.value); + }); + } else if (option.value) args.push(option.value); + } + interaction.member = interaction.guild.members.cache.get(interaction.user.id); + + cmd.run(client, interaction, args); + } + + // Context Menu Handling + if (interaction.isContextMenuCommand()) { + await interaction.deferReply({ + ephemeral: false + }); + const command = client.slashCommands.get(interaction.commandName); + if (command) command.run(client, interaction); + } +}); \ No newline at end of file diff --git a/events/ready.js b/events/ready.js new file mode 100644 index 0000000..ec3bb92 --- /dev/null +++ b/events/ready.js @@ -0,0 +1,5 @@ +const client = require("../raven_ai"); + +client.on("ready", () => { + console.log(`${client.user.tag} is up and ready to go!`); +}); diff --git a/handler/index.js b/handler/index.js new file mode 100644 index 0000000..3cff50e --- /dev/null +++ b/handler/index.js @@ -0,0 +1,37 @@ +require("dotenv").config(); +const { glob } = require("glob"); +const { promisify } = require("util"); +const globPromise = promisify(glob); + +module.exports = async (client) => { + // Slash Commands + const slashCommands = await globPromise(`${process.cwd()}/commands/*/*.js`); + const arrayOfSlashCommands = []; + slashCommands.map((value) => { + const file = require(value); + const splitted = value.split("/"); + const directory = splitted[splitted.length - 2]; + + if (!file?.name) return; + + const properties = { directory, ...file }; + client.slashCommands.set(file.name, properties); + + if (["MESSAGE", "USER"].includes(file.type)) delete file.description; + arrayOfSlashCommands.push(file); + }); + + // Events + const eventFiles = await globPromise(`${process.cwd()}/events/*.js`); + eventFiles.map((value) => require(value)); + + // Slash Commands Register + client.on("ready", async () => { + // // Register for a single guild + // await client.guilds.cache.get("GUIDIDHERE").commands.set(arrayOfSlashCommands); + + // Register for all the guilds the bot is in + await client.application.commands.set(arrayOfSlashCommands); + }); + +}; diff --git a/output.txt b/output.txt new file mode 100644 index 0000000..2a6c6b0 --- /dev/null +++ b/output.txt @@ -0,0 +1,71 @@ + 1067 [03/Jan/2023:20 + 1025 [03/Jan/2023:22 + 926 [03/Jan/2023:21 + 807 [04/Jan/2023:00 + 784 [03/Jan/2023:23 + 750 [03/Jan/2023:19 + 568 [02/Jan/2023:08 + 488 [01/Jan/2023:12 + 464 [01/Jan/2023:09 + 461 [03/Jan/2023:05 + 394 [02/Jan/2023:16 + 370 [01/Jan/2023:10 + 360 [01/Jan/2023:22 + 341 [03/Jan/2023:00 + 341 [01/Jan/2023:11 + 306 [03/Jan/2023:16 + 295 [02/Jan/2023:15 + 278 [03/Jan/2023:18 + 277 [03/Jan/2023:12 + 274 [03/Jan/2023:03 + 246 [02/Jan/2023:20 + 240 [01/Jan/2023:13 + 233 [03/Jan/2023:13 + 219 [01/Jan/2023:05 + 193 [03/Jan/2023:02 + 184 [02/Jan/2023:10 + 183 [02/Jan/2023:14 + 182 [02/Jan/2023:19 + 179 [03/Jan/2023:15 + 177 [02/Jan/2023:17 + 177 [01/Jan/2023:08 + 174 [02/Jan/2023:13 + 173 [02/Jan/2023:00 + 172 [03/Jan/2023:14 + 171 [04/Jan/2023:01 + 164 [02/Jan/2023:07 + 163 [03/Jan/2023:11 + 163 [02/Jan/2023:18 + 161 [03/Jan/2023:17 + 158 [01/Jan/2023:23 + 151 [01/Jan/2023:20 + 151 [01/Jan/2023:15 + 141 [03/Jan/2023:10 + 139 [03/Jan/2023:07 + 136 [02/Jan/2023:03 + 133 [01/Jan/2023:14 + 133 [01/Jan/2023:06 + 131 [02/Jan/2023:05 + 128 [03/Jan/2023:04 + 128 [02/Jan/2023:23 + 125 [01/Jan/2023:18 + 122 [01/Jan/2023:04 + 121 [03/Jan/2023:08 + 121 [03/Jan/2023:01 + 121 [02/Jan/2023:11 + 120 [02/Jan/2023:06 + 119 [01/Jan/2023:19 + 116 [02/Jan/2023:09 + 116 [01/Jan/2023:16 + 113 [02/Jan/2023:22 + 112 [02/Jan/2023:12 + 106 [03/Jan/2023:09 + 102 [02/Jan/2023:02 + 100 [02/Jan/2023:01 + 98 [02/Jan/2023:21 + 94 [01/Jan/2023:07 + 87 [03/Jan/2023:06 + 87 [01/Jan/2023:17 + 85 [01/Jan/2023:21 + 79 [02/Jan/2023:04 + 36 [01/Jan/2023:03 diff --git a/package.json b/package.json new file mode 100644 index 0000000..3f46904 --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "name": "dlinuxtemplatev14", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "cmd-promise": "^1.2.0", + "discord.js": "^14.0.3", + "dotenv": "^16.0.0", + "glob": "^7.2.0", + "language-detect": "^1.1.0" + } +} diff --git a/raven_ai.js b/raven_ai.js new file mode 100644 index 0000000..9af5771 --- /dev/null +++ b/raven_ai.js @@ -0,0 +1,14 @@ +require("dotenv").config(); +const { Client, Collection } = require("discord.js"); + +const client = new Client({ intents: 4097 }); +module.exports = client; + +// Global Variables +client.commands = new Collection(); +client.slashCommands = new Collection(); + +// Initializing the project +require("./handler")(client); + +client.login(process.env.TOKEN); diff --git a/test.sh b/test.sh new file mode 100755 index 0000000..faa4b53 --- /dev/null +++ b/test.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +#This script will find the IPs with the most connections and add all of its requests together. It will also show what day and what hours the most requests in high frequency were made. + +#Set variables for log file and output file +LOG_FILE="/var/log/httpd/access_log" +OUTPUT_FILE="output.txt" + +#Find IPs with most connections and add all of its requests together +echo "Finding IPs with most connections..." +cat $LOG_FILE | awk '{print $1}' | sort | uniq -c | sort -nr > $OUTPUT_FILE +echo "Done!" +echo "" +echo "The IPs with the most connections are:" +cat $OUTPUT_FILE +echo "" + + #Find what day and what hours the most requests in high frequency were made +echo "Finding what day and what hours the most requests in high frequency were made..." +cat $LOG_FILE | awk '{print $4}' | cut -d: -f1,2 | sort | uniq -c | sort -nr > $OUTPUT_FILE +echo "Done!" +echo "" +echo "The day and hour with the highest request frequency is:" +cat $OUTPUT_FILE