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:
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user