discordid: make function names more explicit

These are fairly wordy but help maintain correctness. A channel portal
ID should not be confused with a guild portal ID.
This commit is contained in:
Skip R
2026-02-13 21:06:37 -08:00
parent 04c15d15a7
commit dfa9c52974
10 changed files with 43 additions and 43 deletions

View File

@@ -37,7 +37,7 @@ func (dc *DiscordClient) FetchMessages(ctx context.Context, fetchParams bridgev2
return nil, bridgev2.ErrNotLoggedIn
}
channelID := discordid.ParsePortalID(fetchParams.Portal.ID)
channelID := discordid.ParseChannelPortalID(fetchParams.Portal.ID)
log := zerolog.Ctx(ctx).With().
Str("action", "fetch messages").
Str("channel_id", channelID).

View File

@@ -117,10 +117,10 @@ func (d *DiscordClient) getChannelChatInfo(ctx context.Context, ch *discordgo.Ch
var parentPortalID *networkid.PortalID
if ch.Type == discordgo.ChannelTypeGuildCategory || (ch.ParentID == "" && ch.GuildID != "") {
// Categories and uncategorized guild channels always have the guild as their parent.
parentPortalID = ptr.Ptr(discordid.MakeGuildPortalID(ch.GuildID))
parentPortalID = ptr.Ptr(discordid.MakeGuildPortalIDWithID(ch.GuildID))
} else if ch.ParentID != "" {
// Categorized guild channels.
parentPortalID = ptr.Ptr(discordid.MakePortalID(ch.ParentID))
parentPortalID = ptr.Ptr(discordid.MakeChannelPortalIDWithID(ch.ParentID))
}
var memberList bridgev2.ChatMemberList
@@ -176,7 +176,7 @@ func (d *DiscordClient) GetChatInfo(ctx context.Context, portal *bridgev2.Portal
return d.getGuildSpaceInfo(ctx, guild)
} else {
// Portal is to a channel of some kind (private or guild).
channelID := discordid.ParsePortalID(portal.ID)
channelID := discordid.ParseChannelPortalID(portal.ID)
ch, err := d.Session.State.Channel(channelID)
if err != nil {

View File

@@ -253,7 +253,7 @@ func (d *DiscordClient) canSeeGuildChannel(ctx context.Context, ch *discordgo.Ch
func (d *DiscordClient) guildPortalKeyFromID(guildID string) networkid.PortalKey {
// TODO: Support configuring `split_portals`.
return networkid.PortalKey{
ID: discordid.MakeGuildPortalID(guildID),
ID: discordid.MakeGuildPortalIDWithID(guildID),
Receiver: d.UserLogin.ID,
}
}
@@ -432,6 +432,6 @@ func (d *DiscordClient) syncChannel(_ context.Context, ch *discordgo.Channel) {
d.connector.Bridge.QueueRemoteEvent(d.UserLogin, &DiscordChatResync{
Client: d,
channel: ch,
portalKey: discordid.MakePortalKey(ch, d.UserLogin.ID, true),
portalKey: discordid.MakeChannelPortalKey(ch, d.UserLogin.ID, true),
})
}

View File

@@ -148,7 +148,7 @@ func (d *DiscordClient) wrapDiscordMessage(msg *discordgo.Message, typ bridgev2.
DiscordEventMeta: &DiscordEventMeta{
Type: typ,
PortalKey: networkid.PortalKey{
ID: discordid.MakePortalID(msg.ChannelID),
ID: discordid.MakeChannelPortalIDWithID(msg.ChannelID),
Receiver: d.UserLogin.ID,
},
},
@@ -221,7 +221,7 @@ func (d *DiscordClient) wrapDiscordReaction(reaction *discordgo.MessageReaction,
DiscordEventMeta: &DiscordEventMeta{
Type: evtType,
PortalKey: networkid.PortalKey{
ID: discordid.MakePortalID(reaction.ChannelID),
ID: discordid.MakeChannelPortalIDWithID(reaction.ChannelID),
Receiver: d.UserLogin.ID,
},
},
@@ -238,7 +238,7 @@ func (d *DiscordClient) handleDiscordTyping(ctx context.Context, typing *discord
log := zerolog.Ctx(ctx)
portalKey := networkid.PortalKey{
ID: discordid.MakePortalID(typing.ChannelID),
ID: discordid.MakeChannelPortalIDWithID(typing.ChannelID),
Receiver: d.UserLogin.ID,
}
portal, err := d.connector.Bridge.GetExistingPortalByKey(ctx, portalKey)

View File

@@ -46,7 +46,7 @@ func (d *DiscordClient) HandleMatrixMessage(ctx context.Context, msg *bridgev2.M
portal := msg.Portal
guildID := portal.Metadata.(*discordid.PortalMetadata).GuildID
channelID := discordid.ParsePortalID(portal.ID)
channelID := discordid.ParseChannelPortalID(portal.ID)
sendReq, err := d.connector.MsgConv.ToDiscord(ctx, d.Session, msg)
if err != nil {
@@ -57,7 +57,7 @@ func (d *DiscordClient) HandleMatrixMessage(ctx context.Context, msg *bridgev2.M
// TODO: When supporting threads (and not a bot user), send a thread referer.
options = append(options, discordgo.WithChannelReferer(guildID, channelID))
sentMsg, err := d.Session.ChannelMessageSendComplex(discordid.ParsePortalID(msg.Portal.ID), sendReq, options...)
sentMsg, err := d.Session.ChannelMessageSendComplex(discordid.ParseChannelPortalID(msg.Portal.ID), sendReq, options...)
if err != nil {
return nil, err
}
@@ -86,7 +86,7 @@ func (d *DiscordClient) HandleMatrixEdit(ctx context.Context, msg *bridgev2.Matr
)
_, err := d.Session.ChannelMessageEdit(
discordid.ParsePortalID(msg.Portal.ID),
discordid.ParseChannelPortalID(msg.Portal.ID),
discordid.ParseMessageID(msg.EditTarget.ID),
content,
)
@@ -113,7 +113,7 @@ func (d *DiscordClient) HandleMatrixReaction(ctx context.Context, reaction *brid
err := d.Session.MessageReactionAddUser(
meta.GuildID,
discordid.ParsePortalID(portal.ID),
discordid.ParseChannelPortalID(portal.ID),
discordid.ParseMessageID(reaction.TargetMessage.ID),
discordid.ParseEmojiID(reaction.PreHandleResp.EmojiID),
)
@@ -123,7 +123,7 @@ func (d *DiscordClient) HandleMatrixReaction(ctx context.Context, reaction *brid
func (d *DiscordClient) HandleMatrixReactionRemove(ctx context.Context, removal *bridgev2.MatrixReactionRemove) error {
removing := removal.TargetReaction
emojiID := removing.EmojiID
channelID := discordid.ParsePortalID(removing.Room.ID)
channelID := discordid.ParseChannelPortalID(removing.Room.ID)
guildID := removal.Portal.Metadata.(*discordid.PortalMetadata).GuildID
err := d.Session.MessageReactionRemoveUser(guildID, channelID, discordid.ParseMessageID(removing.MessageID), discordid.ParseEmojiID(emojiID), discordid.ParseUserLoginID(d.UserLogin.ID))
@@ -131,7 +131,7 @@ func (d *DiscordClient) HandleMatrixReactionRemove(ctx context.Context, removal
}
func (d *DiscordClient) HandleMatrixMessageRemove(ctx context.Context, removal *bridgev2.MatrixMessageRemove) error {
channelID := discordid.ParsePortalID(removal.Portal.ID)
channelID := discordid.ParseChannelPortalID(removal.Portal.ID)
messageID := discordid.ParseMessageID(removal.TargetMessage.ID)
return d.Session.ChannelMessageDelete(channelID, messageID)
}
@@ -177,7 +177,7 @@ func (d *DiscordClient) HandleMatrixReadReceipt(ctx context.Context, msg *bridge
// TODO: Support threads.
guildID := msg.Portal.Metadata.(*discordid.PortalMetadata).GuildID
channelID := discordid.ParsePortalID(msg.Portal.ID)
channelID := discordid.ParseChannelPortalID(msg.Portal.ID)
resp, err := d.Session.ChannelMessageAckNoToken(channelID, targetMessageID, discordgo.WithChannelReferer(guildID, channelID))
if err != nil {
log.Err(err).Msg("Failed to send read receipt to Discord")
@@ -202,7 +202,7 @@ func (d *DiscordClient) viewingChannel(ctx context.Context, portal *bridgev2.Por
d.markedOpenedLock.Lock()
defer d.markedOpenedLock.Unlock()
channelID := discordid.ParsePortalID(portal.ID)
channelID := discordid.ParseChannelPortalID(portal.ID)
log := zerolog.Ctx(ctx).With().
Str("channel_id", channelID).Logger()
@@ -233,7 +233,7 @@ func (d *DiscordClient) HandleMatrixTyping(ctx context.Context, msg *bridgev2.Ma
_ = d.viewingChannel(ctx, msg.Portal)
guildID := msg.Portal.Metadata.(*discordid.PortalMetadata).GuildID
channelID := discordid.ParsePortalID(msg.Portal.ID)
channelID := discordid.ParseChannelPortalID(msg.Portal.ID)
// TODO: Support threads properly when sending the referer.
err := d.Session.ChannelTyping(channelID, discordgo.WithChannelReferer(guildID, channelID))

View File

@@ -164,7 +164,7 @@ func (p *ProvisioningAPI) guildsList(w http.ResponseWriter, r *http.Request, log
// guild, as it recognizes the guild returned from this HTTP
// endpoint and the actual space itself as separate "entities".
// (Despite this, they point to identical rooms.)
ID: string(discordid.MakeGuildPortalID(guild.ID)),
ID: string(discordid.MakeGuildPortalIDWithID(guild.ID)),
Name: guild.Name,
AvatarURL: discordgo.EndpointGuildIcon(guild.ID, guild.Icon),
Bridged: beingBridged,

View File

@@ -72,11 +72,24 @@ func UserLoginIDToUserID(id networkid.UserLoginID) networkid.UserID {
return networkid.UserID(id)
}
func MakePortalID(channelID string) networkid.PortalID {
func MakeChannelPortalKey(ch *discordgo.Channel, userLoginID networkid.UserLoginID, wantReceiver bool) (key networkid.PortalKey) {
key.ID = MakeChannelPortalIDWithID(ch.ID)
if wantReceiver {
key.Receiver = userLoginID
}
return
}
func MakeChannelPortalKeyWithID(channelID string) (key networkid.PortalKey) {
key.ID = MakeChannelPortalIDWithID(channelID)
return
}
func MakeChannelPortalIDWithID(channelID string) networkid.PortalID {
return networkid.PortalID(channelID)
}
func ParsePortalID(portalID networkid.PortalID) string {
func ParseChannelPortalID(portalID networkid.PortalID) string {
return string(portalID)
}
@@ -114,8 +127,8 @@ func MakeAvatarID(avatar string) networkid.AvatarID {
//
// To accommodate Discord guilds created before this API change that have also
// never deleted the default channel, we need a way to distinguish between the
// guild and the default channel, as we wouldn't be able to bridge the guild
// as a space otherwise.
// guild and the default channel. Otherwise, we wouldn't be able to bridge both
// the channel portal as well as the guild space; their keys would conflict.
//
// "*" was chosen as the asterisk character is used to filter by guilds in
// the quick switcher (in Discord's first-party clients).
@@ -123,7 +136,7 @@ func MakeAvatarID(avatar string) networkid.AvatarID {
// For more information, see: https://discord.com/developers/docs/change-log#breaking-change-default-channels:~:text=New%20guilds%20will%20no%20longer.
const GuildPortalKeySigil = "*"
func MakeGuildPortalID(guildID string) networkid.PortalID {
func MakeGuildPortalIDWithID(guildID string) networkid.PortalID {
return networkid.PortalID(GuildPortalKeySigil + guildID)
}
@@ -140,16 +153,3 @@ func ParseGuildPortalID(portalID networkid.PortalID) string {
return ""
}
func MakePortalKey(ch *discordgo.Channel, userLoginID networkid.UserLoginID, wantReceiver bool) (key networkid.PortalKey) {
key.ID = MakePortalID(ch.ID)
if wantReceiver {
key.Receiver = userLoginID
}
return
}
func MakePortalKeyWithID(channelID string) (key networkid.PortalKey) {
key.ID = MakePortalID(channelID)
return
}

View File

@@ -285,7 +285,7 @@ func (r *discordTagHTMLRenderer) renderDiscordMention(w util.BufWriter, source [
return
// }
case *astDiscordChannelMention:
if portal, _ := node.portal.Bridge.GetPortalByKey(ctx, discordid.MakePortalKeyWithID(
if portal, _ := node.portal.Bridge.GetPortalByKey(ctx, discordid.MakeChannelPortalKeyWithID(
strconv.FormatInt(node.id, 10),
)); portal != nil {
if portal.MXID != "" {

View File

@@ -194,9 +194,9 @@ func (mc *MessageConverter) tryAddingReplyToConvertedMessage(
// The portal containing the message that was replied to.
targetPortal := portal
if ref.ChannelID != discordid.ParsePortalID(portal.ID) {
if ref.ChannelID != discordid.ParseChannelPortalID(portal.ID) {
var err error
targetPortal, err = mc.Bridge.GetPortalByKey(ctx, discordid.MakePortalKeyWithID(ref.ChannelID))
targetPortal, err = mc.Bridge.GetPortalByKey(ctx, discordid.MakeChannelPortalKeyWithID(ref.ChannelID))
if err != nil {
log.Err(err).Msg("Failed to get cross-room reply portal; proceeding")
return
@@ -316,7 +316,7 @@ func (mc *MessageConverter) forwardedMessageHTMLPart(ctx context.Context, portal
forwardedHTML := mc.renderDiscordMarkdownOnlyHTMLNoUnwrap(portal, msg.MessageSnapshots[0].Message.Content, true)
msgTSText := msg.MessageSnapshots[0].Message.Timestamp.Format("2006-01-02 15:04 MST")
origLink := fmt.Sprintf("unknown channel • %s", msgTSText)
if forwardedFromPortal, err := mc.Bridge.DB.Portal.GetByKey(ctx, discordid.MakePortalKeyWithID(msg.MessageReference.ChannelID)); err == nil && forwardedFromPortal != nil {
if forwardedFromPortal, err := mc.Bridge.DB.Portal.GetByKey(ctx, discordid.MakeChannelPortalKeyWithID(msg.MessageReference.ChannelID)); err == nil && forwardedFromPortal != nil {
if origMessage, err := mc.Bridge.DB.Message.GetFirstPartByID(ctx, source.ID, discordid.MakeMessageID(msg.MessageReference.MessageID)); err == nil && origMessage != nil {
// We've bridged the message that was forwarded, so we can link to it directly.
origLink = fmt.Sprintf(

View File

@@ -101,14 +101,14 @@ func (mc *MessageConverter) ToDiscord(
if msg.ReplyTo != nil {
req.Reference = &discordgo.MessageReference{
ChannelID: discordid.ParsePortalID(msg.ReplyTo.Room.ID),
ChannelID: discordid.ParseChannelPortalID(msg.ReplyTo.Room.ID),
MessageID: discordid.ParseMessageID(msg.ReplyTo.ID),
}
}
portal := msg.Portal
guildID := msg.Portal.Metadata.(*discordid.PortalMetadata).GuildID
channelID := discordid.ParsePortalID(portal.ID)
channelID := discordid.ParseChannelPortalID(portal.ID)
content := msg.Content
convertMatrix := func() {