midjourney-ruby 0.1.21 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5c143a32dfee3e9931bcc253a14c6bdc96c50d3fb771dc5ea6d47a874b9c2ec3
4
- data.tar.gz: 30945aa298dd6535b0edc64c368936d994e5014ed017fc7d255e84a923d1c15a
3
+ metadata.gz: 2e648fd2e9826785943bab6a582fca4da21ae4358bf76cd80554b84f25e6df23
4
+ data.tar.gz: 2e3c6ad1067d655703e40e0b30b2a73c30e0812d9408f4303275253b8a62c68d
5
5
  SHA512:
6
- metadata.gz: ac86d34aa8426971743b930778b15d6d7ff00753edf987ae7ad63593d9c1cf0a3ec7dd22a174ac054a61fc8772e3438e63b66d07f2b7e1386544bf6df129ae9d
7
- data.tar.gz: d7dbeecd569dcf14b7b578357eccaf0070b43bebd2db3c1feb780eb99c93372012a8d0b40df33a6224c84edc44c662c8eedb9d94fc9fcd853d31c7ae5547d821
6
+ metadata.gz: 487bb6c38f6ed7dc77ad490d02720b2f24d60129bc3c644a4cad178e285c12269e7fc212dac12ad6e5f9b553e0ba8fd6e99bd8b823e94df00d483c0ceb056fb7
7
+ data.tar.gz: 2819dadc88926ab1aad5d30bfbd331bd65fb0258103768d1dbf8f436865df0d993b94d005b43bf71c6ea7b6746a4e0ecf37ca301902ccc4168aab5f9d157a438
@@ -0,0 +1,107 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Midjourney
4
+ module API
5
+ #
6
+ # Discord API Gateway using RestClient
7
+ #
8
+ class Gateway
9
+ BASE_URL = 'https://discord.com/api/v9'
10
+
11
+ attr_reader :token, :channel_id
12
+
13
+ def initialize(token:, channel_id:)
14
+ @token = token
15
+ @channel_id = channel_id
16
+ end
17
+
18
+ def read_messages(limit = 50)
19
+ get_request("#{BASE_URL}/channels/#{channel_id}/messages?limit=#{limit}")
20
+ end
21
+
22
+ def send_message(message)
23
+ post_request("#{BASE_URL}/channels/#{channel_id}/messages", message_payload(message))
24
+ end
25
+
26
+ def send_imagine(prompt)
27
+ post_request("#{BASE_URL}/interactions", imagine_payload(prompt))
28
+ end
29
+
30
+ private
31
+
32
+ def get_request(url)
33
+ JSON.parse RestClient.get(url, headers).body
34
+ rescue RestClient::ExceptionWithResponse => e
35
+ puts "Error sending message: #{e.response.body}"
36
+ end
37
+
38
+ def post_request(url, payload)
39
+ RestClient.post(url, payload, headers)
40
+ rescue RestClient::ExceptionWithResponse => e
41
+ puts "Error sending message: #{e.response.body}"
42
+ end
43
+
44
+ def imagine_payload(prompt) # rubocop:disable Metrics/MethodLength
45
+ {
46
+ type: 2,
47
+ application_id: '936929561302675456',
48
+ guild_id: '1158081328068165704',
49
+ channel_id: channel_id,
50
+ session_id: '939307d50a643c3d8cfcf4e756063e3b',
51
+ data: {
52
+ version: '1118961510123847772',
53
+ id: '938956540159881230',
54
+ name: 'imagine',
55
+ type: 1,
56
+ options: [
57
+ {
58
+ type: 3,
59
+ name: 'prompt',
60
+ value: prompt
61
+ }
62
+ ],
63
+ application_command: {
64
+ id: '938956540159881230',
65
+ application_id: '936929561302675456',
66
+ version: '1118961510123847772',
67
+ default_member_permissions: nil,
68
+ type: 1,
69
+ nsfw: false,
70
+ name: 'imagine',
71
+ description: 'Create images with Midjourney',
72
+ dm_permission: true,
73
+ contexts: [0, 1, 2],
74
+ integration_types: [0],
75
+ options: [
76
+ {
77
+ type: 3,
78
+ name: 'prompt',
79
+ description: 'The prompt to imagine',
80
+ required: true
81
+ }
82
+ ]
83
+ },
84
+ attachments: []
85
+ }
86
+ }.to_json
87
+ end
88
+
89
+ def message_payload(message)
90
+ {
91
+ content: message,
92
+ flags: 0,
93
+ mobile_network_type: 'unknown',
94
+ tts: false
95
+ }.to_json
96
+ end
97
+
98
+ def headers
99
+ @headers ||= {
100
+ 'Authorization' => token,
101
+ 'Accept' => 'application/json',
102
+ 'Content-Type' => 'application/json'
103
+ }
104
+ end
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Midjourney
4
+ module API
5
+ #
6
+ # Midjourney Imagine Module
7
+ #
8
+ module Imagine
9
+ def imagine(prompt)
10
+ api.send_imagine(prompt)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Midjourney
4
+ module API
5
+ #
6
+ # Midjourney Read Messages Module
7
+ #
8
+ module Messages
9
+ def read_messages(limit = 50)
10
+ api.read_messages(limit)
11
+ end
12
+
13
+ def send_message(message)
14
+ api.send_message(message)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,9 +1,13 @@
1
1
  module Midjourney
