Avoid empty jid attribute in MUC user extension item

This commit is contained in:
Bohdan Horbeshko 2025-06-23 11:54:48 -04:00
parent 863c5afa91
commit 32b00c244c
3 changed files with 19 additions and 24 deletions

View file

@ -252,7 +252,7 @@ type PresenceXMucUserExtension struct {
type PresenceXMucUserItem struct { type PresenceXMucUserItem struct {
XMLName xml.Name `xml:"item"` XMLName xml.Name `xml:"item"`
Affiliation string `xml:"affiliation,attr"` Affiliation string `xml:"affiliation,attr"`
Jid string `xml:"jid,attr"` Jid *string `xml:"jid,attr"`
Nick string `xml:"nick,attr,omitempty"` Nick string `xml:"nick,attr,omitempty"`
Role string `xml:"role,attr"` Role string `xml:"role,attr"`
} }

View file

@ -414,6 +414,9 @@ func LogBadPresence(presence *stanza.Presence) {
// SPFrom is a Telegram user id // SPFrom is a Telegram user id
var SPFrom = args.NewString() var SPFrom = args.NewString()
// SPFullFrom is for specifying a full from when desired
var SPFullFrom = args.NewString()
// SPType is a presence type // SPType is a presence type
var SPType = args.NewString() var SPType = args.NewString()
@ -458,7 +461,9 @@ var SPToResources = args.New()
func newPresence(bareJid string, to string, args ...args.V) stanza.Presence { func newPresence(bareJid string, to string, args ...args.V) stanza.Presence {
var presenceFrom string var presenceFrom string
if SPFrom.IsSet(args) { if SPFullFrom.IsSet(args) {
presenceFrom = SPFullFrom.Get(args)
} else if SPFrom.IsSet(args) {
presenceFrom = SPFrom.Get(args) + "@" + bareJid presenceFrom = SPFrom.Get(args) + "@" + bareJid
if SPResource.IsSet(args) { if SPResource.IsSet(args) {
resource := SPResource.Get(args) resource := SPResource.Get(args)
@ -530,7 +535,8 @@ func newPresence(bareJid string, to string, args ...args.V) stanza.Presence {
userExt.Item.Nick = SPMUCNick.Get(args) userExt.Item.Nick = SPMUCNick.Get(args)
} }
if SPMUCJid.IsSet(args) { if SPMUCJid.IsSet(args) {
userExt.Item.Jid = SPMUCJid.Get(args) mucJid := SPMUCJid.Get(args)
userExt.Item.Jid = &mucJid
} }
if SPMUCStatusCodes.IsSet(args) { if SPMUCStatusCodes.IsSet(args) {
statusCodes := SPMUCStatusCodes.Get(args).([]uint16) statusCodes := SPMUCStatusCodes.Get(args).([]uint16)

View file

@ -698,27 +698,16 @@ func handleMUCUnavailable(component *xmpp.Component, p stanza.Presence, session
session.LeaveMUC(chatId, resource) session.LeaveMUC(chatId, resource)
reply := &stanza.Presence{ gateway.SendPresence(
Attrs: stanza.Attrs{ component,
From: p.To, p.From,
To: p.From, gateway.SPFullFrom(p.To),
Id: p.Id, gateway.SPType("unavailable"),
Type: stanza.PresenceTypeUnavailable, gateway.SPMUCAffiliation("member"),
}, gateway.SPMUCRole("none"),
Extensions: []stanza.PresExtension{ gateway.SPMUCJid(p.From),
extensions.PresenceXMucUserExtension{ gateway.SPMUCStatusCodes([]uint16{110}),
Item: extensions.PresenceXMucUserItem{ )
Affiliation: "member",
Jid: p.From,
Role: "none",
},
Statuses: []extensions.PresenceXMucUserStatus{
extensions.PresenceXMucUserStatus{Code: 110},
},
},
},
}
gateway.ResumableSend(component, reply)
} }
func handleGetVcardIq(s xmpp.Sender, iq *stanza.IQ, typ byte) { func handleGetVcardIq(s xmpp.Sender, iq *stanza.IQ, typ byte) {