multi-client but one ntg search, nontrivial config.json change

This commit is contained in:
Bel LaPointe
2022-01-11 22:54:18 -05:00
parent 5a4bcecac7
commit e546034c26
8 changed files with 138 additions and 54 deletions

View File

@@ -13,7 +13,6 @@ type Matrix struct {
username string
token string
room string
client string
}
func NewMatrix() Matrix {
@@ -24,7 +23,6 @@ func NewMatrix() Matrix {
token: conf.Token,
room: conf.Room,
mock: conf.Mock,
client: conf.Client,
}
}
@@ -32,32 +30,51 @@ func (m Matrix) getclient() (*gomatrix.Client, error) {
return gomatrix.NewClient(m.homeserver, m.username, m.token)
}
func (m Matrix) Receive() ([]string, error) {
func (m Matrix) Receive() ([]Message, error) {
if m.mock {
log.Printf("matrix.Receive()")
return []string{"FL, GA, NC"}, nil
messages := make([]Message, 0)
for k := range config.Get().Clients {
messages = append(messages, Message{Sender: k, Content: "OH"})
}
return messages, nil
}
clients := config.Get().Clients
matrixIDs := map[string]struct{}{}
for k := range clients {
matrixIDs[clients[k].IDs.Matrix] = struct{}{}
}
if len(matrixIDs) == 0 {
return nil, nil
}
c, err := m.getclient()
if err != nil {
return nil, err
}
messages := make([]string, 0)
messages := make([]Message, 0)
result, err := c.Messages(m.room, "", "", 'b', 50)
for _, event := range result.Chunk {
if event.Sender != m.client {
if _, ok := matrixIDs[event.Sender]; !ok {
continue
}
switch event.Type {
case "m.room.message":
b, ok := event.Body()
if ok {
messages = append(messages, b)
messages = append(messages, Message{Sender: event.Sender, Content: b})
}
}
}
if err != nil {
return nil, err
}
for i := range messages {
for k, v := range config.Get().Clients {
if v.IDs.Matrix == messages[i].Sender {
messages[i].Sender = k
}
}
}
return messages, nil
}

View File

@@ -2,5 +2,10 @@ package message
type Sender interface {
Send(string) error
Receive() ([]string, error)
Receive() ([]Message, error)
}
type Message struct {
Sender string
Content string
}