Class: MijDiscord::Cache::BotCache

Inherits:
Object
  • Object
show all
Defined in:
lib/mij-discord/cache.rb

Instance Method Summary collapse

Constructor Details

#initialize(bot) ⇒ BotCache

Returns a new instance of BotCache.



5
6
7
8
9
# File 'lib/mij-discord/cache.rb', line 5

def initialize(bot)
  @bot = bot

  reset
end

Instance Method Details

#get_channel(key, server, local: false) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/mij-discord/cache.rb', line 42

def get_channel(key, server, local: false)
  id = key&.to_id || return
  return @channels[id] if @channels.has_key?(id)
  raise MijDiscord::Errors::Forbidden if @restricted_channels[id]
  return nil if local

  begin
    response = MijDiscord::Core::API::Channel.resolve(@bot.auth, id)
  rescue MijDiscord::Errors::NotFound
    return nil
  rescue MijDiscord::Errors::Forbidden
    @restricted_channels[id] = true
    raise
  end

  channel = @channels[id] = MijDiscord::Data::Channel.create(JSON.parse(response), @bot, server)
  @pm_channels[channel.recipient.id] = channel if channel.pm?

  if (server = channel.server)
    server.cache.put_channel!(channel)
  end

  channel
end

#get_pm_channel(key, local: false) ⇒ Object



67
68
69
70
71
72
73
74
75
76
# File 'lib/mij-discord/cache.rb', line 67

def get_pm_channel(key, local: false)
  id = key&.to_id || return
  return @pm_channels[id] if @pm_channels.has_key?(id)
  return nil if local

  response = MijDiscord::Core::API::User.create_pm(@bot.auth, id)
  channel = MijDiscord::Data::Channel.create(JSON.parse(response), @bot, nil)

  @channels[channel.id] = @pm_channels[id] = channel
end

#get_server(key, local: false) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/mij-discord/cache.rb', line 28

def get_server(key, local: false)
  id = key&.to_id || return
  return @servers[id] if @servers.has_key?(id)
  return nil if local

  begin
    response = MijDiscord::Core::API::Server.resolve(@bot.auth, id)
  rescue MijDiscord::Errors::NotFound
    return nil
  end

  @servers[id] = MijDiscord::Data::Server.new(JSON.parse(response), @bot)
end

#get_user(key, local: false) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/mij-discord/cache.rb', line 78

def get_user(key, local: false)
  id = key&.to_id || return
  return @users[id] if @users.has_key?(id)
  return nil if local

  begin
    response = case @bot.auth.type
      when :bot then MijDiscord::Core::API::User.resolve(@bot.auth, id)
      when :user then MijDiscord::Core::API::User.resolve2(@bot.auth, id)
    end
  rescue MijDiscord::Errors::NotFound
    return nil
  end

  @users[id] = MijDiscord::Data::User.new(JSON.parse(response), @bot)
end

#inspectObject



151
152
153
# File 'lib/mij-discord/cache.rb', line 151

def inspect
  MijDiscord.make_inspect(self)
end

#list_channelsObject



20
21
22
# File 'lib/mij-discord/cache.rb', line 20

def list_channels
  @channels.values
end

#list_serversObject



16
17
18
# File 'lib/mij-discord/cache.rb', line 16

def list_servers
  @servers.values
end

#list_usersObject



24
25
26
# File 'lib/mij-discord/cache.rb', line 24

def list_users
  @users.values
end

#put_channel(data, server, update: false) ⇒ Object



105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/mij-discord/cache.rb', line 105

def put_channel(data, server, update: false)
  id = data['id'].to_i
  if @channels.has_key?(id)
    @channels[id].update_data(data) if update
    return @channels[id]
  end

  channel = @channels[id] = MijDiscord::Data::Channel.create(data, @bot, server)
  @pm_channels[channel.recipient.id] = channel if channel.pm?

  if (server = channel.server)
    server.cache.put_channel!(channel)
  end

  channel
end

#put_server(data, update: false) ⇒ Object



95
96
97
98
99
100
101
102
103
# File 'lib/mij-discord/cache.rb', line 95

def put_server(data, update: false)
  id = data['id'].to_i
  if @servers.has_key?(id)
    @servers[id].update_data(data) if update
    return @servers[id]
  end

  @servers[id] = MijDiscord::Data::Server.new(data, @bot)
end

#put_user(data, update: false) ⇒ Object



122
123
124
125
126
127
128
129
130
# File 'lib/mij-discord/cache.rb', line 122

def put_user(data, update: false)
  id = data['id'].to_i
  if @users.has_key?(id)
    @users[id].update_data(data) if update
    return @users[id]
  end

  @users[id] = MijDiscord::Data::User.new(data, @bot)
end

#remove_channel(key) ⇒ Object



136
137
138
139
140
141
142
143
144
145
# File 'lib/mij-discord/cache.rb', line 136

def remove_channel(key)
  channel = @channels.delete(key&.to_id)
  @pm_channels.delete(channel.recipient.id) if channel&.pm?

  if (server = channel&.server)
    server.cache.remove_channel(key)
  end

  channel
end

#remove_server(key) ⇒ Object



132
133
134
# File 'lib/mij-discord/cache.rb', line 132

def remove_server(key)
  @servers.delete(key&.to_id)
end

#remove_user(key) ⇒ Object



147
148
149
# File 'lib/mij-discord/cache.rb', line 147

def remove_user(key)
  @users.delete(key&.to_id)
end

#resetObject



11
12
13
14
# File 'lib/mij-discord/cache.rb', line 11

def reset
  @servers, @channels, @users = {}, {}, {}
  @pm_channels, @restricted_channels = {}, {}
end