Class: MijDiscord::Cache::ChannelCache

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

Constant Summary collapse

MAX_MESSAGES =
200

Instance Method Summary collapse

Constructor Details

#initialize(channel, bot, max_messages: MAX_MESSAGES) ⇒ ChannelCache

Returns a new instance of ChannelCache.



264
265
266
267
268
269
# File 'lib/mij-discord/cache.rb', line 264

def initialize(channel, bot, max_messages: MAX_MESSAGES)
  @channel, @bot = channel, bot
  @max_messages = max_messages

  reset
end

Instance Method Details

#get_message(key, local: false) ⇒ Object



275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
# File 'lib/mij-discord/cache.rb', line 275

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

  begin
    response = case @bot.auth.type
      when :bot then MijDiscord::Core::API::Channel.message(@bot.auth, @channel.id, key)
      when :user then MijDiscord::Core::API::Channel.messages(@bot.auth, @channel.id, 1, nil, nil, key)
    end
  rescue MijDiscord::Errors::NotFound
    return nil
  end

  message = @messages.store(id, MijDiscord::Data::Message.new(JSON.parse(response), @bot))
  @messages.shift while @messages.length > @max_messages

  message
end

#inspectObject



312
313
314
# File 'lib/mij-discord/cache.rb', line 312

def inspect
  MijDiscord.make_inspect(self)
end

#put_message(data, update: false) ⇒ Object



295
296
297
298
299
300
301
302
303
304
305
306
# File 'lib/mij-discord/cache.rb', line 295

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

  message = @messages.store(id, MijDiscord::Data::Message.new(data, @bot))
  @messages.shift while @messages.length > @max_messages

  message
end

#remove_message(key) ⇒ Object



308
309
310
# File 'lib/mij-discord/cache.rb', line 308

def remove_message(key)
  @messages.delete(key&.to_id)
end

#resetObject



271
272
273
# File 'lib/mij-discord/cache.rb', line 271

def reset
  @messages = {}
end