diff --git a/telegram/commands.go b/telegram/commands.go index 2f879b1..184ebfc 100644 --- a/telegram/commands.go +++ b/telegram/commands.go @@ -200,6 +200,7 @@ func (c *Client) sendMessagesReverse(chatID int64, messages []*client.Message) { c.xmpp, reply, false, + "", ) } } diff --git a/telegram/handlers.go b/telegram/handlers.go index 57402ab..8457b05 100644 --- a/telegram/handlers.go +++ b/telegram/handlers.go @@ -242,7 +242,7 @@ func (c *Client) updateMessageContent(update *client.UpdateMessageContent) { textContent.Text.Entities, markupFunction, )) - gateway.SendMessage(c.jid, strconv.FormatInt(update.ChatId, 10), text, "e"+strconv.FormatInt(update.MessageId, 10), c.xmpp, nil, false) + gateway.SendMessage(c.jid, strconv.FormatInt(update.ChatId, 10), text, "e"+strconv.FormatInt(update.MessageId, 10), c.xmpp, nil, false, "") } } diff --git a/telegram/utils.go b/telegram/utils.go index 58f7712..fe00467 100644 --- a/telegram/utils.go +++ b/telegram/utils.go @@ -891,13 +891,22 @@ func (c *Client) ensureDownloadFile(file *client.File) *client.File { // ProcessIncomingMessage transfers a message to XMPP side and marks it as read on Telegram side func (c *Client) ProcessIncomingMessage(chatId int64, message *client.Message) { - var text, oob, auxText string + var text, oob, auxText, nick, contentType string var err error reply, replyMsg := c.getMessageReply(message) content := message.Content - if content != nil && content.MessageContentType() == client.TypeMessageChatChangePhoto { + if content != nil { + contentType = content.MessageContentType() + } + + if contentType == client.TypeMessageChatChangeTitle { + changeTitle, _ := content.(*client.MessageChatChangeTitle) + nick = changeTitle.Title + } + + if contentType == client.TypeMessageChatChangePhoto { chat, err := c.client.GetChat(&client.GetChatRequest{ ChatId: chatId, }) @@ -983,9 +992,9 @@ func (c *Client) ProcessIncomingMessage(chatId int64, message *client.Message) { } for _, jid := range jids { - gateway.SendMessageWithOOB(jid, sChatId, text, sId, c.xmpp, reply, oob, isOutgoing) + gateway.SendMessageWithOOB(jid, sChatId, text, sId, c.xmpp, reply, oob, isOutgoing, nick) if auxText != "" { - gateway.SendMessage(jid, sChatId, auxText, sId, c.xmpp, reply, isOutgoing) + gateway.SendMessage(jid, sChatId, auxText, sId, c.xmpp, reply, isOutgoing, nick) } } } diff --git a/xmpp/extensions/extensions.go b/xmpp/extensions/extensions.go index 2d547af..dd90e35 100644 --- a/xmpp/extensions/extensions.go +++ b/xmpp/extensions/extensions.go @@ -7,8 +7,8 @@ import ( "gosrc.io/xmpp/stanza" ) -// PresenceNickExtension is from XEP-0172 -type PresenceNickExtension struct { +// NickExtension is from XEP-0172 +type NickExtension struct { XMLName xml.Name `xml:"http://jabber.org/protocol/nick nick"` Text string `xml:",chardata"` } @@ -187,7 +187,7 @@ type Replace struct { } // Namespace is a namespace! -func (c PresenceNickExtension) Namespace() string { +func (c NickExtension) Namespace() string { return c.XMLName.Space } @@ -259,7 +259,13 @@ func init() { stanza.TypeRegistry.MapExtension(stanza.PKTPresence, xml.Name{ "http://jabber.org/protocol/nick", "nick", - }, PresenceNickExtension{}) + }, NickExtension{}) + + // message nick + stanza.TypeRegistry.MapExtension(stanza.PKTMessage, xml.Name{ + "http://jabber.org/protocol/nick", + "nick", + }, NickExtension{}) // presence vcard update stanza.TypeRegistry.MapExtension(stanza.PKTPresence, xml.Name{ diff --git a/xmpp/gateway/gateway.go b/xmpp/gateway/gateway.go index 29c8a07..5761c84 100644 --- a/xmpp/gateway/gateway.go +++ b/xmpp/gateway/gateway.go @@ -42,26 +42,26 @@ var DirtySessions = false var MessageOutgoingPermission = false // SendMessage creates and sends a message stanza -func SendMessage(to string, from string, body string, id string, component *xmpp.Component, reply *Reply, isOutgoing bool) { - sendMessageWrapper(to, from, body, id, component, reply, "", isOutgoing) +func SendMessage(to string, from string, body string, id string, component *xmpp.Component, reply *Reply, isOutgoing bool, nick string) { + sendMessageWrapper(to, from, body, id, component, reply, "", isOutgoing, nick) } // SendServiceMessage creates and sends a simple message stanza from transport func SendServiceMessage(to string, body string, component *xmpp.Component) { - sendMessageWrapper(to, "", body, "", component, nil, "", false) + sendMessageWrapper(to, "", body, "", component, nil, "", 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, "", false) + sendMessageWrapper(to, from, body, "", component, nil, "", 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, oob string, isOutgoing bool) { - sendMessageWrapper(to, from, body, id, component, reply, oob, isOutgoing) +func SendMessageWithOOB(to string, from string, body string, id string, component *xmpp.Component, reply *Reply, oob string, isOutgoing bool, nick string) { + sendMessageWrapper(to, from, body, id, component, reply, oob, isOutgoing, nick) } -func sendMessageWrapper(to string, from string, body string, id string, component *xmpp.Component, reply *Reply, oob string, isOutgoing bool) { +func sendMessageWrapper(to string, from string, body string, id string, component *xmpp.Component, reply *Reply, oob string, isOutgoing bool, nick string) { toJid, err := stanza.NewJid(to) if err != nil { log.WithFields(log.Fields{ @@ -119,6 +119,11 @@ func sendMessageWrapper(to string, from string, body string, id string, componen message.Extensions = append(message.Extensions, extensions.NewReplyFallback(reply.Start, reply.End)) } } + if nick != "" { + message.Extensions = append(message.Extensions, extensions.NickExtension{ + Text: nick, + }) + } if isOutgoing { carbonMessage := extensions.ClientMessage{ @@ -269,7 +274,7 @@ func newPresence(bareJid string, to string, args ...args.V) stanza.Presence { if SPNickname.IsSet(args) { nickname := SPNickname.Get(args) if nickname != "" { - presence.Extensions = append(presence.Extensions, extensions.PresenceNickExtension{ + presence.Extensions = append(presence.Extensions, extensions.NickExtension{ Text: nickname, }) }