Module: Brainiac::Plugins::Discord::Config

Defined in:
lib/brainiac/plugins/discord/config.rb

Overview

Discord configuration — loads ~/.brainiac/discord.json. Provides channel mappings, authorization, user mappings, and project routing.

Constant Summary collapse

DISCORD_CONFIG_FILE =
File.join(
  ENV.fetch("BRAINIAC_DIR", File.join(Dir.home, ".brainiac")),
  "discord.json"
)
DISCORD_THREAD_MAP_FILE =
File.join(
  ENV.fetch("BRAINIAC_DIR", File.join(Dir.home, ".brainiac")),
  "discord_thread_map.json"
)

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.configObject (readonly)

Returns the value of attribute config.



23
24
25
# File 'lib/brainiac/plugins/discord/config.rb', line 23

def config
  @config
end

.thread_map_mutexObject (readonly)

Returns the value of attribute thread_map_mutex.



23
24
25
# File 'lib/brainiac/plugins/discord/config.rb', line 23

def thread_map_mutex
  @thread_map_mutex
end

Class Method Details

.authorized_role_idsObject



68
69
70
71
72
73
74
75
76
# File 'lib/brainiac/plugins/discord/config.rb', line 68

def authorized_role_ids
  if @config["role_mappings"]
    @config["role_mappings"].values
  elsif @config["authorized_role_ids"].is_a?(Hash)
    @config["authorized_role_ids"].values
  else
    @config["authorized_role_ids"] || []
  end.map(&:to_s)
end

.authorized_user_idsObject



78
79
80
# File 'lib/brainiac/plugins/discord/config.rb', line 78

def authorized_user_ids
  @config["authorized_user_ids"] || []
end

.channel_mappingsObject



60
61
62
# File 'lib/brainiac/plugins/discord/config.rb', line 60

def channel_mappings
  @config["channel_mappings"] || {}
end

.currentObject



40
41
42
# File 'lib/brainiac/plugins/discord/config.rb', line 40

def current
  @config
end

.dashboard_tokenObject



52
53
54
# File 'lib/brainiac/plugins/discord/config.rb', line 52

def dashboard_token
  @config["dashboard_token"]
end

.default_projectObject



44
45
46
# File 'lib/brainiac/plugins/discord/config.rb', line 44

def default_project
  @config["default_project"]
end

.find_project_for_channel(channel_id) ⇒ Object

Find the project for a given Discord channel. Returns [project_key, project_config, mapping] or nil.



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/brainiac/plugins/discord/config.rb', line 84

def find_project_for_channel(channel_id)
  mapping = channel_mappings[channel_id]

  unless mapping
    default = default_project
    mapping = { "project" => default } if default
  end

  return nil unless mapping

  project_key = mapping["project"]
  project_config = PROJECTS[project_key]
  return nil unless project_config

  [project_key, project_config, mapping]
end

.giphy_api_keyObject



56
57
58
# File 'lib/brainiac/plugins/discord/config.rb', line 56

def giphy_api_key
  @config["giphy_api_key"]
end

.load!Object



25
26
27
28
29
30
31
32
33
34
# File 'lib/brainiac/plugins/discord/config.rb', line 25

def load!
  @config = if File.exist?(DISCORD_CONFIG_FILE)
              JSON.parse(File.read(DISCORD_CONFIG_FILE))
            else
              { "channel_mappings" => {}, "authorized_role_ids" => [], "authorized_user_ids" => [] }
            end
rescue JSON::ParserError => e
  LOG.error "[Discord] Failed to parse discord.json: #{e.message}" if defined?(LOG)
  @config = { "channel_mappings" => {}, "authorized_role_ids" => [], "authorized_user_ids" => [] }
end

.load_thread_mapObject

--- Thread Map Persistence ---



103
104
105
106
107
108
109
# File 'lib/brainiac/plugins/discord/config.rb', line 103

def load_thread_map
  return {} unless File.exist?(DISCORD_THREAD_MAP_FILE)

  JSON.parse(File.read(DISCORD_THREAD_MAP_FILE))
rescue JSON::ParserError
  {}
end

.owner_discord_idObject



48
49
50
# File 'lib/brainiac/plugins/discord/config.rb', line 48

def owner_discord_id
  @config["owner_discord_id"]
end

.reload!Object



36
37
38
# File 'lib/brainiac/plugins/discord/config.rb', line 36

def reload!
  load!
end

.save_thread_map(map) ⇒ Object



111
112
113
# File 'lib/brainiac/plugins/discord/config.rb', line 111

def save_thread_map(map)
  File.write(DISCORD_THREAD_MAP_FILE, JSON.pretty_generate(map))
end

.user_mappingsObject



64
65
66
# File 'lib/brainiac/plugins/discord/config.rb', line 64

def user_mappings
  @config["user_mappings"] || {}
end