mirror of
https://dev.narayana.im/narayana/telegabber.git
synced 2026-08-05 04:07:07 +00:00
Join/leave a temporary occupant for edit messages with an unrecognized nickname too
This commit is contained in:
parent
cb6eaef16f
commit
b1a67f6f4e
3 changed files with 55 additions and 35 deletions
|
|
@ -284,6 +284,8 @@ func (c *Client) updateMessageContent(update *client.UpdateMessageContent) {
|
|||
}
|
||||
|
||||
if update.NewContent.MessageContentType() == client.TypeMessageText {
|
||||
safeToSend := true
|
||||
|
||||
textContent := update.NewContent.(*client.MessageText)
|
||||
log.Debugf("textContent: %#v", textContent.Text)
|
||||
|
||||
|
|
@ -321,9 +323,31 @@ func (c *Client) updateMessageContent(update *client.UpdateMessageContent) {
|
|||
}
|
||||
}
|
||||
|
||||
var forceFallback bool
|
||||
|
||||
var from string
|
||||
var originalFrom string
|
||||
var nickname string
|
||||
if isMUC {
|
||||
if messageErr == nil {
|
||||
senderId := c.getMessageSenderId(message)
|
||||
nickname = c.GetMUCNickname(senderId)
|
||||
originalFrom = gateway.CHATJID(senderId, true)
|
||||
|
||||
safeToSend = c.assureMUCOccupant(update.ChatId, senderId, message.SenderId, chat)
|
||||
from = gateway.MUCJID(update.ChatId) + "/" + nickname
|
||||
} else {
|
||||
nickname = "#ERROR#"
|
||||
forceFallback = true
|
||||
from = gateway.MUCJID(update.ChatId)
|
||||
}
|
||||
} else {
|
||||
from = gateway.CHATNODE(update.ChatId)
|
||||
}
|
||||
|
||||
var text strings.Builder
|
||||
|
||||
if replaceId == "" {
|
||||
if replaceId == "" || forceFallback {
|
||||
var editChar string
|
||||
if c.Session.AsciiArrows {
|
||||
editChar = "e"
|
||||
|
|
@ -343,28 +367,17 @@ func (c *Client) updateMessageContent(update *client.UpdateMessageContent) {
|
|||
c,
|
||||
))
|
||||
|
||||
var from string
|
||||
var originalFrom string
|
||||
if isMUC {
|
||||
var nickname string
|
||||
if messageErr == nil {
|
||||
senderId := c.getMessageSenderId(message)
|
||||
nickname = c.GetMUCNickname(senderId)
|
||||
originalFrom = gateway.CHATJID(senderId, true)
|
||||
} else {
|
||||
nickname = "#ERROR#"
|
||||
}
|
||||
from = gateway.MUCJID(update.ChatId) + "/" + nickname
|
||||
} else {
|
||||
from = gateway.CHATNODE(update.ChatId)
|
||||
}
|
||||
id := "e"+sId
|
||||
uuid, err := uuid.NewRandom()
|
||||
if err == nil {
|
||||
id = id+":"+uuid.String()
|
||||
}
|
||||
for _, jid := range jids {
|
||||
if safeToSend {
|
||||
gateway.SendMessage(jid, from, text.String(), id, c.xmpp, nil, 0, replaceId, isCarbon, isMUC, false, originalFrom, "")
|
||||
} else {
|
||||
gateway.SendMUCAnnouncement(jid, from, text.String(), nickname, id, c.xmpp)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -415,7 +428,7 @@ func (c *Client) updateDeleteMessages(update *client.UpdateDeleteMessages) {
|
|||
nickname = chat.Title
|
||||
}
|
||||
for _, jid := range jids {
|
||||
gateway.SendMUCAnnouncement(jid, fromJid, text, nickname, c.xmpp)
|
||||
gateway.SendMUCAnnouncement(jid, fromJid, text, nickname, "", c.xmpp)
|
||||
}
|
||||
} else {
|
||||
fromJid = gateway.CHATNODE(update.ChatId)
|
||||
|
|
|
|||
|
|
@ -750,6 +750,23 @@ func (c *Client) updateMUCOccupants(mucState *MUCState, chatID int64, members []
|
|||
)
|
||||
}
|
||||
|
||||
func (c *Client) assureMUCOccupant(chatId, senderId int64, messageSender client.MessageSender, chat *client.Chat) bool {
|
||||
safeToSend := true
|
||||
if !c.mucCacheHasOccupant(chatId, senderId) {
|
||||
chatMember, err := c.client.GetChatMember(&client.GetChatMemberRequest{
|
||||
ChatId: chatId,
|
||||
MemberId: messageSender,
|
||||
})
|
||||
var status client.ChatMemberStatus
|
||||
if err == nil {
|
||||
status = chatMember.Status
|
||||
}
|
||||
affiliation, role := c.memberStatusToAffiliationAndRole(status, chat)
|
||||
safeToSend = c.addMUCOccupant(chatId, senderId, affiliation, role, status)
|
||||
}
|
||||
return safeToSend
|
||||
}
|
||||
|
||||
func (c *Client) mucCacheHasOccupant(mucID int64, memberID int64) bool {
|
||||
c.locks.mucCacheLock.Lock()
|
||||
defer c.locks.mucCacheLock.Unlock()
|
||||
|
|
@ -1780,18 +1797,7 @@ func (c *Client) ProcessIncomingMessage(chatId int64, message *client.Message) {
|
|||
}
|
||||
}
|
||||
|
||||
if !c.mucCacheHasOccupant(chatId, senderId) {
|
||||
chatMember, err := c.client.GetChatMember(&client.GetChatMemberRequest{
|
||||
ChatId: chatId,
|
||||
MemberId: message.SenderId,
|
||||
})
|
||||
var status client.ChatMemberStatus
|
||||
if err == nil {
|
||||
status = chatMember.Status
|
||||
}
|
||||
affiliation, role := c.memberStatusToAffiliationAndRole(status, chat)
|
||||
safeToSend = c.addMUCOccupant(chatId, senderId, affiliation, role, status)
|
||||
}
|
||||
safeToSend = c.assureMUCOccupant(chatId, senderId, message.SenderId, chat)
|
||||
|
||||
groupChatFrom = gateway.MUCJID(chatId) + "/" + c.GetMUCNickname(senderId)
|
||||
var ok bool
|
||||
|
|
@ -2096,7 +2102,7 @@ func (c *Client) returnMessage(returnJid string, chatID int64, text string, code
|
|||
if err == nil {
|
||||
nickname = chat.Title
|
||||
}
|
||||
gateway.SendMUCAnnouncement(returnJid, gateway.MUCJID(chatID), text, nickname, c.xmpp)
|
||||
gateway.SendMUCAnnouncement(returnJid, gateway.MUCJID(chatID), text, nickname, "", c.xmpp)
|
||||
}
|
||||
} else {
|
||||
gateway.SendTextMessage(returnJid, gateway.CHATNODE(chatID), text, c.xmpp, isGroupchat)
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@ func SendTextMessage(to, from, body string, component *xmpp.Component, isGroupch
|
|||
}
|
||||
|
||||
// SendMUCAnnouncement creates and sends a message by a temporary occupant
|
||||
func SendMUCAnnouncement(to, from, body, nickname string, component *xmpp.Component) {
|
||||
func SendMUCAnnouncement(to, from, body, nickname, id string, component *xmpp.Component) {
|
||||
if nickname == "" {
|
||||
nickname = "announcement"
|
||||
}
|
||||
|
|
@ -127,10 +127,11 @@ func SendMUCAnnouncement(to, from, body, nickname string, component *xmpp.Compon
|
|||
SPMUCJid(from),
|
||||
)
|
||||
|
||||
var id string
|
||||
if id == "" {
|
||||
if uuid, err := uuid.NewRandom(); err == nil {
|
||||
id = uuid.String()
|
||||
}
|
||||
}
|
||||
sendMessageWrapper(to, fullFrom, body, "", "", id, component, nil, nil, 0, "", "", false, true, false, false, "", 0, "", "", 0)
|
||||
|
||||
SendPresence(
|
||||
|
|
|
|||
Loading…
Reference in a new issue