├── .gitignore ├── .npmignore ├── LICENSE ├── README.md ├── art.jpg ├── art.png ├── commands └── imagine.js ├── config.json ├── deploy-commands.js ├── index.js ├── package-lock.json └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # TernJS port file 104 | .tern-port 105 | 106 | # Discord 107 | config.json 108 | 109 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | package-lock.json 3 | .env 4 | config.json 5 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 oelin 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Midjourney Reborn 🔥 2 | 3 | A Discord bot for all your Midjourney needs! Use this bot to convert text prompts into beautiful artwork via Midjourney V4. 4 | 5 |
6 | 7 |
8 | 9 | 10 | ## Usage 11 | 12 | To run this demo, clone the repository and then create a `config.json` file containing your bot's token. 13 | 14 | ```sh 15 | git clone https://github.com/oelin/midjourney-reborn/ 16 | 17 | cd midjourney-reborn 18 | ``` 19 | 20 | ```sh 21 | echo {"token": "YOUR TOKEN"} > ./config.json 22 | ``` 23 | 24 | Then run the following commands to install start the bot. 25 | 26 | ```sh 27 | npm i 28 | 29 | npm run deploy 30 | 31 | npm start 32 | ``` 33 | 34 | 35 | ## Commands 36 | 37 | This project is in active development so expect lots of changes to this section. Currenlty the primary command supported is `/imagine [prompt]`, which can be used to generate images with Midjourney. For instance, `/imagine an astronaut riding a horse on mars artstation` might produce the following image: 38 | 39 | 40 | 41 | In the near future we hope to add support for features such as upscailing, variant generation and additional generation parameters. 42 | 43 | 44 | ## Technologies 45 | 46 | This bot utilizes [discord.js](https://discord.js.org/#/) and [Midjourney Client](https://github.com/oelin/midjourney-client) to enable Midjourney V4 access from within Discord. The underlying images are generated on fast GPUs provided by [Replicate](https://replicate.com). 47 | 48 | 49 | ## Resources 50 | 51 | * [Midjourney Website](https://www.midjourney.com/home/?callbackUrl=%2Fapp%2F) 52 | * [Midjourney/Openjourney on Replicate](https://replicate.com/prompthero/openjourney) 53 | -------------------------------------------------------------------------------- /art.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oelin/midjourney-reborn/715ddcd168c72d45f72a4c6d9d02f28a40f206b8/art.jpg -------------------------------------------------------------------------------- /art.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oelin/midjourney-reborn/715ddcd168c72d45f72a4c6d9d02f28a40f206b8/art.png -------------------------------------------------------------------------------- /commands/imagine.js: -------------------------------------------------------------------------------- 1 | const { SlashCommandBuilder } = require('discord.js') 2 | 3 | 4 | module.exports = { 5 | data: new SlashCommandBuilder() 6 | .setName('imagine') 7 | .setDescription('There are endless possibilities...') 8 | .addStringOption(option => 9 | option 10 | .setName('prompt') 11 | .setDescription('The prompt to imagine') 12 | .setRequired(true) 13 | ), 14 | async execute(interaction) { 15 | 16 | const { default: midjourney } = await import('midjourney-client') 17 | const prompt = interaction.options.getString('prompt') 18 | 19 | midjourney(prompt).then(response => { 20 | if (response.length < 1) { 21 | interaction.editReply('Unabled to generate images 😭.') 22 | } 23 | 24 | const imageURLs = response.join('\n') 25 | interaction.editReply(`**${prompt}**\n${imageURLs}`) 26 | 27 | }) 28 | 29 | await interaction.reply('Generating images, may take up to 7 seconds...') 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /config.json: -------------------------------------------------------------------------------- 1 | { 2 | "token": "your token", 3 | "clientId": "your bot id", 4 | "guildId": "your guild id" 5 | } 6 | -------------------------------------------------------------------------------- /deploy-commands.js: -------------------------------------------------------------------------------- 1 | const { REST, Routes } = require('discord.js'); 2 | const { clientId, guildId, token } = require('./config.json'); 3 | const fs = require('node:fs'); 4 | 5 | const commands = []; 6 | // Grab all the command files from the commands directory you created earlier 7 | const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js')); 8 | 9 | // Grab the SlashCommandBuilder#toJSON() output of each command's data for deployment 10 | for (const file of commandFiles) { 11 | const command = require(`./commands/${file}`); 12 | commands.push(command.data.toJSON()); 13 | } 14 | 15 | // Construct and prepare an instance of the REST module 16 | const rest = new REST({ version: '10' }).setToken(token); 17 | 18 | // and deploy your commands! 19 | (async () => { 20 | try { 21 | console.log(`Started refreshing ${commands.length} application (/) commands.`); 22 | 23 | // The put method is used to fully refresh all commands in the guild with the current set 24 | const data = await rest.put( 25 | Routes.applicationGuildCommands(clientId, guildId), 26 | { body: commands }, 27 | ); 28 | 29 | console.log(`Successfully reloaded ${data.length} application (/) commands.`); 30 | } catch (error) { 31 | // And of course, make sure you catch and log any errors! 32 | console.error(error); 33 | } 34 | })(); 35 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const { Client, Collection, Events, GatewayIntentBits } = require('discord.js') 2 | const { token } = require('./config.json') 3 | 4 | const path = require('path') 5 | const fs = require('fs') 6 | 7 | 8 | const client = new Client({ 9 | intents: [ 10 | GatewayIntentBits.Guilds, 11 | ], 12 | }) 13 | 14 | 15 | client.commands = new Collection() 16 | 17 | const commandsPath = path.join(__dirname, 'commands'); 18 | const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js')); 19 | 20 | for (const file of commandFiles) { 21 | const filePath = path.join(commandsPath, file); 22 | const command = require(filePath); 23 | // Set a new item in the Collection with the key as the command name and the value as the exported module 24 | if ('data' in command && 'execute' in command) { 25 | client.commands.set(command.data.name, command); 26 | } else { 27 | console.log(`[WARNING] The command at ${filePath} is missing a required "data" or "execute" property.`); 28 | } 29 | } 30 | 31 | 32 | client.on(Events.InteractionCreate, async interaction => { 33 | if (!interaction.isChatInputCommand()) return; 34 | 35 | const command = interaction.client.commands.get(interaction.commandName); 36 | 37 | if (!command) { 38 | console.error(`No command matching ${interaction.commandName} was found.`); 39 | return; 40 | } 41 | 42 | try { 43 | await command.execute(interaction); 44 | } catch (error) { 45 | console.error(error); 46 | await interaction.reply({ content: 'There was an error while executing this command!', ephemeral: true }); 47 | } 48 | }); 49 | 50 | 51 | client.once(Events.ClientReady, ({ user }) => { 52 | console.log(`Client ready! Logged in as ${user.tag}.`) 53 | }) 54 | 55 | 56 | 57 | 58 | client.login(token) 59 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "midjourney-bot", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "midjourney-bot", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "discord.js": "^14.7.1", 13 | "log": "^6.3.1", 14 | "midjourney-client": "github:oelin/midjourney-client" 15 | } 16 | }, 17 | "node_modules/@discordjs/builders": { 18 | "version": "1.4.0", 19 | "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.4.0.tgz", 20 | "integrity": "sha512-nEeTCheTTDw5kO93faM1j8ZJPonAX86qpq/QVoznnSa8WWcCgJpjlu6GylfINTDW6o7zZY0my2SYdxx2mfNwGA==", 21 | "dependencies": { 22 | "@discordjs/util": "^0.1.0", 23 | "@sapphire/shapeshift": "^3.7.1", 24 | "discord-api-types": "^0.37.20", 25 | "fast-deep-equal": "^3.1.3", 26 | "ts-mixer": "^6.0.2", 27 | "tslib": "^2.4.1" 28 | }, 29 | "engines": { 30 | "node": ">=16.9.0" 31 | } 32 | }, 33 | "node_modules/@discordjs/collection": { 34 | "version": "1.3.0", 35 | "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.3.0.tgz", 36 | "integrity": "sha512-ylt2NyZ77bJbRij4h9u/wVy7qYw/aDqQLWnadjvDqW/WoWCxrsX6M3CIw9GVP5xcGCDxsrKj5e0r5evuFYwrKg==", 37 | "engines": { 38 | "node": ">=16.9.0" 39 | } 40 | }, 41 | "node_modules/@discordjs/rest": { 42 | "version": "1.5.0", 43 | "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-1.5.0.tgz", 44 | "integrity": "sha512-lXgNFqHnbmzp5u81W0+frdXN6Etf4EUi8FAPcWpSykKd8hmlWh1xy6BmE0bsJypU1pxohaA8lQCgp70NUI3uzA==", 45 | "dependencies": { 46 | "@discordjs/collection": "^1.3.0", 47 | "@discordjs/util": "^0.1.0", 48 | "@sapphire/async-queue": "^1.5.0", 49 | "@sapphire/snowflake": "^3.2.2", 50 | "discord-api-types": "^0.37.23", 51 | "file-type": "^18.0.0", 52 | "tslib": "^2.4.1", 53 | "undici": "^5.13.0" 54 | }, 55 | "engines": { 56 | "node": ">=16.9.0" 57 | } 58 | }, 59 | "node_modules/@discordjs/util": { 60 | "version": "0.1.0", 61 | "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-0.1.0.tgz", 62 | "integrity": "sha512-e7d+PaTLVQav6rOc2tojh2y6FE8S7REkqLldq1XF4soCx74XB/DIjbVbVLtBemf0nLW77ntz0v+o5DytKwFNLQ==", 63 | "engines": { 64 | "node": ">=16.9.0" 65 | } 66 | }, 67 | "node_modules/@sapphire/async-queue": { 68 | "version": "1.5.0", 69 | "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", 70 | "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", 71 | "engines": { 72 | "node": ">=v14.0.0", 73 | "npm": ">=7.0.0" 74 | } 75 | }, 76 | "node_modules/@sapphire/shapeshift": { 77 | "version": "3.8.1", 78 | "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.8.1.tgz", 79 | "integrity": "sha512-xG1oXXBhCjPKbxrRTlox9ddaZTvVpOhYLmKmApD/vIWOV1xEYXnpoFs68zHIZBGbqztq6FrUPNPerIrO1Hqeaw==", 80 | "dependencies": { 81 | "fast-deep-equal": "^3.1.3", 82 | "lodash": "^4.17.21" 83 | }, 84 | "engines": { 85 | "node": ">=v14.0.0", 86 | "npm": ">=7.0.0" 87 | } 88 | }, 89 | "node_modules/@sapphire/snowflake": { 90 | "version": "3.4.0", 91 | "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.4.0.tgz", 92 | "integrity": "sha512-zZxymtVO6zeXVMPds+6d7gv/OfnCc25M1Z+7ZLB0oPmeMTPeRWVPQSS16oDJy5ZsyCOLj7M6mbZml5gWXcVRNw==", 93 | "engines": { 94 | "node": ">=v14.0.0", 95 | "npm": ">=7.0.0" 96 | } 97 | }, 98 | "node_modules/@tokenizer/token": { 99 | "version": "0.3.0", 100 | "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", 101 | "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" 102 | }, 103 | "node_modules/@types/node": { 104 | "version": "18.11.18", 105 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", 106 | "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" 107 | }, 108 | "node_modules/@types/ws": { 109 | "version": "8.5.4", 110 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", 111 | "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", 112 | "dependencies": { 113 | "@types/node": "*" 114 | } 115 | }, 116 | "node_modules/busboy": { 117 | "version": "1.6.0", 118 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", 119 | "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", 120 | "dependencies": { 121 | "streamsearch": "^1.1.0" 122 | }, 123 | "engines": { 124 | "node": ">=10.16.0" 125 | } 126 | }, 127 | "node_modules/d": { 128 | "version": "1.0.1", 129 | "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", 130 | "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", 131 | "dependencies": { 132 | "es5-ext": "^0.10.50", 133 | "type": "^1.0.1" 134 | } 135 | }, 136 | "node_modules/d/node_modules/type": { 137 | "version": "1.2.0", 138 | "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", 139 | "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" 140 | }, 141 | "node_modules/discord-api-types": { 142 | "version": "0.37.30", 143 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.30.tgz", 144 | "integrity": "sha512-TzNF28zWV63clYW1+rbKT2+2qSI+lw/aNG3lyP2fIj5NioGPz4C+bCSvwhP3Ly3uLwL7v8FxIiu8XKGDsvuwWA==" 145 | }, 146 | "node_modules/discord.js": { 147 | "version": "14.7.1", 148 | "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.7.1.tgz", 149 | "integrity": "sha512-1FECvqJJjjeYcjSm0IGMnPxLqja/pmG1B0W2l3lUY2Gi4KXiyTeQmU1IxWcbXHn2k+ytP587mMWqva2IA87EbA==", 150 | "dependencies": { 151 | "@discordjs/builders": "^1.4.0", 152 | "@discordjs/collection": "^1.3.0", 153 | "@discordjs/rest": "^1.4.0", 154 | "@discordjs/util": "^0.1.0", 155 | "@sapphire/snowflake": "^3.2.2", 156 | "@types/ws": "^8.5.3", 157 | "discord-api-types": "^0.37.20", 158 | "fast-deep-equal": "^3.1.3", 159 | "lodash.snakecase": "^4.1.1", 160 | "tslib": "^2.4.1", 161 | "undici": "^5.13.0", 162 | "ws": "^8.11.0" 163 | }, 164 | "engines": { 165 | "node": ">=16.9.0" 166 | } 167 | }, 168 | "node_modules/duration": { 169 | "version": "0.2.2", 170 | "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.2.tgz", 171 | "integrity": "sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg==", 172 | "dependencies": { 173 | "d": "1", 174 | "es5-ext": "~0.10.46" 175 | } 176 | }, 177 | "node_modules/es5-ext": { 178 | "version": "0.10.62", 179 | "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", 180 | "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", 181 | "hasInstallScript": true, 182 | "dependencies": { 183 | "es6-iterator": "^2.0.3", 184 | "es6-symbol": "^3.1.3", 185 | "next-tick": "^1.1.0" 186 | }, 187 | "engines": { 188 | "node": ">=0.10" 189 | } 190 | }, 191 | "node_modules/es6-iterator": { 192 | "version": "2.0.3", 193 | "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", 194 | "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", 195 | "dependencies": { 196 | "d": "1", 197 | "es5-ext": "^0.10.35", 198 | "es6-symbol": "^3.1.1" 199 | } 200 | }, 201 | "node_modules/es6-symbol": { 202 | "version": "3.1.3", 203 | "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", 204 | "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", 205 | "dependencies": { 206 | "d": "^1.0.1", 207 | "ext": "^1.1.2" 208 | } 209 | }, 210 | "node_modules/event-emitter": { 211 | "version": "0.3.5", 212 | "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", 213 | "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", 214 | "dependencies": { 215 | "d": "1", 216 | "es5-ext": "~0.10.14" 217 | } 218 | }, 219 | "node_modules/ext": { 220 | "version": "1.7.0", 221 | "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", 222 | "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", 223 | "dependencies": { 224 | "type": "^2.7.2" 225 | } 226 | }, 227 | "node_modules/fast-deep-equal": { 228 | "version": "3.1.3", 229 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 230 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 231 | }, 232 | "node_modules/file-type": { 233 | "version": "18.2.0", 234 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.2.0.tgz", 235 | "integrity": "sha512-M3RQMWY3F2ykyWZ+IHwNCjpnUmukYhtdkGGC1ZVEUb0ve5REGF7NNJ4Q9ehCUabtQKtSVFOMbFTXgJlFb0DQIg==", 236 | "dependencies": { 237 | "readable-web-to-node-stream": "^3.0.2", 238 | "strtok3": "^7.0.0", 239 | "token-types": "^5.0.1" 240 | }, 241 | "engines": { 242 | "node": ">=14.16" 243 | }, 244 | "funding": { 245 | "url": "https://github.com/sindresorhus/file-type?sponsor=1" 246 | } 247 | }, 248 | "node_modules/ieee754": { 249 | "version": "1.2.1", 250 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 251 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 252 | "funding": [ 253 | { 254 | "type": "github", 255 | "url": "https://github.com/sponsors/feross" 256 | }, 257 | { 258 | "type": "patreon", 259 | "url": "https://www.patreon.com/feross" 260 | }, 261 | { 262 | "type": "consulting", 263 | "url": "https://feross.org/support" 264 | } 265 | ] 266 | }, 267 | "node_modules/inherits": { 268 | "version": "2.0.4", 269 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 270 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 271 | }, 272 | "node_modules/lodash": { 273 | "version": "4.17.21", 274 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 275 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 276 | }, 277 | "node_modules/lodash.snakecase": { 278 | "version": "4.1.1", 279 | "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", 280 | "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" 281 | }, 282 | "node_modules/log": { 283 | "version": "6.3.1", 284 | "resolved": "https://registry.npmjs.org/log/-/log-6.3.1.tgz", 285 | "integrity": "sha512-McG47rJEWOkXTDioZzQNydAVvZNeEkSyLJ1VWkFwfW+o1knW+QSi8D1KjPn/TnctV+q99lkvJNe1f0E1IjfY2A==", 286 | "dependencies": { 287 | "d": "^1.0.1", 288 | "duration": "^0.2.2", 289 | "es5-ext": "^0.10.53", 290 | "event-emitter": "^0.3.5", 291 | "sprintf-kit": "^2.0.1", 292 | "type": "^2.5.0", 293 | "uni-global": "^1.0.0" 294 | } 295 | }, 296 | "node_modules/midjourney-client": { 297 | "version": "1.0.0", 298 | "resolved": "git+ssh://git@github.com/oelin/midjourney-client.git#a183bc0f3df2deb72741fd5876abb0ff4c94a03e", 299 | "license": "ISC", 300 | "dependencies": { 301 | "node-fetch-cookies": "^2.0.4" 302 | } 303 | }, 304 | "node_modules/next-tick": { 305 | "version": "1.1.0", 306 | "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", 307 | "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" 308 | }, 309 | "node_modules/node-fetch": { 310 | "version": "2.6.8", 311 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.8.tgz", 312 | "integrity": "sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==", 313 | "dependencies": { 314 | "whatwg-url": "^5.0.0" 315 | }, 316 | "engines": { 317 | "node": "4.x || >=6.0.0" 318 | }, 319 | "peerDependencies": { 320 | "encoding": "^0.1.0" 321 | }, 322 | "peerDependenciesMeta": { 323 | "encoding": { 324 | "optional": true 325 | } 326 | } 327 | }, 328 | "node_modules/node-fetch-cookies": { 329 | "version": "2.0.4", 330 | "resolved": "https://registry.npmjs.org/node-fetch-cookies/-/node-fetch-cookies-2.0.4.tgz", 331 | "integrity": "sha512-mRQv1l6gBHlBKwPIYy/n9HksnchXJUV/+7Wbt7fkqI95YvgFK88kRkncBuQcvQbrsEMwfd44f81slwDyN5FoDQ==", 332 | "dependencies": { 333 | "node-fetch": "^2.6.7" 334 | }, 335 | "engines": { 336 | "node": ">=14.13.0" 337 | } 338 | }, 339 | "node_modules/peek-readable": { 340 | "version": "5.0.0", 341 | "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", 342 | "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==", 343 | "engines": { 344 | "node": ">=14.16" 345 | }, 346 | "funding": { 347 | "type": "github", 348 | "url": "https://github.com/sponsors/Borewit" 349 | } 350 | }, 351 | "node_modules/readable-stream": { 352 | "version": "3.6.0", 353 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 354 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 355 | "dependencies": { 356 | "inherits": "^2.0.3", 357 | "string_decoder": "^1.1.1", 358 | "util-deprecate": "^1.0.1" 359 | }, 360 | "engines": { 361 | "node": ">= 6" 362 | } 363 | }, 364 | "node_modules/readable-web-to-node-stream": { 365 | "version": "3.0.2", 366 | "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", 367 | "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", 368 | "dependencies": { 369 | "readable-stream": "^3.6.0" 370 | }, 371 | "engines": { 372 | "node": ">=8" 373 | }, 374 | "funding": { 375 | "type": "github", 376 | "url": "https://github.com/sponsors/Borewit" 377 | } 378 | }, 379 | "node_modules/safe-buffer": { 380 | "version": "5.2.1", 381 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 382 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 383 | "funding": [ 384 | { 385 | "type": "github", 386 | "url": "https://github.com/sponsors/feross" 387 | }, 388 | { 389 | "type": "patreon", 390 | "url": "https://www.patreon.com/feross" 391 | }, 392 | { 393 | "type": "consulting", 394 | "url": "https://feross.org/support" 395 | } 396 | ] 397 | }, 398 | "node_modules/sprintf-kit": { 399 | "version": "2.0.1", 400 | "resolved": "https://registry.npmjs.org/sprintf-kit/-/sprintf-kit-2.0.1.tgz", 401 | "integrity": "sha512-2PNlcs3j5JflQKcg4wpdqpZ+AjhQJ2OZEo34NXDtlB0tIPG84xaaXhpA8XFacFiwjKA4m49UOYG83y3hbMn/gQ==", 402 | "dependencies": { 403 | "es5-ext": "^0.10.53" 404 | } 405 | }, 406 | "node_modules/streamsearch": { 407 | "version": "1.1.0", 408 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", 409 | "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", 410 | "engines": { 411 | "node": ">=10.0.0" 412 | } 413 | }, 414 | "node_modules/string_decoder": { 415 | "version": "1.3.0", 416 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 417 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 418 | "dependencies": { 419 | "safe-buffer": "~5.2.0" 420 | } 421 | }, 422 | "node_modules/strtok3": { 423 | "version": "7.0.0", 424 | "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", 425 | "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", 426 | "dependencies": { 427 | "@tokenizer/token": "^0.3.0", 428 | "peek-readable": "^5.0.0" 429 | }, 430 | "engines": { 431 | "node": ">=14.16" 432 | }, 433 | "funding": { 434 | "type": "github", 435 | "url": "https://github.com/sponsors/Borewit" 436 | } 437 | }, 438 | "node_modules/token-types": { 439 | "version": "5.0.1", 440 | "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", 441 | "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", 442 | "dependencies": { 443 | "@tokenizer/token": "^0.3.0", 444 | "ieee754": "^1.2.1" 445 | }, 446 | "engines": { 447 | "node": ">=14.16" 448 | }, 449 | "funding": { 450 | "type": "github", 451 | "url": "https://github.com/sponsors/Borewit" 452 | } 453 | }, 454 | "node_modules/tr46": { 455 | "version": "0.0.3", 456 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 457 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 458 | }, 459 | "node_modules/ts-mixer": { 460 | "version": "6.0.2", 461 | "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.2.tgz", 462 | "integrity": "sha512-zvHx3VM83m2WYCE8XL99uaM7mFwYSkjR2OZti98fabHrwkjsCvgwChda5xctein3xGOyaQhtTeDq/1H/GNvF3A==" 463 | }, 464 | "node_modules/tslib": { 465 | "version": "2.5.0", 466 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", 467 | "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" 468 | }, 469 | "node_modules/type": { 470 | "version": "2.7.2", 471 | "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", 472 | "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" 473 | }, 474 | "node_modules/undici": { 475 | "version": "5.16.0", 476 | "resolved": "https://registry.npmjs.org/undici/-/undici-5.16.0.tgz", 477 | "integrity": "sha512-KWBOXNv6VX+oJQhchXieUznEmnJMqgXMbs0xxH2t8q/FUAWSJvOSr/rMaZKnX5RIVq7JDn0JbP4BOnKG2SGXLQ==", 478 | "dependencies": { 479 | "busboy": "^1.6.0" 480 | }, 481 | "engines": { 482 | "node": ">=12.18" 483 | } 484 | }, 485 | "node_modules/uni-global": { 486 | "version": "1.0.0", 487 | "resolved": "https://registry.npmjs.org/uni-global/-/uni-global-1.0.0.tgz", 488 | "integrity": "sha512-WWM3HP+siTxzIWPNUg7hZ4XO8clKi6NoCAJJWnuRL+BAqyFXF8gC03WNyTefGoUXYc47uYgXxpKLIEvo65PEHw==", 489 | "dependencies": { 490 | "type": "^2.5.0" 491 | } 492 | }, 493 | "node_modules/util-deprecate": { 494 | "version": "1.0.2", 495 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 496 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 497 | }, 498 | "node_modules/webidl-conversions": { 499 | "version": "3.0.1", 500 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 501 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 502 | }, 503 | "node_modules/whatwg-url": { 504 | "version": "5.0.0", 505 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 506 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 507 | "dependencies": { 508 | "tr46": "~0.0.3", 509 | "webidl-conversions": "^3.0.0" 510 | } 511 | }, 512 | "node_modules/ws": { 513 | "version": "8.12.0", 514 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz", 515 | "integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==", 516 | "engines": { 517 | "node": ">=10.0.0" 518 | }, 519 | "peerDependencies": { 520 | "bufferutil": "^4.0.1", 521 | "utf-8-validate": ">=5.0.2" 522 | }, 523 | "peerDependenciesMeta": { 524 | "bufferutil": { 525 | "optional": true 526 | }, 527 | "utf-8-validate": { 528 | "optional": true 529 | } 530 | } 531 | } 532 | }, 533 | "dependencies": { 534 | "@discordjs/builders": { 535 | "version": "1.4.0", 536 | "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.4.0.tgz", 537 | "integrity": "sha512-nEeTCheTTDw5kO93faM1j8ZJPonAX86qpq/QVoznnSa8WWcCgJpjlu6GylfINTDW6o7zZY0my2SYdxx2mfNwGA==", 538 | "requires": { 539 | "@discordjs/util": "^0.1.0", 540 | "@sapphire/shapeshift": "^3.7.1", 541 | "discord-api-types": "^0.37.20", 542 | "fast-deep-equal": "^3.1.3", 543 | "ts-mixer": "^6.0.2", 544 | "tslib": "^2.4.1" 545 | } 546 | }, 547 | "@discordjs/collection": { 548 | "version": "1.3.0", 549 | "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.3.0.tgz", 550 | "integrity": "sha512-ylt2NyZ77bJbRij4h9u/wVy7qYw/aDqQLWnadjvDqW/WoWCxrsX6M3CIw9GVP5xcGCDxsrKj5e0r5evuFYwrKg==" 551 | }, 552 | "@discordjs/rest": { 553 | "version": "1.5.0", 554 | "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-1.5.0.tgz", 555 | "integrity": "sha512-lXgNFqHnbmzp5u81W0+frdXN6Etf4EUi8FAPcWpSykKd8hmlWh1xy6BmE0bsJypU1pxohaA8lQCgp70NUI3uzA==", 556 | "requires": { 557 | "@discordjs/collection": "^1.3.0", 558 | "@discordjs/util": "^0.1.0", 559 | "@sapphire/async-queue": "^1.5.0", 560 | "@sapphire/snowflake": "^3.2.2", 561 | "discord-api-types": "^0.37.23", 562 | "file-type": "^18.0.0", 563 | "tslib": "^2.4.1", 564 | "undici": "^5.13.0" 565 | } 566 | }, 567 | "@discordjs/util": { 568 | "version": "0.1.0", 569 | "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-0.1.0.tgz", 570 | "integrity": "sha512-e7d+PaTLVQav6rOc2tojh2y6FE8S7REkqLldq1XF4soCx74XB/DIjbVbVLtBemf0nLW77ntz0v+o5DytKwFNLQ==" 571 | }, 572 | "@sapphire/async-queue": { 573 | "version": "1.5.0", 574 | "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", 575 | "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==" 576 | }, 577 | "@sapphire/shapeshift": { 578 | "version": "3.8.1", 579 | "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.8.1.tgz", 580 | "integrity": "sha512-xG1oXXBhCjPKbxrRTlox9ddaZTvVpOhYLmKmApD/vIWOV1xEYXnpoFs68zHIZBGbqztq6FrUPNPerIrO1Hqeaw==", 581 | "requires": { 582 | "fast-deep-equal": "^3.1.3", 583 | "lodash": "^4.17.21" 584 | } 585 | }, 586 | "@sapphire/snowflake": { 587 | "version": "3.4.0", 588 | "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.4.0.tgz", 589 | "integrity": "sha512-zZxymtVO6zeXVMPds+6d7gv/OfnCc25M1Z+7ZLB0oPmeMTPeRWVPQSS16oDJy5ZsyCOLj7M6mbZml5gWXcVRNw==" 590 | }, 591 | "@tokenizer/token": { 592 | "version": "0.3.0", 593 | "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", 594 | "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" 595 | }, 596 | "@types/node": { 597 | "version": "18.11.18", 598 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", 599 | "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" 600 | }, 601 | "@types/ws": { 602 | "version": "8.5.4", 603 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", 604 | "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", 605 | "requires": { 606 | "@types/node": "*" 607 | } 608 | }, 609 | "busboy": { 610 | "version": "1.6.0", 611 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", 612 | "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", 613 | "requires": { 614 | "streamsearch": "^1.1.0" 615 | } 616 | }, 617 | "d": { 618 | "version": "1.0.1", 619 | "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", 620 | "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", 621 | "requires": { 622 | "es5-ext": "^0.10.50", 623 | "type": "^1.0.1" 624 | }, 625 | "dependencies": { 626 | "type": { 627 | "version": "1.2.0", 628 | "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", 629 | "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" 630 | } 631 | } 632 | }, 633 | "discord-api-types": { 634 | "version": "0.37.30", 635 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.30.tgz", 636 | "integrity": "sha512-TzNF28zWV63clYW1+rbKT2+2qSI+lw/aNG3lyP2fIj5NioGPz4C+bCSvwhP3Ly3uLwL7v8FxIiu8XKGDsvuwWA==" 637 | }, 638 | "discord.js": { 639 | "version": "14.7.1", 640 | "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.7.1.tgz", 641 | "integrity": "sha512-1FECvqJJjjeYcjSm0IGMnPxLqja/pmG1B0W2l3lUY2Gi4KXiyTeQmU1IxWcbXHn2k+ytP587mMWqva2IA87EbA==", 642 | "requires": { 643 | "@discordjs/builders": "^1.4.0", 644 | "@discordjs/collection": "^1.3.0", 645 | "@discordjs/rest": "^1.4.0", 646 | "@discordjs/util": "^0.1.0", 647 | "@sapphire/snowflake": "^3.2.2", 648 | "@types/ws": "^8.5.3", 649 | "discord-api-types": "^0.37.20", 650 | "fast-deep-equal": "^3.1.3", 651 | "lodash.snakecase": "^4.1.1", 652 | "tslib": "^2.4.1", 653 | "undici": "^5.13.0", 654 | "ws": "^8.11.0" 655 | } 656 | }, 657 | "duration": { 658 | "version": "0.2.2", 659 | "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.2.tgz", 660 | "integrity": "sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg==", 661 | "requires": { 662 | "d": "1", 663 | "es5-ext": "~0.10.46" 664 | } 665 | }, 666 | "es5-ext": { 667 | "version": "0.10.62", 668 | "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", 669 | "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", 670 | "requires": { 671 | "es6-iterator": "^2.0.3", 672 | "es6-symbol": "^3.1.3", 673 | "next-tick": "^1.1.0" 674 | } 675 | }, 676 | "es6-iterator": { 677 | "version": "2.0.3", 678 | "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", 679 | "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", 680 | "requires": { 681 | "d": "1", 682 | "es5-ext": "^0.10.35", 683 | "es6-symbol": "^3.1.1" 684 | } 685 | }, 686 | "es6-symbol": { 687 | "version": "3.1.3", 688 | "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", 689 | "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", 690 | "requires": { 691 | "d": "^1.0.1", 692 | "ext": "^1.1.2" 693 | } 694 | }, 695 | "event-emitter": { 696 | "version": "0.3.5", 697 | "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", 698 | "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", 699 | "requires": { 700 | "d": "1", 701 | "es5-ext": "~0.10.14" 702 | } 703 | }, 704 | "ext": { 705 | "version": "1.7.0", 706 | "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", 707 | "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", 708 | "requires": { 709 | "type": "^2.7.2" 710 | } 711 | }, 712 | "fast-deep-equal": { 713 | "version": "3.1.3", 714 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 715 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 716 | }, 717 | "file-type": { 718 | "version": "18.2.0", 719 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.2.0.tgz", 720 | "integrity": "sha512-M3RQMWY3F2ykyWZ+IHwNCjpnUmukYhtdkGGC1ZVEUb0ve5REGF7NNJ4Q9ehCUabtQKtSVFOMbFTXgJlFb0DQIg==", 721 | "requires": { 722 | "readable-web-to-node-stream": "^3.0.2", 723 | "strtok3": "^7.0.0", 724 | "token-types": "^5.0.1" 725 | } 726 | }, 727 | "ieee754": { 728 | "version": "1.2.1", 729 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 730 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" 731 | }, 732 | "inherits": { 733 | "version": "2.0.4", 734 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 735 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 736 | }, 737 | "lodash": { 738 | "version": "4.17.21", 739 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 740 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 741 | }, 742 | "lodash.snakecase": { 743 | "version": "4.1.1", 744 | "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", 745 | "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" 746 | }, 747 | "log": { 748 | "version": "6.3.1", 749 | "resolved": "https://registry.npmjs.org/log/-/log-6.3.1.tgz", 750 | "integrity": "sha512-McG47rJEWOkXTDioZzQNydAVvZNeEkSyLJ1VWkFwfW+o1knW+QSi8D1KjPn/TnctV+q99lkvJNe1f0E1IjfY2A==", 751 | "requires": { 752 | "d": "^1.0.1", 753 | "duration": "^0.2.2", 754 | "es5-ext": "^0.10.53", 755 | "event-emitter": "^0.3.5", 756 | "sprintf-kit": "^2.0.1", 757 | "type": "^2.5.0", 758 | "uni-global": "^1.0.0" 759 | } 760 | }, 761 | "midjourney-client": { 762 | "version": "git+ssh://git@github.com/oelin/midjourney-client.git#a183bc0f3df2deb72741fd5876abb0ff4c94a03e", 763 | "from": "midjourney-client@github:oelin/midjourney-client", 764 | "requires": { 765 | "node-fetch-cookies": "^2.0.4" 766 | } 767 | }, 768 | "next-tick": { 769 | "version": "1.1.0", 770 | "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", 771 | "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" 772 | }, 773 | "node-fetch": { 774 | "version": "2.6.8", 775 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.8.tgz", 776 | "integrity": "sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==", 777 | "requires": { 778 | "whatwg-url": "^5.0.0" 779 | } 780 | }, 781 | "node-fetch-cookies": { 782 | "version": "2.0.4", 783 | "resolved": "https://registry.npmjs.org/node-fetch-cookies/-/node-fetch-cookies-2.0.4.tgz", 784 | "integrity": "sha512-mRQv1l6gBHlBKwPIYy/n9HksnchXJUV/+7Wbt7fkqI95YvgFK88kRkncBuQcvQbrsEMwfd44f81slwDyN5FoDQ==", 785 | "requires": { 786 | "node-fetch": "^2.6.7" 787 | } 788 | }, 789 | "peek-readable": { 790 | "version": "5.0.0", 791 | "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", 792 | "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==" 793 | }, 794 | "readable-stream": { 795 | "version": "3.6.0", 796 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 797 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 798 | "requires": { 799 | "inherits": "^2.0.3", 800 | "string_decoder": "^1.1.1", 801 | "util-deprecate": "^1.0.1" 802 | } 803 | }, 804 | "readable-web-to-node-stream": { 805 | "version": "3.0.2", 806 | "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", 807 | "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", 808 | "requires": { 809 | "readable-stream": "^3.6.0" 810 | } 811 | }, 812 | "safe-buffer": { 813 | "version": "5.2.1", 814 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 815 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 816 | }, 817 | "sprintf-kit": { 818 | "version": "2.0.1", 819 | "resolved": "https://registry.npmjs.org/sprintf-kit/-/sprintf-kit-2.0.1.tgz", 820 | "integrity": "sha512-2PNlcs3j5JflQKcg4wpdqpZ+AjhQJ2OZEo34NXDtlB0tIPG84xaaXhpA8XFacFiwjKA4m49UOYG83y3hbMn/gQ==", 821 | "requires": { 822 | "es5-ext": "^0.10.53" 823 | } 824 | }, 825 | "streamsearch": { 826 | "version": "1.1.0", 827 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", 828 | "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" 829 | }, 830 | "string_decoder": { 831 | "version": "1.3.0", 832 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 833 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 834 | "requires": { 835 | "safe-buffer": "~5.2.0" 836 | } 837 | }, 838 | "strtok3": { 839 | "version": "7.0.0", 840 | "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", 841 | "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", 842 | "requires": { 843 | "@tokenizer/token": "^0.3.0", 844 | "peek-readable": "^5.0.0" 845 | } 846 | }, 847 | "token-types": { 848 | "version": "5.0.1", 849 | "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", 850 | "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", 851 | "requires": { 852 | "@tokenizer/token": "^0.3.0", 853 | "ieee754": "^1.2.1" 854 | } 855 | }, 856 | "tr46": { 857 | "version": "0.0.3", 858 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 859 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 860 | }, 861 | "ts-mixer": { 862 | "version": "6.0.2", 863 | "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.2.tgz", 864 | "integrity": "sha512-zvHx3VM83m2WYCE8XL99uaM7mFwYSkjR2OZti98fabHrwkjsCvgwChda5xctein3xGOyaQhtTeDq/1H/GNvF3A==" 865 | }, 866 | "tslib": { 867 | "version": "2.5.0", 868 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", 869 | "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" 870 | }, 871 | "type": { 872 | "version": "2.7.2", 873 | "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", 874 | "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" 875 | }, 876 | "undici": { 877 | "version": "5.16.0", 878 | "resolved": "https://registry.npmjs.org/undici/-/undici-5.16.0.tgz", 879 | "integrity": "sha512-KWBOXNv6VX+oJQhchXieUznEmnJMqgXMbs0xxH2t8q/FUAWSJvOSr/rMaZKnX5RIVq7JDn0JbP4BOnKG2SGXLQ==", 880 | "requires": { 881 | "busboy": "^1.6.0" 882 | } 883 | }, 884 | "uni-global": { 885 | "version": "1.0.0", 886 | "resolved": "https://registry.npmjs.org/uni-global/-/uni-global-1.0.0.tgz", 887 | "integrity": "sha512-WWM3HP+siTxzIWPNUg7hZ4XO8clKi6NoCAJJWnuRL+BAqyFXF8gC03WNyTefGoUXYc47uYgXxpKLIEvo65PEHw==", 888 | "requires": { 889 | "type": "^2.5.0" 890 | } 891 | }, 892 | "util-deprecate": { 893 | "version": "1.0.2", 894 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 895 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 896 | }, 897 | "webidl-conversions": { 898 | "version": "3.0.1", 899 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 900 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 901 | }, 902 | "whatwg-url": { 903 | "version": "5.0.0", 904 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 905 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 906 | "requires": { 907 | "tr46": "~0.0.3", 908 | "webidl-conversions": "^3.0.0" 909 | } 910 | }, 911 | "ws": { 912 | "version": "8.12.0", 913 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz", 914 | "integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==", 915 | "requires": {} 916 | } 917 | } 918 | } 919 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "midjourney-bot", 3 | "version": "1.0.1", 4 | "description": "A Discord bot for all your Midjourney needs!", 5 | "main": "index.js", 6 | "scripts": { 7 | "deploy": "node deploy-commands.js", 8 | "start": "node ." 9 | }, 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "discord.js": "^14.7.1", 14 | "log": "^6.3.1", 15 | "midjourney-client": "^1.0.5" 16 | } 17 | } 18 | --------------------------------------------------------------------------------