aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBohdan Horbeshko <bodqhrohro@gmail.com>2023-09-19 14:31:24 +0300
committerBohdan Horbeshko <bodqhrohro@gmail.com>2023-09-19 14:31:24 +0300
commite8bde731642f50c8d272c33343ec78ca70405377 (patch)
tree2284bfff27c5f9b5019e333123a5314b9d4f1a86
parente77caf2c42c079062ade31f928a40b7654ac9bfd (diff)
Original sender JID in MUCs (why?)
-rw-r--r--telegram/handlers.go2
-rw-r--r--telegram/utils.go11
-rw-r--r--xmpp/extensions/extensions.go19
-rw-r--r--xmpp/gateway/gateway.go24
4 files changed, 46 insertions, 10 deletions
diff --git a/telegram/handlers.go b/telegram/handlers.go
index b7277e8..8facc10 100644
--- a/telegram/handlers.go
+++ b/telegram/handlers.go
@@ -265,7 +265,7 @@ func (c *Client) updateMessageContent(update *client.UpdateMessageContent) {
markupFunction,
))
for _, jid := range jids {
- gateway.SendMessage(jid, strconv.FormatInt(update.ChatId, 10), text, "e"+strconv.FormatInt(update.MessageId, 10), c.xmpp, nil, 0, false, false)
+ gateway.SendMessage(jid, strconv.FormatInt(update.ChatId, 10), text, "e"+strconv.FormatInt(update.MessageId, 10), c.xmpp, nil, 0, false, false, "")
}
}
}
diff --git a/telegram/utils.go b/telegram/utils.go
index 036956b..fd7a433 100644
--- a/telegram/utils.go
+++ b/telegram/utils.go
@@ -1046,12 +1046,18 @@ func (c *Client) sendMessageToGateway(chatId int64, message *client.Message, del
var isCarbon bool
var jids []string
var isGroupchat bool
+ var originalFrom string
if len(groupChatTos) == 0 {
isCarbon = gateway.MessageOutgoingPermissionVersion > 0 && c.Session.Carbons && message.IsOutgoing
jids = c.getCarbonFullJids(isCarbon, "")
} else {
isGroupchat = true
jids = groupChatTos
+
+ senderId := c.getSenderId(message)
+ if senderId != 0 {
+ originalFrom = strconv.FormatInt(senderId, 10) + "@" + gateway.Jid.Full()
+ }
}
var text, oob, auxText string
@@ -1138,9 +1144,9 @@ func (c *Client) sendMessageToGateway(chatId int64, message *client.Message, del
}
for _, jid := range jids {
- gateway.SendMessageWithOOB(jid, from, text, sId, c.xmpp, reply, timestamp, oob, isCarbon, isGroupchat)
+ gateway.SendMessageWithOOB(jid, from, text, sId, c.xmpp, reply, timestamp, oob, isCarbon, isGroupchat, originalFrom)
if auxText != "" {
- gateway.SendMessage(jid, from, auxText, sId, c.xmpp, reply, timestamp, isCarbon, isGroupchat)
+ gateway.SendMessage(jid, from, auxText, sId, c.xmpp, reply, timestamp, isCarbon, isGroupchat, originalFrom)
}
}
}
@@ -1768,6 +1774,7 @@ func (c *Client) sendMessagesReverse(chatID int64, messages []*client.Message, p
0,
false,
false,
+ "",
)
} else {
c.sendMessageToGateway(
diff --git a/xmpp/extensions/extensions.go b/xmpp/extensions/extensions.go
index 679b428..41a58fa 100644
--- a/xmpp/extensions/extensions.go
+++ b/xmpp/extensions/extensions.go
@@ -248,6 +248,19 @@ type MessageDelayLegacy struct {
Stamp string `xml:"stamp,attr"`
}
+// MessageAddresses is from XEP-0033
+type MessageAddresses struct {
+ XMLName xml.Name `xml:"http://jabber.org/protocol/address addresses"`
+ Addresses []MessageAddress
+}
+
+// MessageAddress is from XEP-0033
+type MessageAddress struct {
+ XMLName xml.Name `xml:"address"`
+ Type string `xml:"type,attr"`
+ Jid string `xml:"jid,attr"`
+}
+
// Namespace is a namespace!
func (c PresenceNickExtension) Namespace() string {
return c.XMLName.Space
@@ -430,4 +443,10 @@ func init() {
"jabber:x:delay",
"x",
}, MessageDelayLegacy{})
+
+ // message addresses
+ stanza.TypeRegistry.MapExtension(stanza.PKTMessage, xml.Name{
+ "http://jabber.org/protocol/address",
+ "addresses",
+ }, MessageAddresses{})
}
diff --git a/xmpp/gateway/gateway.go b/xmpp/gateway/gateway.go
index 074d2d0..a831db6 100644
--- a/xmpp/gateway/gateway.go
+++ b/xmpp/gateway/gateway.go
@@ -43,26 +43,26 @@ var DirtySessions = false
var MessageOutgoingPermissionVersion = 0
// SendMessage creates and sends a message stanza
-func SendMessage(to string, from string, body string, id string, component *xmpp.Component, reply *Reply, timestamp int64, isCarbon, isGroupchat bool) {
- sendMessageWrapper(to, from, body, id, component, reply, timestamp, "", isCarbon, isGroupchat)
+func SendMessage(to string, from string, body string, id string, component *xmpp.Component, reply *Reply, timestamp int64, isCarbon, isGroupchat bool, originalFrom string) {
+ sendMessageWrapper(to, from, body, id, component, reply, timestamp, "", isCarbon, isGroupchat, originalFrom)
}
// SendServiceMessage creates and sends a simple message stanza from transport
func SendServiceMessage(to string, body string, component *xmpp.Component) {
- sendMessageWrapper(to, "", body, "", component, nil, 0, "", false, false)
+ sendMessageWrapper(to, "", body, "", component, nil, 0, "", false, false, "")
}
// SendTextMessage creates and sends a simple message stanza
func SendTextMessage(to string, from string, body string, component *xmpp.Component) {
- sendMessageWrapper(to, from, body, "", component, nil, 0, "", false, false)
+ sendMessageWrapper(to, from, body, "", component, nil, 0, "", false, false, "")
}
// SendMessageWithOOB creates and sends a message stanza with OOB URL
-func SendMessageWithOOB(to string, from string, body string, id string, component *xmpp.Component, reply *Reply, timestamp int64, oob string, isCarbon bool, isGroupchat bool) {
- sendMessageWrapper(to, from, body, id, component, reply, timestamp, oob, isCarbon, isGroupchat)
+func SendMessageWithOOB(to string, from string, body string, id string, component *xmpp.Component, reply *Reply, timestamp int64, oob string, isCarbon bool, isGroupchat bool, originalFrom string) {
+ sendMessageWrapper(to, from, body, id, component, reply, timestamp, oob, isCarbon, isGroupchat, originalFrom)
}
-func sendMessageWrapper(to string, from string, body string, id string, component *xmpp.Component, reply *Reply, timestamp int64, oob string, isCarbon bool, isGroupchat bool) {
+func sendMessageWrapper(to string, from string, body string, id string, component *xmpp.Component, reply *Reply, timestamp int64, oob string, isCarbon bool, isGroupchat bool, originalFrom string) {
toJid, err := stanza.NewJid(to)
if err != nil {
log.WithFields(log.Fields{
@@ -149,6 +149,16 @@ func sendMessageWrapper(to string, from string, body string, id string, componen
Stamp: time.Unix(timestamp, 0).UTC().Format("20060102T15:04:05"),
})
}
+ if originalFrom != "" {
+ message.Extensions = append(message.Extensions, extensions.MessageAddresses{
+ Addresses: []extensions.MessageAddress{
+ extensions.MessageAddress{
+ Type: "ofrom",
+ Jid: originalFrom,
+ },
+ },
+ })
+ }
if isCarbon {
carbonMessage := extensions.ClientMessage{