From f04a8658d9811ecd4a9611b5a9863fe4ca97d21e Mon Sep 17 00:00:00 2001 From: Skip R Date: Mon, 24 Nov 2025 13:03:40 -0800 Subject: [PATCH] always add self when creating DM portals Clients will leave rooms automatically when they realize that they aren't actually members of the channel. --- pkg/connector/client.go | 17 ++++++++++------- pkg/connector/id.go | 9 +++++++++ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/pkg/connector/client.go b/pkg/connector/client.go index b4a2099..d1a21ec 100644 --- a/pkg/connector/client.go +++ b/pkg/connector/client.go @@ -161,11 +161,11 @@ func (d *DiscordClient) LogoutRemote(ctx context.Context) { func (d *DiscordClient) syncChannels(ctx context.Context) { for _, dm := range d.Session.State.PrivateChannels { 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 var roomType database.RoomType @@ -175,18 +175,21 @@ func (d *DiscordClient) syncChannel(ctx context.Context, ch *discordgo.Channel) roomType = database.RoomTypeDM } + selfEventSender := d.makeEventSender(d.Session.State.User) + var members bridgev2.ChatMemberList members.IsFull = true members.MemberMap = make(bridgev2.ChatMemberMap, len(ch.Recipients)) if len(ch.Recipients) > 0 { + if selfIsInChannel { + members.MemberMap[selfEventSender.Sender] = bridgev2.ChatMember{EventSender: selfEventSender} + } + for _, recipient := range ch.Recipients { - sender := bridgev2.EventSender{ - IsFromMe: recipient.ID == d.Session.State.User.ID, - SenderLogin: d.UserLogin.ID, - Sender: networkid.UserID(recipient.ID), - } + sender := d.makeEventSender(recipient) members.MemberMap[sender.Sender] = bridgev2.ChatMember{EventSender: sender} } + members.TotalMemberCount = len(ch.Recipients) } diff --git a/pkg/connector/id.go b/pkg/connector/id.go index 7376061..76e4486 100644 --- a/pkg/connector/id.go +++ b/pkg/connector/id.go @@ -18,6 +18,7 @@ package connector import ( "github.com/bwmarrin/discordgo" + "maunium.net/go/mautrix/bridgev2" "maunium.net/go/mautrix/bridgev2/networkid" ) @@ -28,3 +29,11 @@ func (d *DiscordClient) makePortalKey(ch *discordgo.Channel, userLoginID network } 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), + } +}