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 {
|
if update.NewContent.MessageContentType() == client.TypeMessageText {
|
||||||
|
safeToSend := true
|
||||||
|
|
||||||
textContent := update.NewContent.(*client.MessageText)
|
textContent := update.NewContent.(*client.MessageText)
|
||||||
log.Debugf("textContent: %#v", textContent.Text)
|
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
|
var text strings.Builder
|
||||||
|
|
||||||
if replaceId == "" {
|
if replaceId == "" || forceFallback {
|
||||||
var editChar string
|
var editChar string
|
||||||
if c.Session.AsciiArrows {
|
if c.Session.AsciiArrows {
|
||||||
editChar = "e"
|
editChar = "e"
|
||||||
|
|
@ -343,28 +367,17 @@ func (c *Client) updateMessageContent(update *client.UpdateMessageContent) {
|
||||||
c,
|
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
|
id := "e"+sId
|
||||||
uuid, err := uuid.NewRandom()
|
uuid, err := uuid.NewRandom()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
id = id+":"+uuid.String()
|
id = id+":"+uuid.String()
|
||||||
}
|
}
|
||||||
for _, jid := range jids {
|
for _, jid := range jids {
|
||||||
|
if safeToSend {
|
||||||
gateway.SendMessage(jid, from, text.String(), id, c.xmpp, nil, 0, replaceId, isCarbon, isMUC, false, originalFrom, "")
|
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
|
nickname = chat.Title
|
||||||
}
|
}
|
||||||
for _, jid := range jids {
|
for _, jid := range jids {
|
||||||
gateway.SendMUCAnnouncement(jid, fromJid, text, nickname, c.xmpp)
|
gateway.SendMUCAnnouncement(jid, fromJid, text, nickname, "", c.xmpp)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fromJid = gateway.CHATNODE(update.ChatId)
|
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 {
|
func (c *Client) mucCacheHasOccupant(mucID int64, memberID int64) bool {
|
||||||
c.locks.mucCacheLock.Lock()
|
c.locks.mucCacheLock.Lock()
|
||||||
defer c.locks.mucCacheLock.Unlock()
|
defer c.locks.mucCacheLock.Unlock()
|
||||||
|
|
@ -1780,18 +1797,7 @@ func (c *Client) ProcessIncomingMessage(chatId int64, message *client.Message) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.mucCacheHasOccupant(chatId, senderId) {
|
safeToSend = c.assureMUCOccupant(chatId, senderId, message.SenderId, chat)
|
||||||
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)
|
|
||||||
}
|
|
||||||
|
|
||||||
groupChatFrom = gateway.MUCJID(chatId) + "/" + c.GetMUCNickname(senderId)
|
groupChatFrom = gateway.MUCJID(chatId) + "/" + c.GetMUCNickname(senderId)
|
||||||
var ok bool
|
var ok bool
|
||||||
|
|
@ -2096,7 +2102,7 @@ func (c *Client) returnMessage(returnJid string, chatID int64, text string, code
|
||||||
if err == nil {
|
if err == nil {
|
||||||
nickname = chat.Title
|
nickname = chat.Title
|
||||||
}
|
}
|
||||||
gateway.SendMUCAnnouncement(returnJid, gateway.MUCJID(chatID), text, nickname, c.xmpp)
|
gateway.SendMUCAnnouncement(returnJid, gateway.MUCJID(chatID), text, nickname, "", c.xmpp)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
gateway.SendTextMessage(returnJid, gateway.CHATNODE(chatID), text, c.xmpp, isGroupchat)
|
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
|
// 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 == "" {
|
if nickname == "" {
|
||||||
nickname = "announcement"
|
nickname = "announcement"
|
||||||
}
|
}
|
||||||
|
|
@ -127,10 +127,11 @@ func SendMUCAnnouncement(to, from, body, nickname string, component *xmpp.Compon
|
||||||
SPMUCJid(from),
|
SPMUCJid(from),
|
||||||
)
|
)
|
||||||
|
|
||||||
var id string
|
if id == "" {
|
||||||
if uuid, err := uuid.NewRandom(); err == nil {
|
if uuid, err := uuid.NewRandom(); err == nil {
|
||||||
id = uuid.String()
|
id = uuid.String()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
sendMessageWrapper(to, fullFrom, body, "", "", id, component, nil, nil, 0, "", "", false, true, false, false, "", 0, "", "", 0)
|
sendMessageWrapper(to, fullFrom, body, "", "", id, component, nil, nil, 0, "", "", false, true, false, false, "", 0, "", "", 0)
|
||||||
|
|
||||||
SendPresence(
|
SendPresence(
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue