├── .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 |
--------------------------------------------------------------------------------