2
+ #
3
+ # This class is used to store the configuration of the gem.
4
+ #
2
5
  class Configuration
3
- attr_accessor :api_key
6
+ attr_accessor :discord_user_token, :discord_channel_id
4
7
 
5
8
  def initialize
6
- @api_key = nil
9
+ @discord_user_token = nil
10
+ @discord_channel_id = nil
7
11
  end
8
12
  end
9
13
  end
data/lib/midjourney.rb CHANGED
@@ -1,17 +1,44 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "midjourney/configuration"
3
+ require 'json'
4
+ require 'pry-byebug'
5
+ require 'rainbow'
6
+ require 'rake'
7
+ require 'rest-client'
4
8
 
9
+ require_relative 'midjourney/configuration'
10
+ require_relative 'midjourney/api/gateway'
11
+ require_relative 'midjourney/api/imagine'
12
+ require_relative 'midjourney/api/messages'
13
+
14
+ #
15
+ # Midjourney Ruby Client
16
+ #
5
17
  module Midjourney
6
- VERSION = "0.1.21"
18
+ VERSION = '0.2.0'
7
19
 
8
20
  class Error < StandardError; end
9
21
 
22
+ extend API::Imagine
23
+ extend API::Messages
24
+
10
25
  def self.configuration
11
- @@configuration ||= Configuration.new
26
+ @configuration ||= Configuration.new
12
27
  end
13
28
 
14
29
  def self.config
15
30
  yield(configuration)
16
31
  end
32
+
33
+ def self.api
34
+ @api ||= API::Gateway.new(token: discord_user_token, channel_id: discord_channel_id)
35
+ end
36
+
37
+ def self.discord_user_token
38
+ configuration.discord_user_token
39
+ end
40
+
41
+ def self.discord_channel_id
42
+ configuration.discord_channel_id
43
+ end
17
44
  end
data/lib/tasks/install.rb CHANGED
@@ -1,26 +1,32 @@
1
+ # frozen_string_literal: true
2
+
1
3
  namespace :midjourney do
2
- desc "Install Midjourney Ruby Client"
4
+ desc 'Install Midjourney Ruby Client'
3
5
  task install: :environment do
4
6
  return :ok unless defined?(Rails)
5
7
 
6
8
  initializer_content = <<~RUBY
7
9
  # frozen_string_literal: true
8
10
 
11
+ #
12
+ # Take a look at https://github.com/leom806/midjourney-ruby for more information.
13
+ #
9
14
  Midjourney.config do |config|
10
- # Fetch from an environment variable
11
- config.api_key = ENV["MIDJOURNEY_API_KEY"]
12
- # Or fetch from Rails credentials if you're using Rails 5.2+ and have credentials set up
13
- config.api_key = Rails.application.credentials.midjourney_api_key # or whatever you named your key
15
+ # Fetch from an environment variable or fetch from Rails credentials if
16
+ # you're using Rails 5.2+ and have credentials set up.
17
+
18
+ config.discord_user_token = ENV['DISCORD_USER_TOKEN']
19
+ config.discord_channel_id = ENV['DISCORD_CHANNEL_ID']
14
20
  end
15
21
  RUBY
16
22
 
17
- initializer_path = Rails.root.join("config", "initializers", "midjourney.rb")
23
+ initializer_path = Rails.root.join('config', 'initializers', 'midjourney.rb')
18
24
 
19
25
  if File.exist?(initializer_path)
20
- puts "\n " + Rainbow("Midjourney Ruby").purple + " is already installed! 🎉"
26
+ puts "\n #{Rainbow('Midjourney Ruby').purple} is already installed."
21
27
  else
22
- File.open(initializer_path, "w") { |f| f.write(initializer_content) }
23
- puts "\n " + Rainbow("Midjourney Ruby").purple + " has been installed! 🎉"
28
+ File.open(initializer_path, 'w') { |f| f.write(initializer_content) }
29
+ puts "\n #{Rainbow('Midjourney Ruby').purple} has been installed! 🎉"
24
30
  end
25
31
  end
26
32
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: midjourney-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.21
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leonardo Momente
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-29 00:00:00.000000000 Z
11
+ date: 2023-10-01 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: This is a Ruby client for Midjourney that allows you to use its main
14
14
  products via their Discord API.
@@ -19,6 +19,9 @@ extensions: []
19
19
  extra_rdoc_files: []
20
20
  files:
21
21
  - lib/midjourney.rb
22
+ - lib/midjourney/api/gateway.rb
23
+ - lib/midjourney/api/imagine.rb
24
+ - lib/midjourney/api/messages.rb
22
25
  - lib/midjourney/configuration.rb
23
26
  - lib/tasks/install.rb
24
27
  homepage: https://github.com/leom806/midjourney-ruby