commit f7f5b386568f19de91ba54a8a5e88e9d22362295
Author: Gary Kim <gary@garykim.dev>
Date: Tue Jun 01 17:17:07 2021 +0000
diff --git a/bridge/nctalk/nctalk.go b/bridge/nctalk/nctalk.go
index 4537989..9d0d451 100644
--- a/bridge/nctalk/nctalk.go
+++ b/bridge/nctalk/nctalk.go
@@ -7412 +746 @@ func (b *Btalk) JoinChannel(channel config.ChannelInfo) error {
}
b.rooms = append(b.rooms, newRoom)
- // Config
- guestSuffix := " (Guest)"
- if b.IsKeySet("GuestSuffix") {
- guestSuffix = b.GetString("GuestSuffix")
- }
-
go func() {
for msg := range c {
msg := msg
@@ -9035 +8423 @@ func (b *Btalk) JoinChannel(channel config.ChannelInfo) error {
return
}
- // ignore messages that are one of the following
- // * not a message from a user
- // * from ourselves
- if msg.MessageType != ocs.MessageComment || msg.ActorID == b.user.User {
+ // Ignore messages that are from the bot user
+ if msg.ActorID == b.user.User {
continue
}
- remoteMessage := config.Message{
- Text: formatRichObjectString(msg.Message, msg.MessageParameters),
- Channel: newRoom.room.Token,
- Username: DisplayName(msg, guestSuffix),
- UserID: msg.ActorID,
- Account: b.Account,
- }
- // It is possible for the ID to not be set on older versions of Talk so we only set it if
- // the ID is not blank
- if msg.ID != 0 {
- remoteMessage.ID = strconv.Itoa(msg.ID)
- }
- // Handle Files
- err = b.handleFiles(&remoteMessage, &msg)
- if err != nil {
- b.Log.Errorf("Error handling file: %#v", msg)
+ // Handle deleting messages
+ if msg.MessageType == ocs.MessageSystem && msg.Parent != nil && msg.Parent.MessageType == ocs.MessageDelete {
+ b.handleDeletingMessage(&msg, &newRoom)
+ continue
+ }
+ // Handle sending messages
+ if msg.MessageType == ocs.MessageComment {
+ b.handleSendingMessage(&msg, &newRoom)
continue
}
- b.Log.Debugf("<= Message is %#v", remoteMessage)
- b.Remote <- remoteMessage
}
}()
return nil
@@ -13126 +11340 @@ func (b *Btalk) Send(msg config.Message) (string, error) {
return "", nil
}
- // Talk currently only supports sending normal messages
- if msg.Event != "" {
- return "", nil
- }
+ // Standard Message Send
+ if msg.Event == "" {
+ // Handle sending files if they are included
+ err := b.handleSendingFile(&msg, r)
+ if err != nil {
+ b.Log.Errorf("Could not send files in message to room %v from %v: %v", msg.Channel, msg.Username, err)
- // Handle sending files if they are included
- err := b.handleSendingFile(&msg, r)
- if err != nil {
- b.Log.Errorf("Could not send files in message to room %v from %v: %v", msg.Channel, msg.Username, err)
+ return "", nil
+ }
- return "", nil
- }
+ sentMessage, err := r.room.SendMessage(msg.Username + msg.Text)
+ if err != nil {
+ b.Log.Errorf("Could not send message to room %v from %v: %v", msg.Channel, msg.Username, err)
- sentMessage, err := r.room.SendMessage(msg.Username + msg.Text)
- if err != nil {
- b.Log.Errorf("Could not send message to room %v from %v: %v", msg.Channel, msg.Username, err)
+ return "", nil
+ }
+ return strconv.Itoa(sentMessage.ID), nil
+ }
- return "", nil
+ // Message Deletion
+ if msg.Event == config.EventMsgDelete {
+ messageID, err := strconv.Atoi(msg.ID)
+ if err != nil {
+ return "", err
+ }
+ data, err := r.room.DeleteMessage(messageID)
+ if err != nil {
+ return "", err
+ }
+ return strconv.Itoa(data.ID), nil
}
- return strconv.Itoa(sentMessage.ID), nil
+
+ // Message is not a type that is currently supported
+ return "", nil
}
func (b *Btalk) getRoom(token string) *Broom {
@@ -2086 +20453 @@ func (b *Btalk) handleSendingFile(msg *config.Message, r *Broom) error {
return nil
}
+func (b *Btalk) handleSendingMessage(msg *ocs.TalkRoomMessageData, r *Broom) {
+ remoteMessage := config.Message{
+ Text: formatRichObjectString(msg.Message, msg.MessageParameters),
+ Channel: r.room.Token,
+ Username: DisplayName(msg, b.guestSuffix()),
+ UserID: msg.ActorID,
+ Account: b.Account,
+ }
+ // It is possible for the ID to not be set on older versions of Talk so we only set it if
+ // the ID is not blank
+ if msg.ID != 0 {
+ remoteMessage.ID = strconv.Itoa(msg.ID)
+ }
+
+ // Handle Files
+ err := b.handleFiles(&remoteMessage, msg)
+ if err != nil {
+ b.Log.Errorf("Error handling file: %#v", msg)
+
+ return
+ }
+
+ b.Log.Debugf("<= Message is %#v", remoteMessage)
+ b.Remote <- remoteMessage
+}
+
+func (b *Btalk) handleDeletingMessage(msg *ocs.TalkRoomMessageData, r *Broom) {
+ remoteMessage := config.Message{
+ Event: config.EventMsgDelete,
+ Text: config.EventMsgDelete,
+ Channel: r.room.Token,
+ ID: strconv.Itoa(msg.Parent.ID),
+ Account: b.Account,
+ }
+ b.Log.Debugf("<= Message being deleted is %#v", remoteMessage)
+ b.Remote <- remoteMessage
+}
+
+func (b *Btalk) guestSuffix() string {
+ guestSuffix := " (Guest)"
+ if b.IsKeySet("GuestSuffix") {
+ guestSuffix = b.GetString("GuestSuffix")
+ }
+
+ return guestSuffix
+}
+
// Spec: https://github.com/nextcloud/server/issues/1706#issue-182308785
func formatRichObjectString(message string, parameters map[string]ocs.RichObjectString) string {
for id, parameter := range parameters {
@@ -2287 +2717 @@ func formatRichObjectString(message string, parameters map[string]ocs.RichObject
return message
}
-func DisplayName(msg ocs.TalkRoomMessageData, suffix string) string {
+func DisplayName(msg *ocs.TalkRoomMessageData, suffix string) string {
if msg.ActorType == ocs.ActorGuest {
if msg.ActorDisplayName == "" {
return "Guest"
diff --git a/go.mod b/go.mod
index bf892fb..00f3bf7 100644
--- a/go.mod
+++ b/go.mod
@@ -577 +577 @@ require (
github.com/zfjagann/golang-ring v0.0.0-20210116075443-7c86fdb43134
golang.org/x/image v0.0.0-20210504121937-7319ad40d33e
golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c
- gomod.garykim.dev/nc-talk v0.1.7
+ gomod.garykim.dev/nc-talk v0.2.2
gopkg.in/olahol/melody.v1 v1.0.0-20170518105555-d52139073376
layeh.com/gumble v0.0.0-20200818122324-146f9205029b
)
diff --git a/go.sum b/go.sum
index 61d6a01..7ce55f2 100644
--- a/go.sum
+++ b/go.sum
@@ -12788 +12788 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-gomod.garykim.dev/nc-talk v0.1.7 h1:G2qsiRcyaj5FEADQlulsBAFJHs27tPmH9VtKK+at9SM=
-gomod.garykim.dev/nc-talk v0.1.7/go.mod h1:DNucAJ6zeaumBEwV5NiYk+Eea8Ca+Q5f+plhz9F7d58=
+gomod.garykim.dev/nc-talk v0.2.2 h1:+U+daJFPPuwM7yRXYazeMHZgIBSGP6SeQURO0O5a32I=
+gomod.garykim.dev/nc-talk v0.2.2/go.mod h1:q/Adot/H7iqi+H4lANopV7/xcMf+sX3AZXUXqiITwok=
google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
google.golang.org/api v0.0.0-20181220000619-583d854617af/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=