feat: add discord_messages table and persistence APIs

This adds a new `discord_messages` table and extends the persistence
APIs such that `MessagesByID` and `MessageByID` will return user
messages that include their discord message payload.

It also adds APIs to save individual discord messages.
This commit is contained in:
Pascal Precht 2022-08-04 18:16:56 +02:00 committed by r4bbit.eth
parent d0e0deac95
commit 081974da1e
8 changed files with 517 additions and 77 deletions

View file

@ -171,6 +171,8 @@ type Message struct {
// ContactRequestState is the state of the contact request message
ContactRequestState ContactRequestState `json:"contactRequestState,omitempty"`
DiscordMessage *protobuf.DiscordMessage `json:"discordMessage,omitempty"`
}
func (m *Message) MarshalJSON() ([]byte, error) {
@ -216,6 +218,7 @@ func (m *Message) MarshalJSON() ([]byte, error) {
EditedAt uint64 `json:"editedAt,omitempty"`
Deleted bool `json:"deleted,omitempty"`
ContactRequestState ContactRequestState `json:"contactRequestState,omitempty"`
DiscordMessage *protobuf.DiscordMessage `json:"discordMessage,omitempty"`
}{
ID: m.ID,
WhisperTimestamp: m.WhisperTimestamp,
@ -264,6 +267,10 @@ func (m *Message) MarshalJSON() ([]byte, error) {
item.AudioDurationMs = audio.DurationMs
}
if discordMessage := m.GetDiscordMessage(); discordMessage != nil {
item.DiscordMessage = discordMessage
}
return json.Marshal(item)
}

View file

@ -14,6 +14,13 @@ const (
Error
)
type MessageType string
const (
MessageTypeDefault MessageType = "Default"
MessageTypeReply MessageType = "Reply"
)
type Channel struct {
ID string `json:"id"`
CategoryName string `json:"category"`

View file

@ -55,7 +55,8 @@ func (db sqlitePersistence) tableUserMessagesAllFields() string {
gap_from,
gap_to,
contact_request_state,
mentioned`
mentioned,
discord_message_id`
}
func (db sqlitePersistence) tableUserMessagesAllFieldsJoin() string {
@ -99,6 +100,18 @@ func (db sqlitePersistence) tableUserMessagesAllFieldsJoin() string {
m1.gap_to,
m1.contact_request_state,
m1.mentioned,
COALESCE(m1.discord_message_id, ""),
COALESCE(dm.author_id, ""),
COALESCE(dm.type, ""),
COALESCE(dm.timestamp, ""),
COALESCE(dm.timestamp_edited, ""),
COALESCE(dm.content, ""),
COALESCE(dm.reference_message_id, ""),
COALESCE(dm.reference_channel_id, ""),
COALESCE(dm_author.name, ""),
COALESCE(dm_author.discriminator, ""),
COALESCE(dm_author.nickname, ""),
COALESCE(dm_author.avatar_url, ""),
m2.source,
m2.text,
m2.parsed_text,
@ -141,6 +154,10 @@ func (db sqlitePersistence) tableUserMessagesScanAllFields(row scanner, message
command := &common.CommandParameters{}
audio := &protobuf.AudioMessage{}
image := &protobuf.ImageMessage{}
discordMessage := &protobuf.DiscordMessage{
Author: &protobuf.DiscordMessageAuthor{},
Reference: &protobuf.DiscordMessageReference{},
}
args := []interface{}{
&message.ID,
@ -183,6 +200,18 @@ func (db sqlitePersistence) tableUserMessagesScanAllFields(row scanner, message
&gapTo,
&contactRequestState,
&message.Mentioned,
&discordMessage.Id,
&discordMessage.Author.Id,
&discordMessage.Type,
&discordMessage.Timestamp,
&discordMessage.TimestampEdited,
&discordMessage.Content,
&discordMessage.Reference.MessageId,
&discordMessage.Reference.ChannelId,
&discordMessage.Author.Name,
&discordMessage.Author.Discriminator,
&discordMessage.Author.Nickname,
&discordMessage.Author.AvatarUrl,
&quotedFrom,
&quotedText,
&quotedParsedText,
@ -263,6 +292,11 @@ func (db sqlitePersistence) tableUserMessagesScanAllFields(row scanner, message
Type: image.Type,
}
message.Payload = &protobuf.ChatMessage_Image{Image: &img}
case protobuf.ChatMessage_DISCORD_MESSAGE:
message.Payload = &protobuf.ChatMessage_DiscordMessage{
DiscordMessage: discordMessage,
}
}
return nil
@ -291,6 +325,14 @@ func (db sqlitePersistence) tableUserMessagesAllValues(message *common.Message)
command = &common.CommandParameters{}
}
discordMessage := message.GetDiscordMessage()
if discordMessage == nil {
discordMessage = &protobuf.DiscordMessage{
Author: &protobuf.DiscordMessageAuthor{},
Reference: &protobuf.DiscordMessageReference{},
}
}
if message.GapParameters != nil {
gapFrom = message.GapParameters.From
gapTo = message.GapParameters.To
@ -358,6 +400,7 @@ func (db sqlitePersistence) tableUserMessagesAllValues(message *common.Message)
gapTo,
message.ContactRequestState,
message.Mentioned,
discordMessage.Id,
}, nil
}
@ -396,6 +439,17 @@ func (db sqlitePersistence) messageByID(tx *sql.Tx, id string) (*common.Message,
contacts c
ON
m1.source = c.id
LEFT JOIN
discord_messages dm
ON
m1.discord_message_id = dm.id
LEFT JOIN
discord_message_authors dm_author
ON
dm.author_id = dm_author.id
WHERE
m1.id = ?
`, allFields),
@ -432,6 +486,17 @@ func (db sqlitePersistence) MessageByCommandID(chatID, id string) (*common.Messa
contacts c
ON
m1.source = c.id
LEFT JOIN
discord_messages dm
ON
m1.discord_message_id = dm.id
LEFT JOIN
discord_message_authors dm_author
ON
dm.author_id = dm_author.id
WHERE
m1.command_id = ?
AND
@ -515,8 +580,19 @@ func (db sqlitePersistence) MessagesByIDs(ids []string) ([]*common.Message, erro
LEFT JOIN
contacts c
ON
m1.source = c.id
LEFT JOIN
discord_messages dm
ON
m1.discord_message_id = dm.id
LEFT JOIN
discord_message_authors dm_author
ON
dm.author_id = dm_author.id
WHERE NOT(m1.hide) AND m1.id IN (%s)`, allFields, inVector), idsArgs...)
if err != nil {
return nil, err
@ -568,6 +644,17 @@ func (db sqlitePersistence) MessageByChatID(chatID string, currCursor string, li
ON
m1.source = c.id
LEFT JOIN
discord_messages dm
ON
m1.discord_message_id = dm.id
LEFT JOIN
discord_message_authors dm_author
ON
dm.author_id = dm_author.id
WHERE
NOT(m1.hide) AND m1.local_chat_id = ? %s
ORDER BY cursor DESC
@ -653,6 +740,17 @@ func (db sqlitePersistence) PendingContactRequests(currCursor string, limit int)
ON
m1.source = c.id
LEFT JOIN
discord_messages dm
ON
m1.discord_message_id = dm.id
LEFT JOIN
discord_message_authors dm_author
ON
dm.author_id = dm_author.id
WHERE
NOT(m1.hide) AND NOT(m1.seen) AND m1.content_type = ? %s
ORDER BY cursor DESC
@ -747,6 +845,17 @@ func (db sqlitePersistence) AllMessageByChatIDWhichMatchTerm(chatID string, sear
ON
m1.source = c.id
LEFT JOIN
discord_messages dm
ON
m1.discord_message_id = dm.id
LEFT JOIN
discord_message_authors dm_author
ON
dm.author_id = dm_author.id
WHERE
NOT(m1.hide) AND m1.local_chat_id = ? %s
ORDER BY cursor DESC
@ -848,6 +957,17 @@ func (db sqlitePersistence) AllMessagesFromChatsAndCommunitiesWhichMatchTerm(com
ON
m1.source = c.id
LEFT JOIN
discord_messages dm
ON
m1.discord_message_id = dm.id
LEFT JOIN
discord_message_authors dm_author
ON
dm.author_id = dm_author.id
WHERE
NOT(m1.hide) %s
ORDER BY cursor DESC
@ -944,6 +1064,17 @@ func (db sqlitePersistence) PinnedMessageByChatIDs(chatIDs []string, currCursor
contacts c
ON
m1.source = c.id
LEFT JOIN
discord_messages dm
ON
m1.discord_message_id = dm.id
LEFT JOIN
discord_message_authors dm_author
ON
dm.author_id = dm_author.id
WHERE
pm.pinned = 1
AND NOT(m1.hide) AND m1.local_chat_id IN %s %s
@ -1029,6 +1160,17 @@ func (db sqlitePersistence) MessageByChatIDs(chatIDs []string, currCursor string
ON
m1.source = c.id
LEFT JOIN
discord_messages dm
ON
m1.discord_message_id = dm.id
LEFT JOIN
discord_message_authors dm_author
ON
dm.author_id = dm_author.id
WHERE
NOT(m1.hide) AND m1.local_chat_id IN %s %s
ORDER BY cursor DESC
@ -1758,6 +1900,67 @@ func (db sqlitePersistence) SaveDiscordMessageAuthor(author *protobuf.DiscordMes
return
}
func (db sqlitePersistence) SaveDiscordMessage(message *protobuf.DiscordMessage) (err error) {
query := "INSERT INTO discord_messages(id,type,timestamp,timestamp_edited,content,author_id, reference_message_id, reference_channel_id, reference_guild_id) VALUES (?,?,?,?,?,?,?,?,?)"
stmt, err := db.db.Prepare(query)
if err != nil {
return
}
defer stmt.Close()
_, err = stmt.Exec(
message.GetId(),
message.GetType(),
message.GetTimestamp(),
message.GetTimestampEdited(),
message.GetContent(),
message.Author.GetId(),
message.Reference.GetMessageId(),
message.Reference.GetChannelId(),
message.Reference.GetGuildId(),
)
return
}
func (db sqlitePersistence) SaveDiscordMessages(messages []*protobuf.DiscordMessage) (err error) {
tx, err := db.db.BeginTx(context.Background(), &sql.TxOptions{})
if err != nil {
return
}
defer func() {
if err == nil {
err = tx.Commit()
return
}
// don't shadow original error
_ = tx.Rollback()
}()
query := "INSERT INTO discord_messages(id, author_id, type, timestamp, timestamp_edited, content, reference_message_id, reference_channel_id, reference_guild_id) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)"
stmt, err := tx.Prepare(query)
if err != nil {
return
}
defer stmt.Close()
for _, msg := range messages {
_, err = stmt.Exec(
msg.GetId(),
msg.GetType(),
msg.GetTimestamp(),
msg.GetTimestampEdited(),
msg.GetContent(),
msg.Author.GetId(),
msg.Reference.GetMessageId(),
msg.Reference.GetChannelId(),
msg.Reference.GetGuildId(),
)
if err != nil {
return
}
}
return
}
func (db sqlitePersistence) SaveEmojiReaction(emojiReaction *EmojiReaction) (err error) {
query := "INSERT INTO emoji_reactions(id,clock_value,source,emoji_id,message_id,chat_id,local_chat_id,retracted) VALUES (?,?,?,?,?,?,?,?)"
stmt, err := db.db.Prepare(query)

View file

@ -54,6 +54,7 @@
// 1650373957_add_contact_request_state.up.sql (59B)
// 1656958989_contact_verification.up.sql (624B)
// 1658236268_add_discord_message_authors_table.up.sql (191B)
// 1659619997_add_discord_messages_table.up.sql (371B)
// README.md (554B)
// doc.go (850B)
@ -1204,6 +1205,26 @@ func _1658236268_add_discord_message_authors_tableUpSql() (*asset, error) {
return a, nil
}
var __1659619997_add_discord_messages_tableUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\xcf\x41\x6b\xc2\x30\x1c\x05\xf0\x7b\x3e\xc5\xc3\xd3\x06\xfb\x06\x9e\xb2\x36\x62\x58\x6c\x47\xfc\x77\xea\xa9\x94\xe6\x3f\x2d\xd8\x54\x92\xf4\xb0\x6f\x3f\x2a\xeb\x50\xf1\x98\xfc\xf2\xde\x23\xd2\x90\xb2\x20\xf9\x6e\x14\xc6\xc8\xa1\xee\x39\xc6\xe6\xc8\x11\x32\xcf\x91\x95\xa6\xda\x14\x70\x5d\x6c\x87\xe0\x66\xab\x3b\x07\x52\x7b\x42\xae\x56\xb2\x32\x84\xc5\x62\x29\x44\x66\x95\x24\xf5\x57\xa5\x57\x28\x4a\x82\xda\xeb\x2d\x6d\x1f\xf3\x11\x2f\x02\x98\x4b\x3e\xad\xde\x48\x7b\xc0\x87\x3a\x5c\x33\x45\x65\xcc\x9b\x00\x9a\x31\x9d\x86\xf0\xbf\x75\x4b\xe9\xe7\xc2\xf8\x92\x36\x5b\x4b\x7b\x0f\x5d\xcf\x31\x35\xfd\x05\xba\xa0\xe7\x52\xb3\xeb\x12\xbb\xe9\xc1\x74\xdf\x0e\x3e\xb1\x4f\xd7\x8d\xe9\x1c\xf8\x9b\x03\xfb\x96\x1f\x3f\x7b\x8f\xed\xa9\xf1\x9e\xcf\xcf\xf1\x38\x76\x67\x37\x93\x78\xc5\x4e\xd3\xba\xac\x08\xb6\xdc\xe9\x7c\x29\x7e\x03\x00\x00\xff\xff\x0b\x32\xec\x85\x73\x01\x00\x00")
func _1659619997_add_discord_messages_tableUpSqlBytes() ([]byte, error) {
return bindataRead(
__1659619997_add_discord_messages_tableUpSql,
"1659619997_add_discord_messages_table.up.sql",
)
}
func _1659619997_add_discord_messages_tableUpSql() (*asset, error) {
bytes, err := _1659619997_add_discord_messages_tableUpSqlBytes()
if err != nil {
return nil, err
}
info := bindataFileInfo{name: "1659619997_add_discord_messages_table.up.sql", size: 371, mode: os.FileMode(0664), modTime: time.Unix(1660118031, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xde, 0x12, 0x9c, 0x96, 0xe2, 0x42, 0x3f, 0x94, 0x62, 0xc2, 0x76, 0xab, 0x3b, 0x4c, 0x85, 0x36, 0x48, 0xcc, 0x73, 0x60, 0x93, 0x5a, 0xd6, 0x7, 0xd6, 0x0, 0xee, 0x1b, 0x1e, 0x34, 0x58, 0x99}}
return a, nil
}
var _readmeMd = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x91\xc1\xce\xd3\x30\x10\x84\xef\x7e\x8a\x91\x7a\x01\xa9\x2a\x8f\xc0\x0d\x71\x82\x03\x48\x1c\xc9\x36\x9e\x36\x96\x1c\x6f\xf0\xae\x93\xe6\xed\x91\xa3\xc2\xdf\xff\x66\xed\xd8\x33\xdf\x78\x4f\xa7\x13\xbe\xea\x06\x57\x6c\x35\x39\x31\xa7\x7b\x15\x4f\x5a\xec\x73\x08\xbf\x08\x2d\x79\x7f\x4a\x43\x5b\x86\x17\xfd\x8c\x21\xea\x56\x5e\x47\x90\x4a\x14\x75\x48\xde\x64\x37\x2c\x6a\x96\xae\x99\x48\x05\xf6\x27\x77\x13\xad\x08\xae\x8a\x51\xe7\x25\xf3\xf1\xa9\x9f\xf9\x58\x58\x2c\xad\xbc\xe0\x8b\x56\xf0\x21\x5d\xeb\x4c\x95\xb3\xae\x84\x60\xd4\xdc\xe6\x82\x5d\x1b\x36\x6d\x39\x62\x92\xf5\xb8\x11\xdb\x92\xd3\x28\xce\xe0\x13\xe1\x72\xcd\x3c\x63\xd4\x65\x87\xae\xac\xe8\xc3\x28\x2e\x67\x44\x66\x3a\x21\x25\xa2\x72\xac\x14\x67\xbc\x84\x9f\x53\x32\x8c\x52\x70\x25\x56\xd6\xfd\x8d\x05\x37\xad\x30\x9d\x9f\xa6\x86\x0f\xcd\x58\x7f\xcf\x34\x93\x3b\xed\x90\x9f\xa4\x1f\xcf\x30\x85\x4d\x07\x58\xaf\x7f\x25\xc4\x9d\xf3\x72\x64\x84\xd0\x7f\xf9\x9b\x3a\x2d\x84\xef\x85\x48\x66\x8d\xd8\x88\x9b\x8c\x8c\x98\x5b\xf6\x74\x14\x4e\x33\x0d\xc9\xe0\x93\x38\xda\x12\xc5\x69\xbd\xe4\xf0\x2e\x7a\x78\x07\x1c\xfe\x13\x9f\x91\x29\x31\x95\x7b\x7f\x62\x59\x37\xb4\xe5\x5e\x25\xfe\x33\xee\xd5\x53\x71\xd6\xda\x3a\xd8\xcb\xde\x2e\xf8\xa1\x90\x55\x53\x0c\xc7\xaa\x0d\xe9\x76\x14\x29\x1c\x7b\x68\xdd\x2f\xe1\x6f\x00\x00\x00\xff\xff\x3c\x0a\xc2\xfe\x2a\x02\x00\x00")
func readmeMdBytes() ([]byte, error) {
@ -1443,6 +1464,8 @@ var _bindata = map[string]func() (*asset, error){
"1658236268_add_discord_message_authors_table.up.sql": _1658236268_add_discord_message_authors_tableUpSql,
"1659619997_add_discord_messages_table.up.sql": _1659619997_add_discord_messages_tableUpSql,
"README.md": readmeMd,
"doc.go": docGo,
@ -1543,6 +1566,7 @@ var _bintree = &bintree{nil, map[string]*bintree{
"1650373957_add_contact_request_state.up.sql": &bintree{_1650373957_add_contact_request_stateUpSql, map[string]*bintree{}},
"1656958989_contact_verification.up.sql": &bintree{_1656958989_contact_verificationUpSql, map[string]*bintree{}},
"1658236268_add_discord_message_authors_table.up.sql": &bintree{_1658236268_add_discord_message_authors_tableUpSql, map[string]*bintree{}},
"1659619997_add_discord_messages_table.up.sql": &bintree{_1659619997_add_discord_messages_tableUpSql, map[string]*bintree{}},
"README.md": &bintree{readmeMd, map[string]*bintree{}},
"doc.go": &bintree{docGo, map[string]*bintree{}},
}}

View file

@ -0,0 +1,13 @@
ALTER TABLE user_messages ADD COLUMN discord_message_id TEXT DEFAULT "";
CREATE TABLE IF NOT EXISTS discord_messages (
id TEXT PRIMARY KEY NOT NULL,
author_id TEXT NOT NULL,
type VARCHAR NOT NULL,
timestamp INT NOT NULL,
timestamp_edited INT,
content TEXT,
reference_message_id TEXT,
reference_channel_id TEXT,
reference_guild_id TEXT
) WITHOUT ROWID;

View file

@ -74,6 +74,25 @@ func TestMessageByID(t *testing.T) {
require.EqualValues(t, id, m.ID)
}
func TestMessageByID_WithDiscordMessagePayload(t *testing.T) {
db, err := openTestDB()
require.NoError(t, err)
p := newSQLitePersistence(db)
id := "1"
discordMessageID := "2"
err = insertMinimalDiscordMessage(p, id, discordMessageID)
require.NoError(t, err)
m, err := p.MessageByID(id)
require.NoError(t, err)
require.EqualValues(t, id, m.ID)
require.NotNil(t, m.GetDiscordMessage())
require.EqualValues(t, discordMessageID, m.GetDiscordMessage().Id)
require.EqualValues(t, "2", m.GetDiscordMessage().Author.Id)
}
func TestMessagesExist(t *testing.T) {
db, err := openTestDB()
require.NoError(t, err)
@ -683,6 +702,38 @@ func insertMinimalMessage(p *sqlitePersistence, id string) error {
}})
}
func insertMinimalDiscordMessage(p *sqlitePersistence, id string, discordMessageID string) error {
discordMessage := &protobuf.DiscordMessage{
Id: discordMessageID,
Type: "Default",
Timestamp: "123456",
Content: "This is the message",
Author: &protobuf.DiscordMessageAuthor{
Id: "2",
},
Reference: &protobuf.DiscordMessageReference{},
}
err := p.SaveDiscordMessage(discordMessage)
if err != nil {
return err
}
return p.SaveMessages([]*common.Message{{
ID: id,
LocalChatID: testPublicChatID,
From: "me",
ChatMessage: protobuf.ChatMessage{
Text: "some-text",
ContentType: protobuf.ChatMessage_DISCORD_MESSAGE,
ChatId: testPublicChatID,
Payload: &protobuf.ChatMessage_DiscordMessage{
DiscordMessage: discordMessage,
},
},
}})
}
func minimalRawMessage(id string, messageType protobuf.ApplicationMetadataMessage_Type) *common.RawMessage {
return &common.RawMessage{
ID: id,
@ -1332,3 +1383,41 @@ func TestSaveDiscordMessageAuthor(t *testing.T) {
require.NoError(t, err)
require.True(t, exists)
}
func TestSaveDiscordMessage(t *testing.T) {
db, err := openTestDB()
require.NoError(t, err)
p := newSQLitePersistence(db)
require.NoError(t, p.SaveDiscordMessage(&protobuf.DiscordMessage{
Id: "1",
Type: "Default",
Timestamp: "123456",
Content: "This is the message",
Author: &protobuf.DiscordMessageAuthor{
Id: "2",
},
Reference: &protobuf.DiscordMessageReference{},
}))
require.NoError(t, err)
}
func TestSaveDiscordMessages(t *testing.T) {
db, err := openTestDB()
require.NoError(t, err)
p := newSQLitePersistence(db)
for i := 0; i < 10; i++ {
id := strconv.Itoa(i)
err := insertMinimalDiscordMessage(p, id, id)
require.NoError(t, err)
m, err := p.MessageByID(id)
require.NoError(t, err)
dm := m.GetDiscordMessage()
require.NotNil(t, dm)
require.EqualValues(t, id, dm.Id)
}
}

View file

@ -65,6 +65,7 @@ const (
// Only local
ChatMessage_SYSTEM_MESSAGE_GAP ChatMessage_ContentType = 10
ChatMessage_CONTACT_REQUEST ChatMessage_ContentType = 11
ChatMessage_DISCORD_MESSAGE ChatMessage_ContentType = 12
)
var ChatMessage_ContentType_name = map[int32]string{
@ -80,6 +81,7 @@ var ChatMessage_ContentType_name = map[int32]string{
9: "COMMUNITY",
10: "SYSTEM_MESSAGE_GAP",
11: "CONTACT_REQUEST",
12: "DISCORD_MESSAGE",
}
var ChatMessage_ContentType_value = map[string]int32{
@ -95,6 +97,7 @@ var ChatMessage_ContentType_value = map[string]int32{
"COMMUNITY": 9,
"SYSTEM_MESSAGE_GAP": 10,
"CONTACT_REQUEST": 11,
"DISCORD_MESSAGE": 12,
}
func (x ChatMessage_ContentType) String() string {
@ -102,7 +105,7 @@ func (x ChatMessage_ContentType) String() string {
}
func (ChatMessage_ContentType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_263952f55fd35689, []int{7, 0}
return fileDescriptor_263952f55fd35689, []int{8, 0}
}
type StickerMessage struct {
@ -410,15 +413,16 @@ func (m *DeleteMessage) GetMessageType() MessageType {
}
type DiscordMessage struct {
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"`
Timestamp string `protobuf:"bytes,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
TimestampEdited string `protobuf:"bytes,4,opt,name=timestampEdited,proto3" json:"timestampEdited,omitempty"`
Content string `protobuf:"bytes,5,opt,name=content,proto3" json:"content,omitempty"`
Author *DiscordMessageAuthor `protobuf:"bytes,6,opt,name=author,proto3" json:"author,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"`
Timestamp string `protobuf:"bytes,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
TimestampEdited string `protobuf:"bytes,4,opt,name=timestampEdited,proto3" json:"timestampEdited,omitempty"`
Content string `protobuf:"bytes,5,opt,name=content,proto3" json:"content,omitempty"`
Author *DiscordMessageAuthor `protobuf:"bytes,6,opt,name=author,proto3" json:"author,omitempty"`
Reference *DiscordMessageReference `protobuf:"bytes,7,opt,name=reference,proto3" json:"reference,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *DiscordMessage) Reset() { *m = DiscordMessage{} }
@ -488,6 +492,13 @@ func (m *DiscordMessage) GetAuthor() *DiscordMessageAuthor {
return nil
}
func (m *DiscordMessage) GetReference() *DiscordMessageReference {
if m != nil {
return m.Reference
}
return nil
}
type DiscordMessageAuthor struct {
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
@ -559,6 +570,61 @@ func (m *DiscordMessageAuthor) GetAvatarUrl() string {
return ""
}
type DiscordMessageReference struct {
MessageId string `protobuf:"bytes,1,opt,name=messageId,proto3" json:"messageId,omitempty"`
ChannelId string `protobuf:"bytes,2,opt,name=channelId,proto3" json:"channelId,omitempty"`
GuildId string `protobuf:"bytes,3,opt,name=guildId,proto3" json:"guildId,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *DiscordMessageReference) Reset() { *m = DiscordMessageReference{} }
func (m *DiscordMessageReference) String() string { return proto.CompactTextString(m) }
func (*DiscordMessageReference) ProtoMessage() {}
func (*DiscordMessageReference) Descriptor() ([]byte, []int) {
return fileDescriptor_263952f55fd35689, []int{7}
}
func (m *DiscordMessageReference) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DiscordMessageReference.Unmarshal(m, b)
}
func (m *DiscordMessageReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_DiscordMessageReference.Marshal(b, m, deterministic)
}
func (m *DiscordMessageReference) XXX_Merge(src proto.Message) {
xxx_messageInfo_DiscordMessageReference.Merge(m, src)
}
func (m *DiscordMessageReference) XXX_Size() int {
return xxx_messageInfo_DiscordMessageReference.Size(m)
}
func (m *DiscordMessageReference) XXX_DiscardUnknown() {
xxx_messageInfo_DiscordMessageReference.DiscardUnknown(m)
}
var xxx_messageInfo_DiscordMessageReference proto.InternalMessageInfo
func (m *DiscordMessageReference) GetMessageId() string {
if m != nil {
return m.MessageId
}
return ""
}
func (m *DiscordMessageReference) GetChannelId() string {
if m != nil {
return m.ChannelId
}
return ""
}
func (m *DiscordMessageReference) GetGuildId() string {
if m != nil {
return m.GuildId
}
return ""
}
type ChatMessage struct {
// Lamport timestamp of the chat message
Clock uint64 `protobuf:"varint,1,opt,name=clock,proto3" json:"clock,omitempty"`
@ -585,6 +651,7 @@ type ChatMessage struct {
// *ChatMessage_Image
// *ChatMessage_Audio
// *ChatMessage_Community
// *ChatMessage_DiscordMessage
Payload isChatMessage_Payload `protobuf_oneof:"payload"`
// Grant for community chat messages
Grant []byte `protobuf:"bytes,13,opt,name=grant,proto3" json:"grant,omitempty"`
@ -602,7 +669,7 @@ func (m *ChatMessage) Reset() { *m = ChatMessage{} }
func (m *ChatMessage) String() string { return proto.CompactTextString(m) }
func (*ChatMessage) ProtoMessage() {}
func (*ChatMessage) Descriptor() ([]byte, []int) {
return fileDescriptor_263952f55fd35689, []int{7}
return fileDescriptor_263952f55fd35689, []int{8}
}
func (m *ChatMessage) XXX_Unmarshal(b []byte) error {
@ -699,6 +766,10 @@ type ChatMessage_Community struct {
Community []byte `protobuf:"bytes,12,opt,name=community,proto3,oneof"`
}
type ChatMessage_DiscordMessage struct {
DiscordMessage *DiscordMessage `protobuf:"bytes,99,opt,name=discord_message,json=discordMessage,proto3,oneof"`
}
func (*ChatMessage_Sticker) isChatMessage_Payload() {}
func (*ChatMessage_Image) isChatMessage_Payload() {}
@ -707,6 +778,8 @@ func (*ChatMessage_Audio) isChatMessage_Payload() {}
func (*ChatMessage_Community) isChatMessage_Payload() {}
func (*ChatMessage_DiscordMessage) isChatMessage_Payload() {}
func (m *ChatMessage) GetPayload() isChatMessage_Payload {
if m != nil {
return m.Payload
@ -742,6 +815,13 @@ func (m *ChatMessage) GetCommunity() []byte {
return nil
}
func (m *ChatMessage) GetDiscordMessage() *DiscordMessage {
if x, ok := m.GetPayload().(*ChatMessage_DiscordMessage); ok {
return x.DiscordMessage
}
return nil
}
func (m *ChatMessage) GetGrant() []byte {
if m != nil {
return m.Grant
@ -784,6 +864,7 @@ func (*ChatMessage) XXX_OneofWrappers() []interface{} {
(*ChatMessage_Image)(nil),
(*ChatMessage_Audio)(nil),
(*ChatMessage_Community)(nil),
(*ChatMessage_DiscordMessage)(nil),
}
}
@ -799,7 +880,7 @@ func (m *ContactRequestSignature) Reset() { *m = ContactRequestSignature
func (m *ContactRequestSignature) String() string { return proto.CompactTextString(m) }
func (*ContactRequestSignature) ProtoMessage() {}
func (*ContactRequestSignature) Descriptor() ([]byte, []int) {
return fileDescriptor_263952f55fd35689, []int{8}
return fileDescriptor_263952f55fd35689, []int{9}
}
func (m *ContactRequestSignature) XXX_Unmarshal(b []byte) error {
@ -844,6 +925,7 @@ func init() {
proto.RegisterType((*DeleteMessage)(nil), "protobuf.DeleteMessage")
proto.RegisterType((*DiscordMessage)(nil), "protobuf.DiscordMessage")
proto.RegisterType((*DiscordMessageAuthor)(nil), "protobuf.DiscordMessageAuthor")
proto.RegisterType((*DiscordMessageReference)(nil), "protobuf.DiscordMessageReference")
proto.RegisterType((*ChatMessage)(nil), "protobuf.ChatMessage")
proto.RegisterType((*ContactRequestSignature)(nil), "protobuf.ContactRequestSignature")
}
@ -851,67 +933,73 @@ func init() {
func init() { proto.RegisterFile("chat_message.proto", fileDescriptor_263952f55fd35689) }
var fileDescriptor_263952f55fd35689 = []byte{
// 983 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x55, 0xcd, 0x6e, 0xdb, 0x46,
0x10, 0x0e, 0x65, 0xfd, 0x71, 0x28, 0xcb, 0xec, 0xda, 0x8d, 0xd9, 0x34, 0xb5, 0x1d, 0x22, 0x40,
0x74, 0x52, 0x81, 0x34, 0x2d, 0x02, 0xf4, 0xc4, 0xc8, 0x84, 0xc3, 0xa6, 0xa2, 0x9c, 0x25, 0xd5,
0xd6, 0xbd, 0x10, 0x1b, 0x72, 0x63, 0x13, 0x36, 0x49, 0x95, 0x5c, 0x05, 0xf5, 0x9b, 0x14, 0x7d,
0x87, 0x5e, 0x7b, 0xed, 0x1b, 0xf4, 0x59, 0xfa, 0x08, 0xc5, 0x2e, 0xb9, 0x22, 0x25, 0xc4, 0x8a,
0x4f, 0xdc, 0x99, 0xfd, 0x66, 0xf6, 0xdb, 0x6f, 0x86, 0xb3, 0x80, 0xc2, 0x2b, 0xc2, 0x82, 0x84,
0x16, 0x05, 0xb9, 0xa4, 0xe3, 0x45, 0x9e, 0xb1, 0x0c, 0xf5, 0xc5, 0xe7, 0xdd, 0xf2, 0xfd, 0x23,
0x8d, 0xa6, 0xcb, 0xa4, 0x28, 0xdd, 0xe6, 0x4b, 0x18, 0x7a, 0x2c, 0x0e, 0xaf, 0x69, 0x3e, 0x2d,
0xe1, 0x08, 0x41, 0xfb, 0x8a, 0x14, 0x57, 0x86, 0x72, 0xa2, 0x8c, 0x54, 0x2c, 0xd6, 0xdc, 0xb7,
0x20, 0xe1, 0xb5, 0xd1, 0x3a, 0x51, 0x46, 0x1d, 0x2c, 0xd6, 0xe6, 0x5b, 0x18, 0x38, 0x09, 0xb9,
0xa4, 0x32, 0xce, 0x80, 0xde, 0x82, 0xdc, 0xde, 0x64, 0x24, 0x12, 0xa1, 0x03, 0x2c, 0x4d, 0xf4,
0x0c, 0xda, 0xec, 0x76, 0x41, 0x45, 0xf4, 0xf0, 0xf9, 0xfe, 0x58, 0x32, 0x19, 0x8b, 0x78, 0xff,
0x76, 0x41, 0xb1, 0x00, 0x98, 0x7f, 0x2b, 0x30, 0xb0, 0x96, 0x51, 0x9c, 0x7d, 0x3a, 0xe7, 0x8b,
0xb5, 0x9c, 0x27, 0x75, 0xce, 0x66, 0x7c, 0x69, 0xd4, 0x07, 0xa0, 0x63, 0xd0, 0xa2, 0x65, 0x4e,
0x58, 0x9c, 0xa5, 0x41, 0x52, 0x18, 0x3b, 0x27, 0xca, 0xa8, 0x8d, 0x41, 0xba, 0xa6, 0x85, 0xf9,
0x2d, 0xa8, 0xab, 0x18, 0xf4, 0x10, 0xd0, 0xdc, 0x7d, 0xe3, 0xce, 0x7e, 0x76, 0x03, 0x6b, 0x7e,
0xea, 0xcc, 0x02, 0xff, 0xe2, 0xdc, 0xd6, 0x1f, 0xa0, 0x1e, 0xec, 0x58, 0xd6, 0x44, 0x57, 0xc4,
0x62, 0x8a, 0xf5, 0x96, 0xf9, 0x8f, 0x02, 0x9a, 0x1d, 0xc5, 0x4c, 0xf2, 0x3e, 0x80, 0x4e, 0x78,
0x93, 0x85, 0xd7, 0x82, 0x75, 0x1b, 0x97, 0x06, 0x57, 0x91, 0xd1, 0xdf, 0x99, 0xe0, 0xac, 0x62,
0xb1, 0x46, 0x87, 0xd0, 0x13, 0xc5, 0x8a, 0x23, 0xc1, 0x46, 0xc5, 0x5d, 0x6e, 0x3a, 0x11, 0xfa,
0x0a, 0xa0, 0x2a, 0x20, 0xdf, 0x6b, 0x8b, 0x3d, 0xb5, 0xf2, 0x38, 0x11, 0x3f, 0xe1, 0x32, 0x27,
0x29, 0x33, 0x3a, 0x42, 0x97, 0xd2, 0x40, 0x2f, 0x61, 0x20, 0x83, 0x84, 0x3a, 0x5d, 0xa1, 0xce,
0xe7, 0xb5, 0x3a, 0x15, 0x41, 0x21, 0x89, 0x96, 0xd4, 0x86, 0xf9, 0x97, 0x02, 0xbb, 0xa7, 0xf4,
0x86, 0x32, 0xba, 0xfd, 0x0e, 0x0d, 0xbe, 0xad, 0x2d, 0x7c, 0x77, 0xee, 0xe4, 0xdb, 0xde, 0xc6,
0xb7, 0x73, 0x6f, 0xbe, 0xff, 0x2a, 0x30, 0x3c, 0x8d, 0x8b, 0x30, 0xcb, 0x23, 0x49, 0x78, 0x08,
0xad, 0x38, 0xaa, 0xda, 0xb6, 0x15, 0x47, 0x42, 0x6e, 0xd9, 0x22, 0x6a, 0xd5, 0x00, 0x8f, 0x41,
0x65, 0x71, 0x42, 0x0b, 0x46, 0x92, 0x85, 0x24, 0xb9, 0x72, 0xa0, 0x11, 0xec, 0xad, 0x0c, 0x5e,
0x4e, 0x2a, 0x85, 0xdf, 0x74, 0xf3, 0xc6, 0x0c, 0xb3, 0x94, 0xd1, 0xaa, 0x00, 0x2a, 0x96, 0x26,
0xfa, 0x0e, 0xba, 0x64, 0xc9, 0xae, 0xb2, 0x5c, 0x88, 0xaf, 0x3d, 0x3f, 0xaa, 0x2f, 0xb3, 0xce,
0xd7, 0x12, 0x28, 0x5c, 0xa1, 0xcd, 0x3f, 0x15, 0x38, 0xf8, 0x18, 0xe0, 0x63, 0xd7, 0x4a, 0x49,
0xb2, 0xba, 0x16, 0x5f, 0xa3, 0xa7, 0xb0, 0x1b, 0xc5, 0x45, 0x98, 0xc7, 0x49, 0x9c, 0x12, 0x96,
0xe5, 0xd5, 0xd5, 0xd6, 0x9d, 0xe8, 0x11, 0xf4, 0xd3, 0x38, 0xbc, 0x16, 0xd1, 0xe5, 0xbd, 0x56,
0x36, 0x17, 0x86, 0x7c, 0x20, 0x8c, 0xe4, 0xf3, 0xfc, 0xa6, 0xba, 0x52, 0xed, 0x30, 0xff, 0xe8,
0x83, 0x36, 0xb9, 0x22, 0x9f, 0xe8, 0xef, 0x35, 0x71, 0x5b, 0x62, 0xa7, 0x21, 0xae, 0xec, 0xfe,
0x9d, 0x46, 0xf7, 0x1f, 0x83, 0x96, 0xd3, 0x62, 0x91, 0xa5, 0x05, 0x0d, 0x58, 0x56, 0x91, 0x02,
0xe9, 0xf2, 0x33, 0xf4, 0x05, 0xf4, 0x69, 0x5a, 0x04, 0x82, 0x72, 0x25, 0x34, 0x4d, 0x0b, 0x97,
0x33, 0x6e, 0x74, 0x62, 0x77, 0xad, 0x13, 0x37, 0x9b, 0xaa, 0x77, 0xdf, 0xa6, 0x42, 0xa7, 0x30,
0xa8, 0xca, 0x58, 0x46, 0xf6, 0x45, 0xe4, 0x93, 0x3a, 0xb2, 0xa1, 0xc1, 0x78, 0x52, 0x22, 0xcb,
0x2c, 0x61, 0x6d, 0xa0, 0x17, 0xd0, 0x2b, 0xca, 0x91, 0x6a, 0xa8, 0xa2, 0x05, 0x8c, 0x3a, 0xc1,
0xfa, 0xac, 0x7d, 0xfd, 0x00, 0x4b, 0x28, 0x1a, 0x43, 0x27, 0xe6, 0xe3, 0xd0, 0x00, 0x11, 0xf3,
0x70, 0x63, 0x4a, 0xd6, 0x11, 0x25, 0x8c, 0xe3, 0x09, 0x9f, 0x54, 0x86, 0xb6, 0x89, 0x6f, 0x4e,
0x40, 0x8e, 0x17, 0x30, 0x74, 0x04, 0x6a, 0x98, 0x25, 0xc9, 0x32, 0x8d, 0xd9, 0xad, 0x31, 0xe0,
0x3f, 0xe1, 0xeb, 0x07, 0xb8, 0x76, 0xd5, 0x3f, 0xe8, 0x6e, 0xf3, 0x07, 0x7d, 0x02, 0x83, 0x28,
0x2e, 0x16, 0x37, 0xe4, 0xb6, 0xac, 0xc1, 0x50, 0x28, 0xad, 0x55, 0x3e, 0x51, 0x87, 0xf7, 0x70,
0x54, 0x70, 0xc5, 0xb8, 0x04, 0x24, 0x64, 0x41, 0x4e, 0x7f, 0x5b, 0xd2, 0x82, 0x05, 0x45, 0x7c,
0x99, 0x12, 0xb6, 0xcc, 0xa9, 0xb1, 0x27, 0x18, 0x36, 0x65, 0x2c, 0xa1, 0xb8, 0x44, 0x7a, 0x12,
0x88, 0xbf, 0xe4, 0x89, 0xee, 0xd8, 0x44, 0x29, 0x98, 0x39, 0x0d, 0x69, 0xfc, 0x81, 0x46, 0x5b,
0xce, 0xd2, 0xef, 0x7b, 0xd6, 0xb1, 0x4c, 0x76, 0xd7, 0x79, 0xcf, 0x60, 0x4f, 0x1e, 0x53, 0xf5,
0x88, 0xf1, 0xd9, 0x89, 0x32, 0xea, 0xe3, 0x61, 0xe5, 0xae, 0x24, 0x36, 0xff, 0x53, 0x40, 0x6b,
0x34, 0x03, 0x32, 0xe0, 0x40, 0x3e, 0x1b, 0x93, 0x99, 0xeb, 0xdb, 0xae, 0x2f, 0x1f, 0x8e, 0x21,
0x80, 0x6f, 0xff, 0xe2, 0x07, 0xe7, 0x3f, 0x5a, 0x8e, 0xab, 0x2b, 0x48, 0x83, 0x9e, 0xe7, 0x3b,
0x93, 0x37, 0x36, 0xd6, 0x5b, 0x08, 0xa0, 0xeb, 0xf9, 0x96, 0x3f, 0xf7, 0xf4, 0x1d, 0xa4, 0x42,
0xc7, 0x9e, 0xce, 0x7e, 0x70, 0xf4, 0x36, 0x3a, 0x84, 0x7d, 0x1f, 0x5b, 0xae, 0x67, 0x4d, 0x7c,
0x67, 0xc6, 0x33, 0x4e, 0xa7, 0x96, 0x7b, 0xaa, 0x77, 0xd0, 0x08, 0x9e, 0x7a, 0x17, 0x9e, 0x6f,
0x4f, 0x83, 0xa9, 0xed, 0x79, 0xd6, 0x99, 0xbd, 0x3a, 0xed, 0x1c, 0x3b, 0x3f, 0x59, 0xbe, 0x1d,
0x9c, 0xe1, 0xd9, 0xfc, 0x5c, 0xef, 0xf2, 0x6c, 0xce, 0xd4, 0x3a, 0xb3, 0xf5, 0x1e, 0x5f, 0x8a,
0xa7, 0x4c, 0xef, 0xa3, 0x5d, 0x50, 0x79, 0xb2, 0xb9, 0xeb, 0xf8, 0x17, 0xba, 0xca, 0x1f, 0xbb,
0x8d, 0x74, 0x67, 0xd6, 0xb9, 0x0e, 0x68, 0x1f, 0xf6, 0x78, 0x5e, 0x6b, 0xe2, 0x07, 0xd8, 0x7e,
0x3b, 0xb7, 0x3d, 0x5f, 0xd7, 0x5e, 0xa9, 0xab, 0x77, 0xd9, 0x9c, 0xc3, 0xe1, 0x5d, 0x0a, 0x3e,
0x06, 0xb5, 0x2e, 0x4c, 0xf9, 0x7e, 0xd7, 0x8e, 0xed, 0xd3, 0xe2, 0xd5, 0xee, 0xaf, 0xda, 0xf8,
0xeb, 0xef, 0x65, 0x15, 0xdf, 0x75, 0xc5, 0xea, 0x9b, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0x2c,
0xd6, 0xbd, 0x7d, 0xda, 0x08, 0x00, 0x00,
// 1075 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0xcf, 0x6e, 0xdb, 0xc6,
0x13, 0x36, 0x65, 0xfd, 0xe3, 0x50, 0x96, 0xf9, 0x5b, 0xfb, 0x17, 0xb3, 0xa9, 0x6b, 0x3b, 0x44,
0x80, 0xe8, 0xa4, 0x02, 0x69, 0x5a, 0x04, 0xe8, 0xa1, 0x60, 0x24, 0xc2, 0x66, 0x53, 0x49, 0xce,
0x92, 0x6a, 0xeb, 0x5e, 0x88, 0x0d, 0xb9, 0xb6, 0x08, 0x8b, 0xa4, 0x4a, 0x52, 0x41, 0xfd, 0x00,
0x3d, 0xf7, 0xde, 0x77, 0xe8, 0xb5, 0xd7, 0xbe, 0x53, 0x9f, 0xa0, 0xd8, 0x25, 0x57, 0xa4, 0x84,
0x48, 0xf1, 0x49, 0x3b, 0xb3, 0x33, 0xb3, 0x1f, 0xbf, 0xf9, 0x76, 0x56, 0x80, 0xbc, 0x19, 0xc9,
0xdc, 0x90, 0xa6, 0x29, 0xb9, 0xa3, 0xfd, 0x45, 0x12, 0x67, 0x31, 0x6a, 0xf3, 0x9f, 0xf7, 0xcb,
0xdb, 0xa7, 0x0a, 0x8d, 0x96, 0x61, 0x9a, 0xbb, 0xf5, 0xd7, 0xd0, 0xb5, 0xb3, 0xc0, 0xbb, 0xa7,
0xc9, 0x28, 0x0f, 0x47, 0x08, 0xea, 0x33, 0x92, 0xce, 0x34, 0xe9, 0x42, 0xea, 0xc9, 0x98, 0xaf,
0x99, 0x6f, 0x41, 0xbc, 0x7b, 0xad, 0x76, 0x21, 0xf5, 0x1a, 0x98, 0xaf, 0xf5, 0x77, 0xd0, 0xb1,
0x42, 0x72, 0x47, 0x45, 0x9e, 0x06, 0xad, 0x05, 0x79, 0x98, 0xc7, 0xc4, 0xe7, 0xa9, 0x1d, 0x2c,
0x4c, 0xf4, 0x02, 0xea, 0xd9, 0xc3, 0x82, 0xf2, 0xec, 0xee, 0xcb, 0xa3, 0xbe, 0x40, 0xd2, 0xe7,
0xf9, 0xce, 0xc3, 0x82, 0x62, 0x1e, 0xa0, 0xff, 0x2d, 0x41, 0xc7, 0x58, 0xfa, 0x41, 0xfc, 0xe9,
0x9a, 0xaf, 0xd6, 0x6a, 0x5e, 0x94, 0x35, 0xab, 0xf9, 0xb9, 0x51, 0x1e, 0x80, 0xce, 0x41, 0xf1,
0x97, 0x09, 0xc9, 0x82, 0x38, 0x72, 0xc3, 0x54, 0xdb, 0xbf, 0x90, 0x7a, 0x75, 0x0c, 0xc2, 0x35,
0x4a, 0xf5, 0xaf, 0x41, 0x5e, 0xe5, 0xa0, 0x27, 0x80, 0xa6, 0xe3, 0xb7, 0xe3, 0xc9, 0x4f, 0x63,
0xd7, 0x98, 0x0e, 0xad, 0x89, 0xeb, 0xdc, 0x5c, 0x9b, 0xea, 0x1e, 0x6a, 0xc1, 0xbe, 0x61, 0x0c,
0x54, 0x89, 0x2f, 0x46, 0x58, 0xad, 0xe9, 0xff, 0x48, 0xa0, 0x98, 0x7e, 0x90, 0x09, 0xdc, 0xc7,
0xd0, 0xf0, 0xe6, 0xb1, 0x77, 0xcf, 0x51, 0xd7, 0x71, 0x6e, 0x30, 0x16, 0x33, 0xfa, 0x5b, 0xc6,
0x31, 0xcb, 0x98, 0xaf, 0xd1, 0x09, 0xb4, 0x78, 0xb3, 0x02, 0x9f, 0xa3, 0x91, 0x71, 0x93, 0x99,
0x96, 0x8f, 0xbe, 0x00, 0x28, 0x1a, 0xc8, 0xf6, 0xea, 0x7c, 0x4f, 0x2e, 0x3c, 0x96, 0xcf, 0x4e,
0xb8, 0x4b, 0x48, 0x94, 0x69, 0x0d, 0xce, 0x4b, 0x6e, 0xa0, 0xd7, 0xd0, 0x11, 0x49, 0x9c, 0x9d,
0x26, 0x67, 0xe7, 0xff, 0x25, 0x3b, 0x05, 0x40, 0x4e, 0x89, 0x12, 0x96, 0x86, 0xfe, 0x97, 0x04,
0x07, 0x43, 0x3a, 0xa7, 0x19, 0xdd, 0xfd, 0x0d, 0x15, 0xbc, 0xb5, 0x1d, 0x78, 0xf7, 0xb7, 0xe2,
0xad, 0xef, 0xc2, 0xdb, 0x78, 0x34, 0xde, 0x3f, 0x6a, 0xd0, 0x1d, 0x06, 0xa9, 0x17, 0x27, 0xbe,
0x00, 0xdc, 0x85, 0x5a, 0xe0, 0x17, 0xb2, 0xad, 0x05, 0x3e, 0xa7, 0x5b, 0x48, 0x44, 0x2e, 0x04,
0x70, 0x0a, 0x72, 0x16, 0x84, 0x34, 0xcd, 0x48, 0xb8, 0x10, 0x20, 0x57, 0x0e, 0xd4, 0x83, 0xc3,
0x95, 0xc1, 0xda, 0x49, 0x05, 0xf1, 0x9b, 0x6e, 0x26, 0x4c, 0x2f, 0x8e, 0x32, 0x5a, 0x34, 0x40,
0xc6, 0xc2, 0x44, 0xdf, 0x40, 0x93, 0x2c, 0xb3, 0x59, 0x9c, 0x70, 0xf2, 0x95, 0x97, 0x67, 0xe5,
0xc7, 0xac, 0xe3, 0x35, 0x78, 0x14, 0x2e, 0xa2, 0xd1, 0x77, 0x20, 0x27, 0xf4, 0x96, 0x26, 0x34,
0xf2, 0xa8, 0xd6, 0xe2, 0xa9, 0xcf, 0xb6, 0xa5, 0x62, 0x11, 0x88, 0xcb, 0x1c, 0xfd, 0x4f, 0x09,
0x8e, 0x3f, 0x76, 0xc2, 0xc7, 0x78, 0x89, 0x48, 0xb8, 0xe2, 0x85, 0xad, 0xd1, 0x73, 0x38, 0xf0,
0x83, 0xd4, 0x4b, 0x82, 0x30, 0x88, 0x48, 0x16, 0x27, 0x05, 0x37, 0xeb, 0x4e, 0xf4, 0x14, 0xda,
0x51, 0xe0, 0xdd, 0xf3, 0xec, 0x9c, 0x98, 0x95, 0xcd, 0x98, 0x25, 0x1f, 0x48, 0x46, 0x92, 0x69,
0x32, 0x2f, 0x38, 0x29, 0x1d, 0x7a, 0x0c, 0x27, 0x5b, 0x3e, 0x81, 0x25, 0xae, 0x64, 0x52, 0xa0,
0xac, 0xe8, 0xe6, 0x14, 0x64, 0x6f, 0x46, 0xa2, 0x88, 0xce, 0x2d, 0xa1, 0xb8, 0xd2, 0xc1, 0xda,
0x70, 0xb7, 0x0c, 0xe6, 0xbe, 0x25, 0x14, 0x27, 0x4c, 0xfd, 0xdf, 0x36, 0x28, 0x83, 0x19, 0xf9,
0xc4, 0x8d, 0x5c, 0x93, 0x43, 0x8d, 0xef, 0x54, 0xe4, 0x20, 0xee, 0xeb, 0x7e, 0xe5, 0xbe, 0x9e,
0x83, 0x92, 0xd0, 0x74, 0x11, 0x47, 0x29, 0x75, 0xb3, 0xb8, 0x60, 0x01, 0x84, 0xcb, 0x89, 0xd1,
0x67, 0xd0, 0xa6, 0x51, 0xea, 0x72, 0x8e, 0x0a, 0x69, 0xd0, 0x28, 0x1d, 0x33, 0x8a, 0x2a, 0x77,
0xa7, 0xb9, 0x76, 0x77, 0x36, 0xaf, 0x41, 0xeb, 0xb1, 0xd7, 0x00, 0x0d, 0xa1, 0x53, 0x08, 0x2f,
0xcf, 0x6c, 0xf3, 0xcc, 0x8a, 0x70, 0x2a, 0x1c, 0xf4, 0x07, 0x79, 0x64, 0x5e, 0xc5, 0x2b, 0x0d,
0xf4, 0x0a, 0x5a, 0x69, 0xfe, 0x08, 0x68, 0x32, 0x57, 0x9e, 0x56, 0x16, 0x58, 0x7f, 0x1d, 0xae,
0xf6, 0xb0, 0x08, 0x45, 0x7d, 0x68, 0x04, 0x6c, 0x80, 0x6b, 0xc0, 0x73, 0x9e, 0x6c, 0xcc, 0xf5,
0x32, 0x23, 0x0f, 0x63, 0xf1, 0x84, 0xcd, 0x56, 0x4d, 0xd9, 0x8c, 0xaf, 0xce, 0x6c, 0x16, 0xcf,
0xc3, 0xd0, 0x19, 0xc8, 0x5e, 0x1c, 0x86, 0xcb, 0x28, 0xc8, 0x1e, 0xb4, 0x0e, 0x1b, 0x1b, 0x57,
0x7b, 0xb8, 0x74, 0xa1, 0x01, 0x1c, 0xfa, 0xb9, 0xa6, 0xc4, 0x53, 0xa7, 0x79, 0x9b, 0xe8, 0xd7,
0x45, 0x77, 0xb5, 0x87, 0xbb, 0xfe, 0xfa, 0xd0, 0x58, 0xcd, 0xa5, 0x83, 0xea, 0x5c, 0x7a, 0x06,
0x1d, 0x3f, 0x48, 0x17, 0x73, 0xf2, 0x90, 0x37, 0xb2, 0xcb, 0xdb, 0xa5, 0x14, 0x3e, 0xde, 0xcc,
0x5b, 0x38, 0x4b, 0x19, 0xed, 0x8c, 0x47, 0xe2, 0x65, 0x6e, 0x42, 0x7f, 0x5d, 0xd2, 0x34, 0x73,
0xd3, 0xe0, 0x2e, 0x22, 0xd9, 0x32, 0xa1, 0xda, 0xe1, 0xe6, 0x25, 0x1e, 0xe4, 0xa1, 0x38, 0x8f,
0xb4, 0x45, 0x20, 0xfe, 0x9c, 0x15, 0xda, 0xb2, 0x89, 0x22, 0xd0, 0x13, 0xea, 0xd1, 0xe0, 0x03,
0xf5, 0x77, 0x9c, 0xa5, 0x3e, 0xf6, 0xac, 0x73, 0x51, 0x6c, 0xdb, 0x79, 0x2f, 0xe0, 0x50, 0x1c,
0x23, 0x58, 0xfd, 0xdf, 0x85, 0xd4, 0x6b, 0xe3, 0x6e, 0xe1, 0x2e, 0x98, 0xd3, 0x7f, 0xaf, 0x81,
0x52, 0x51, 0x14, 0xd2, 0xe0, 0x58, 0xbc, 0x96, 0x83, 0xc9, 0xd8, 0x31, 0xc7, 0x8e, 0x78, 0x2f,
0xbb, 0x00, 0x8e, 0xf9, 0xb3, 0xe3, 0x5e, 0xff, 0x60, 0x58, 0x63, 0x55, 0x42, 0x0a, 0xb4, 0x6c,
0xc7, 0x1a, 0xbc, 0x35, 0xb1, 0x5a, 0x43, 0x00, 0x4d, 0xdb, 0x31, 0x9c, 0xa9, 0xad, 0xee, 0x23,
0x19, 0x1a, 0xe6, 0x68, 0xf2, 0xbd, 0xa5, 0xd6, 0xd1, 0x09, 0x1c, 0x39, 0xd8, 0x18, 0xdb, 0xc6,
0xc0, 0xb1, 0x26, 0xac, 0xe2, 0x68, 0x64, 0x8c, 0x87, 0x6a, 0x03, 0xf5, 0xe0, 0xb9, 0x7d, 0x63,
0x3b, 0xe6, 0xc8, 0x1d, 0x99, 0xb6, 0x6d, 0x5c, 0x9a, 0xab, 0xd3, 0xae, 0xb1, 0xf5, 0xa3, 0xe1,
0x98, 0xee, 0x25, 0x9e, 0x4c, 0xaf, 0xd5, 0x26, 0xab, 0x66, 0x8d, 0x8c, 0x4b, 0x53, 0x6d, 0xb1,
0x25, 0x7f, 0xc1, 0xd5, 0x36, 0x3a, 0x00, 0x99, 0x15, 0x9b, 0x8e, 0x2d, 0xe7, 0x46, 0x95, 0xd9,
0x1b, 0xbf, 0x51, 0xee, 0xd2, 0xb8, 0x56, 0x01, 0x1d, 0xc1, 0x21, 0xab, 0x6b, 0x0c, 0x1c, 0x17,
0x9b, 0xef, 0xa6, 0xa6, 0xed, 0xa8, 0x0a, 0x73, 0x0e, 0x2d, 0x7b, 0x30, 0xc1, 0x43, 0x11, 0xad,
0x76, 0xde, 0xc8, 0xab, 0xff, 0x28, 0xfa, 0x14, 0x4e, 0xb6, 0xd1, 0x7a, 0x0a, 0x72, 0xd9, 0xad,
0xfc, 0xbf, 0x4c, 0xe9, 0xd8, 0x3d, 0x87, 0xde, 0x1c, 0xfc, 0xa2, 0xf4, 0xbf, 0xfc, 0x56, 0xb4,
0xf6, 0x7d, 0x93, 0xaf, 0xbe, 0xfa, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x81, 0x52, 0xd1, 0xf4, 0xe6,
0x09, 0x00, 0x00,
}

View file

@ -61,6 +61,7 @@ message DiscordMessage {
string timestampEdited = 4;
string content = 5;
DiscordMessageAuthor author = 6;
DiscordMessageReference reference = 7;
}
message DiscordMessageAuthor {
@ -71,6 +72,12 @@ message DiscordMessageAuthor {
string avatarUrl = 5;
}
message DiscordMessageReference {
string messageId = 1;
string channelId = 2;
string guildId = 3;
}
message ChatMessage {
// Lamport timestamp of the chat message
uint64 clock = 1;
@ -99,6 +106,7 @@ message ChatMessage {
ImageMessage image = 10;
AudioMessage audio = 11;
bytes community = 12;
DiscordMessage discord_message = 99;
}
// Grant for community chat messages
@ -126,6 +134,7 @@ message ChatMessage {
// Only local
SYSTEM_MESSAGE_GAP = 10;
CONTACT_REQUEST = 11;
DISCORD_MESSAGE = 12;
}