Class: Async::Matrix::Bridge::Discord::DB::Message

Inherits:
Sequel::Model
  • Object
show all
Defined in:
lib/async/matrix/bridge/discord/db/message.rb

Overview

Maps a Discord message to one or more Matrix events.

A single Discord message may produce multiple Matrix events (one per attachment), distinguished by discord_attachment_id. The composite unique index on (discord_id, discord_attachment_id, discord_channel_id, discord_channel_receiver) ensures no duplicates.

msg = Message.create(
  discord_id: "msg1", discord_channel_id: "ch1",
  discord_sender: "user1", mxid: "$evt1", timestamp: 1234567890
)
msg.portal  # => Portal

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.by_discord_id(discord_id, channel_id, receiver = "") ⇒ Object

Find all parts of a Discord message (text + attachments).



41
42
43
44
45
46
47
# File 'lib/async/matrix/bridge/discord/db/message.rb', line 41

def self.by_discord_id(discord_id, channel_id, receiver = "")
  where(
    discord_id: discord_id,
    discord_channel_id: channel_id,
    discord_channel_receiver: receiver
  ).order(:discord_attachment_id).all
end

.by_mxid(mxid) ⇒ Object

Find a message by its Matrix event ID.



50
51
52
# File 'lib/async/matrix/bridge/discord/db/message.rb', line 50

def self.by_mxid(mxid)
  first(mxid: mxid)
end

Instance Method Details

#validateObject



33
34
35
36
37
38
# File 'lib/async/matrix/bridge/discord/db/message.rb', line 33

def validate
  super
  errors.add(:discord_id, "cannot be empty") if discord_id.nil? || discord_id.empty?
  errors.add(:mxid, "cannot be empty") if mxid.nil? || mxid.empty?
  errors.add(:discord_sender, "cannot be empty") if discord_sender.nil? || discord_sender.empty?
end