Display outgoing MUC messages
This commit is contained in:
parent
41503c7fd4
commit
b70bb53c6d
|
@ -362,7 +362,7 @@ func (c *Client) sendMUCStatuses(chatID int64) {
|
||||||
senderId = memberChat.ChatId
|
senderId = memberChat.ChatId
|
||||||
}
|
}
|
||||||
|
|
||||||
nickname := c.getMUCNickname(senderId)
|
nickname := c.GetMUCNickname(senderId)
|
||||||
affiliation := c.memberStatusToAffiliation(member.Status)
|
affiliation := c.memberStatusToAffiliation(member.Status)
|
||||||
if c.me != nil && senderId == c.me.Id {
|
if c.me != nil && senderId == c.me.Id {
|
||||||
myNickname = nickname
|
myNickname = nickname
|
||||||
|
@ -403,7 +403,7 @@ func (c *Client) sendMUCSubject(chatID int64, resource string) {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
gateway.SendSubjectMessage(
|
gateway.SendSubjectMessage(
|
||||||
toJid,
|
toJid,
|
||||||
mucJid + "/" + c.getMUCNickname(c.getSenderId(pin)),
|
mucJid + "/" + c.GetMUCNickname(c.GetSenderId(pin)),
|
||||||
c.messageToText(pin, false),
|
c.messageToText(pin, false),
|
||||||
strconv.FormatInt(pin.Id, 10),
|
strconv.FormatInt(pin.Id, 10),
|
||||||
c.xmpp,
|
c.xmpp,
|
||||||
|
@ -414,7 +414,8 @@ func (c *Client) sendMUCSubject(chatID int64, resource string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) getMUCNickname(chatID int64) string {
|
// GetMUCNickname generates a unique nickname for a MUC member
|
||||||
|
func (c *Client) GetMUCNickname(chatID int64) string {
|
||||||
return c.formatContact(chatID)
|
return c.formatContact(chatID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -450,7 +451,8 @@ func (c *Client) formatContact(chatID int64) string {
|
||||||
return str
|
return str
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) getSenderId(message *client.Message) (senderId int64) {
|
// GetSenderId extracts a sender id from a message
|
||||||
|
func (c *Client) GetSenderId(message *client.Message) (senderId int64) {
|
||||||
if message.SenderId != nil {
|
if message.SenderId != nil {
|
||||||
switch message.SenderId.MessageSenderType() {
|
switch message.SenderId.MessageSenderType() {
|
||||||
case client.TypeMessageSenderUser:
|
case client.TypeMessageSenderUser:
|
||||||
|
@ -466,7 +468,7 @@ func (c *Client) getSenderId(message *client.Message) (senderId int64) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) formatSender(message *client.Message) string {
|
func (c *Client) formatSender(message *client.Message) string {
|
||||||
return c.formatContact(c.getSenderId(message))
|
return c.formatContact(c.GetSenderId(message))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) getMessageReply(message *client.Message) (reply *gateway.Reply, replyMsg *client.Message) {
|
func (c *Client) getMessageReply(message *client.Message) (reply *gateway.Reply, replyMsg *client.Message) {
|
||||||
|
@ -486,7 +488,7 @@ func (c *Client) getMessageReply(message *client.Message) (reply *gateway.Reply,
|
||||||
replyId = strconv.FormatInt(message.ReplyToMessageId, 10)
|
replyId = strconv.FormatInt(message.ReplyToMessageId, 10)
|
||||||
}
|
}
|
||||||
reply = &gateway.Reply{
|
reply = &gateway.Reply{
|
||||||
Author: fmt.Sprintf("%v@%s", c.getSenderId(replyMsg), gateway.Jid.Full()),
|
Author: fmt.Sprintf("%v@%s", c.GetSenderId(replyMsg), gateway.Jid.Full()),
|
||||||
Id: replyId,
|
Id: replyId,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1006,7 +1008,7 @@ func (c *Client) messageToPrefix(message *client.Message, previewString string,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if chatType != ChatTypePM || !c.Session.HideIds {
|
if (chatType != ChatTypePM && !c.Session.MUC) || !c.Session.HideIds {
|
||||||
prefix = append(prefix, directionChar+strconv.FormatInt(message.Id, 10))
|
prefix = append(prefix, directionChar+strconv.FormatInt(message.Id, 10))
|
||||||
}
|
}
|
||||||
// show sender in group chats
|
// show sender in group chats
|
||||||
|
@ -1059,12 +1061,13 @@ func (c *Client) ensureDownloadFile(file *client.File) *client.File {
|
||||||
return file
|
return file
|
||||||
}
|
}
|
||||||
|
|
||||||
// ProcessIncomingMessage transfers a message to XMPP side and marks it as read on Telegram side
|
// ProcessIncomingMessage is a legacy wrapper for SendMessageToGateway aiming only PM messages
|
||||||
func (c *Client) ProcessIncomingMessage(chatId int64, message *client.Message) {
|
func (c *Client) ProcessIncomingMessage(chatId int64, message *client.Message) {
|
||||||
c.sendMessageToGateway(chatId, message, false, "", []string{})
|
c.SendMessageToGateway(chatId, message, "", false, "", []string{})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) sendMessageToGateway(chatId int64, message *client.Message, delay bool, groupChatFrom string, groupChatTos []string) {
|
// SendMessageToGateway transfers a message to XMPP side and marks it as read on Telegram side
|
||||||
|
func (c *Client) SendMessageToGateway(chatId int64, message *client.Message, id string, delay bool, groupChatFrom string, groupChatTos []string) {
|
||||||
var isCarbon bool
|
var isCarbon bool
|
||||||
var jids []string
|
var jids []string
|
||||||
var isGroupchat bool
|
var isGroupchat bool
|
||||||
|
@ -1076,7 +1079,7 @@ func (c *Client) sendMessageToGateway(chatId int64, message *client.Message, del
|
||||||
isGroupchat = true
|
isGroupchat = true
|
||||||
jids = groupChatTos
|
jids = groupChatTos
|
||||||
|
|
||||||
senderId := c.getSenderId(message)
|
senderId := c.GetSenderId(message)
|
||||||
if senderId != 0 {
|
if senderId != 0 {
|
||||||
originalFrom = strconv.FormatInt(senderId, 10) + "@" + gateway.Jid.Full()
|
originalFrom = strconv.FormatInt(senderId, 10) + "@" + gateway.Jid.Full()
|
||||||
}
|
}
|
||||||
|
@ -1152,7 +1155,13 @@ func (c *Client) sendMessageToGateway(chatId int64, message *client.Message, del
|
||||||
})
|
})
|
||||||
|
|
||||||
// forward message to XMPP
|
// forward message to XMPP
|
||||||
sId := strconv.FormatInt(message.Id, 10)
|
var sId string
|
||||||
|
if id == "" {
|
||||||
|
sId = strconv.FormatInt(message.Id, 10)
|
||||||
|
} else {
|
||||||
|
sId = id
|
||||||
|
}
|
||||||
|
|
||||||
var from string
|
var from string
|
||||||
if groupChatFrom == "" {
|
if groupChatFrom == "" {
|
||||||
from = strconv.FormatInt(chatId, 10)
|
from = strconv.FormatInt(chatId, 10)
|
||||||
|
@ -1179,10 +1188,10 @@ func (c *Client) PrepareOutgoingMessageContent(text string) client.InputMessageC
|
||||||
}
|
}
|
||||||
|
|
||||||
// ProcessOutgoingMessage executes commands or sends messages to mapped chats, returns message id
|
// ProcessOutgoingMessage executes commands or sends messages to mapped chats, returns message id
|
||||||
func (c *Client) ProcessOutgoingMessage(chatID int64, text string, returnJid string, replyId int64, replaceId int64) int64 {
|
func (c *Client) ProcessOutgoingMessage(chatID int64, text string, returnJid string, replyId int64, replaceId int64) *client.Message {
|
||||||
if !c.Online() {
|
if !c.Online() {
|
||||||
// we're offline
|
// we're offline
|
||||||
return 0
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if replaceId == 0 && (strings.HasPrefix(text, "/") || strings.HasPrefix(text, "!")) {
|
if replaceId == 0 && (strings.HasPrefix(text, "/") || strings.HasPrefix(text, "!")) {
|
||||||
|
@ -1193,7 +1202,7 @@ func (c *Client) ProcessOutgoingMessage(chatID int64, text string, returnJid str
|
||||||
}
|
}
|
||||||
// do not send on success
|
// do not send on success
|
||||||
if isCommand {
|
if isCommand {
|
||||||
return 0
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1264,9 +1273,9 @@ func (c *Client) ProcessOutgoingMessage(chatID int64, text string, returnJid str
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.returnError(returnJid, chatID, "Not edited", err)
|
c.returnError(returnJid, chatID, "Not edited", err)
|
||||||
return 0
|
return nil
|
||||||
}
|
}
|
||||||
return tgMessage.Id
|
return tgMessage
|
||||||
}
|
}
|
||||||
|
|
||||||
tgMessage, err := c.client.SendMessage(&client.SendMessageRequest{
|
tgMessage, err := c.client.SendMessage(&client.SendMessageRequest{
|
||||||
|
@ -1276,9 +1285,9 @@ func (c *Client) ProcessOutgoingMessage(chatID int64, text string, returnJid str
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.returnError(returnJid, chatID, "Not sent", err)
|
c.returnError(returnJid, chatID, "Not sent", err)
|
||||||
return 0
|
return nil
|
||||||
}
|
}
|
||||||
return tgMessage.Id
|
return tgMessage
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) returnMessage(returnJid string, chatID int64, text string) {
|
func (c *Client) returnMessage(returnJid string, chatID int64, text string) {
|
||||||
|
@ -1799,11 +1808,12 @@ func (c *Client) sendMessagesReverse(chatID int64, messages []*client.Message, p
|
||||||
"",
|
"",
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
c.sendMessageToGateway(
|
c.SendMessageToGateway(
|
||||||
chatID,
|
chatID,
|
||||||
message,
|
message,
|
||||||
|
"",
|
||||||
true,
|
true,
|
||||||
mucJid + "/" + c.getMUCNickname(c.getSenderId(message)),
|
mucJid + "/" + c.GetMUCNickname(c.GetSenderId(message)),
|
||||||
[]string{toJid},
|
[]string{toJid},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -197,8 +197,8 @@ func HandleMessage(s xmpp.Sender, p stanza.Packet) {
|
||||||
|
|
||||||
session.SendMessageLock.Lock()
|
session.SendMessageLock.Lock()
|
||||||
defer session.SendMessageLock.Unlock()
|
defer session.SendMessageLock.Unlock()
|
||||||
tgMessageId := session.ProcessOutgoingMessage(toID, text, msg.From, replyId, replaceId)
|
tgMessage := session.ProcessOutgoingMessage(toID, text, msg.From, replyId, replaceId)
|
||||||
if tgMessageId != 0 {
|
if tgMessage != nil {
|
||||||
if replaceId != 0 {
|
if replaceId != 0 {
|
||||||
// not needed (is it persistent among clients though?)
|
// not needed (is it persistent among clients though?)
|
||||||
/* err = gateway.IdsDB.ReplaceIdPair(session.Session.Login, bare, replace.Id, msg.Id, tgMessageId)
|
/* err = gateway.IdsDB.ReplaceIdPair(session.Session.Login, bare, replace.Id, msg.Id, tgMessageId)
|
||||||
|
@ -207,9 +207,24 @@ func HandleMessage(s xmpp.Sender, p stanza.Packet) {
|
||||||
} */
|
} */
|
||||||
session.AddToOutbox(replace.Id, resource)
|
session.AddToOutbox(replace.Id, resource)
|
||||||
} else {
|
} else {
|
||||||
err = gateway.IdsDB.Set(session.Session.Login, bare, toID, tgMessageId, msg.Id)
|
err = gateway.IdsDB.Set(session.Session.Login, bare, toID, tgMessage.Id, msg.Id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("Failed to save ids %v/%v %v", toID, tgMessageId, msg.Id)
|
log.Errorf("Failed to save ids %v/%v %v", toID, tgMessage.Id, msg.Id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// pong groupchat messages back
|
||||||
|
if msg.Type == "groupchat" {
|
||||||
|
toJid, err := stanza.NewJid(msg.To)
|
||||||
|
if err == nil && toJid.Resource == "" {
|
||||||
|
session.SendMessageToGateway(
|
||||||
|
toID,
|
||||||
|
tgMessage,
|
||||||
|
msg.Id,
|
||||||
|
false,
|
||||||
|
msg.To + "/" + session.GetMUCNickname(session.GetSenderId(tgMessage)),
|
||||||
|
[]string{msg.From},
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in a new issue