Nosedrum.MessageCache.ETS (nosedrum v0.6.0) View Source

An ETS-table based message cache.

This module does not implement any cache expiration: by default, the table fills up infinitely. One possibility of keeping messages under control would be to delete all messages sent before a certain date. Since the key of table entries are message IDs, you can use :ets.select_delete/2 to accomplish this. For example, to delete all messages older than one day, you could use the following construct:

now = DateTime.utc_now()
one_day_ago = DateTime.add(now, -1, :day)
snowflake = Nostrum.Snowflake.from_datetime!(one_day_ago)
match_spec = [{{:"$1", :_, :_, :_, :_}, [{:<, :"$1", snowflake}], [true]}]
:ets.select_delete(:nosedrum_message_cache, match_spec)

For deleting in different ways such as by guild ID, use :ets.fun2ms/1 to generate match specifications from functions.

You can use the GenServer.call(cache_process, :tid) to obtain the internal table ID when not using a named table.

Link to this section Summary

Link to this section Functions

Link to this function

consume(message, table_ref \\ :nosedrum_message_cache)

View Source

See Nosedrum.MessageCache.consume/2. Returns the result of :ets.insert.

Link to this function

start_link(table_name \\ :nosedrum_message_cache, table_options \\ [{:read_concurrency, true}, {:write_concurrency, true}, :ordered_set, :public, :named_table], gen_options)

View Source

Initialize the ETS message cache.

By default, the table used for storing messages is a named table with the name :nosedrum_message_cache. The table reference is stored internally as the state of this process, the public-facing API functions default to using the table name to access the module.

Link to this function

update(message, table_ref \\ :nosedrum_message_cache)

View Source

See Nosedrum.MessageCache.update/2. Returns the result of :ets.insert/2.