discord: proper support for discriminator-less

names with no discriminator are shown as @username, and search works
with the @ too. Also bumped go version to 1.20, since it was stuck on
1.16 and i felt like trying generics (in an ugly way).
This commit is contained in:
Harvey Tindall
2023-06-12 16:32:40 +01:00
parent 6564df8082
commit 48403ce940
6 changed files with 97 additions and 181 deletions
+28
View File
@@ -214,6 +214,25 @@ func (d *DiscordDaemon) NewTempInvite(ageSeconds, maxUses int) (inviteURL, iconU
return
}
// RenderDiscordUsername returns String of discord username, with support for new discriminator-less versions.
func RenderDiscordUsername[DcUser *dg.User | DiscordUser](user DcUser) string {
u, ok := interface{}(user).(*dg.User)
var discriminator, username string
if ok {
discriminator = u.Discriminator
username = u.Username
} else {
u2 := interface{}(user).(DiscordUser)
discriminator = u2.Discriminator
username = u2.Username
}
if discriminator == "0" {
return "@" + username
}
return username + "#" + discriminator
}
// Returns the user(s) roughly corresponding to the username (if they are in the guild).
// if no discriminator (#xxxx) is given in the username and there are multiple corresponding users, a list of all matching users is returned.
func (d *DiscordDaemon) GetUsers(username string) []*dg.Member {
@@ -227,6 +246,10 @@ func (d *DiscordDaemon) GetUsers(username string) []*dg.Member {
return nil
}
hasDiscriminator := strings.Contains(username, "#")
hasAt := strings.HasPrefix(username, "@")
if hasAt {
username = username[1:]
}
var users []*dg.Member
for _, member := range members {
if hasDiscriminator {
@@ -234,6 +257,11 @@ func (d *DiscordDaemon) GetUsers(username string) []*dg.Member {
return []*dg.Member{member}
}
}
if hasAt {
if member.User.Username == username && member.User.Discriminator == "0" {
return []*dg.Member{member}
}
}
if strings.Contains(member.User.Username, username) {
users = append(users, member)
}