always add self when creating DM portals

Clients will leave rooms automatically when they realize that they
aren't actually members of the channel.
This commit is contained in:
Skip R
2025-11-24 13:03:40 -08:00
parent 4e41c2f227
commit f04a8658d9
2 changed files with 19 additions and 7 deletions

View File

@@ -161,11 +161,11 @@ func (d *DiscordClient) LogoutRemote(ctx context.Context) {
func (d *DiscordClient) syncChannels(ctx context.Context) { func (d *DiscordClient) syncChannels(ctx context.Context) {
for _, dm := range d.Session.State.PrivateChannels { for _, dm := range d.Session.State.PrivateChannels {
d.UserLogin.Log.Debug().Str("channel_id", dm.ID).Msg("Syncing private channel") d.UserLogin.Log.Debug().Str("channel_id", dm.ID).Msg("Syncing private channel")
d.syncChannel(ctx, dm) d.syncChannel(ctx, dm, true)
} }
} }
func (d *DiscordClient) syncChannel(ctx context.Context, ch *discordgo.Channel) { func (d *DiscordClient) syncChannel(_ context.Context, ch *discordgo.Channel, selfIsInChannel bool) {
isGroup := len(ch.RecipientIDs) > 1 isGroup := len(ch.RecipientIDs) > 1
var roomType database.RoomType var roomType database.RoomType
@@ -175,18 +175,21 @@ func (d *DiscordClient) syncChannel(ctx context.Context, ch *discordgo.Channel)
roomType = database.RoomTypeDM roomType = database.RoomTypeDM
} }
selfEventSender := d.makeEventSender(d.Session.State.User)
var members bridgev2.ChatMemberList var members bridgev2.ChatMemberList
members.IsFull = true members.IsFull = true
members.MemberMap = make(bridgev2.ChatMemberMap, len(ch.Recipients)) members.MemberMap = make(bridgev2.ChatMemberMap, len(ch.Recipients))
if len(ch.Recipients) > 0 { if len(ch.Recipients) > 0 {
if selfIsInChannel {
members.MemberMap[selfEventSender.Sender] = bridgev2.ChatMember{EventSender: selfEventSender}
}
for _, recipient := range ch.Recipients { for _, recipient := range ch.Recipients {
sender := bridgev2.EventSender{ sender := d.makeEventSender(recipient)
IsFromMe: recipient.ID == d.Session.State.User.ID,
SenderLogin: d.UserLogin.ID,
Sender: networkid.UserID(recipient.ID),
}
members.MemberMap[sender.Sender] = bridgev2.ChatMember{EventSender: sender} members.MemberMap[sender.Sender] = bridgev2.ChatMember{EventSender: sender}
} }
members.TotalMemberCount = len(ch.Recipients) members.TotalMemberCount = len(ch.Recipients)
} }

View File

@@ -18,6 +18,7 @@ package connector
import ( import (
"github.com/bwmarrin/discordgo" "github.com/bwmarrin/discordgo"
"maunium.net/go/mautrix/bridgev2"
"maunium.net/go/mautrix/bridgev2/networkid" "maunium.net/go/mautrix/bridgev2/networkid"
) )
@@ -28,3 +29,11 @@ func (d *DiscordClient) makePortalKey(ch *discordgo.Channel, userLoginID network
} }
return return
} }
func (d *DiscordClient) makeEventSender(user *discordgo.User) bridgev2.EventSender {
return bridgev2.EventSender{
IsFromMe: user.ID == d.Session.State.User.ID,
SenderLogin: d.UserLogin.ID,
Sender: networkid.UserID(user.ID),
}
}