connector: implement user cache
* Fixes the totally broken UserInfo resolution in guilds. * Adds support for USER_UPDATE from the gateway. Design considerations behind the user cache: * Explicitly handle deleted user IDs by short circuiting the lookup logic and returning a singleton. * The cache map is protected during HTTP requests to the Discord API. * The nonexistence of a user is cached. This is to prevent excessive requests (a user can't suddenly begin existing at a given ID). The user cache is upserted on READY, incoming messages, backfill, etc.
This commit is contained in:
@@ -24,6 +24,23 @@ import (
|
||||
"maunium.net/go/mautrix/bridgev2/networkid"
|
||||
)
|
||||
|
||||
// DeletedGuildUserID is a magic user ID that is used in place of an actual user
|
||||
// ID once they have deleted their account. This only applies in non-private
|
||||
// (i.e. guild) contexts, such as guild channel message authors and mentions.
|
||||
//
|
||||
// Note that this user ID can also appear in message content as part of user
|
||||
// mention markup ("<@456226577798135808>").
|
||||
const DeletedGuildUserID = "456226577798135808"
|
||||
|
||||
// DeletedGuildUser is the user returned from the Discord API as a stand-in for
|
||||
// users who have since deleted their account. As the name suggests, this only
|
||||
// applies to fetched entities within guilds.
|
||||
var DeletedGuildUser = discordgo.User{
|
||||
ID: DeletedGuildUserID,
|
||||
Username: "Deleted User",
|
||||
Discriminator: "0000",
|
||||
}
|
||||
|
||||
const DiscordEpochMillis = 1420070400000
|
||||
|
||||
// GenerateNonce creates a Discord-style snowflake nonce for message idempotency.
|
||||
|
||||
Reference in New Issue
Block a user