lets do the presence prettier
authorEduardo <[email protected]>
Tue, 26 Mar 2024 22:48:49 +0000 (23:48 +0100)
committerEduardo <[email protected]>
Tue, 26 Mar 2024 22:48:49 +0000 (23:48 +0100)
bot.go

diff --git a/bot.go b/bot.go
index 8d2d471d2ea59b0e7b8736bc32bb9e69b65cd3b8..871457f5000cdef777de86b62a14097bb18d4a4f 100644 (file)
--- a/bot.go
+++ b/bot.go
@@ -231,7 +231,7 @@ func guildCreated(s *discordgo.Session, m *discordgo.GuildCreate) {
                        if member.User.Bot {
                                continue
                        }
-                       usersOnline = append(usersOnline, formatUserStatus(*member, presence.Status))
+                       usersOnline = append(usersOnline, formatUserStatus(*member, *presence))
                }
        }
 
@@ -252,24 +252,26 @@ func guildCreated(s *discordgo.Session, m *discordgo.GuildCreate) {
 func guildUpdates(s *discordgo.Session, m *discordgo.PresenceUpdate) {
        if m.Presence.User != nil {
                var member = getMemberFromMembers(Members, m.Presence.User.ID)
-               if m.Presence.Status != discordgo.StatusOffline && m.Presence.Status != discordgo.StatusInvisible {
-                       usersOnline = append(removeMemberFromSlice(usersOnline, *member), formatUserStatus(*member, m.Presence.Status))
-               } else {
-                       usersOnline = removeMemberFromSlice(usersOnline, *member)
+               if !member.User.Bot {
+                       if m.Presence.Status != discordgo.StatusOffline && m.Presence.Status != discordgo.StatusInvisible {
+                               usersOnline = append(removeMemberFromSlice(usersOnline, *member), formatUserStatus(*member, m.Presence))
+                       } else {
+                               usersOnline = removeMemberFromSlice(usersOnline, *member)
+                       }
                }
        }
        formatBotMessage()
 }
 
 func formatBotMessage() {
-       log.Println("formatting bot message...")
+       // log.Println("formatting bot message...")
        botText = ""
        re := regexp.MustCompile(`\\\[[0-9]+\]`) // remove user id from the string
 
        if len(usersOnline) > 0 {
                botText += "πŸ‘€ <b>EN LÍNEA (" + strconv.Itoa(len(usersOnline)) + ")</b>" + "\n"
 
-               sort.Strings(usersOnline)
+               sortMembers(usersOnline)
                for _, user := range usersOnline {
                        user = re.ReplaceAllString(user, "")
                        botText += user + "\n"
@@ -290,7 +292,7 @@ func formatBotMessage() {
                botText = "πŸ’€ Parece que no hay nadie conectado."
        }
 
-       log.Println(botText)
+       // log.Println(botText)
 
        if botMsg != nil {
                msg := tgbotapi.NewEditMessageTextAndMarkup(botMsg.Chat.ID, botMsg.MessageID, botText, menuTextMarkup)
@@ -299,10 +301,10 @@ func formatBotMessage() {
        }
 }
 
-func formatUserStatus(member discordgo.Member, status discordgo.Status) string {
+func formatUserStatus(member discordgo.Member, presence discordgo.Presence) string {
        var emoji string
 
-       switch status {
+       switch presence.Status {
        case discordgo.StatusOnline:
                emoji = "🟒"
        case discordgo.StatusIdle:
@@ -311,6 +313,15 @@ func formatUserStatus(member discordgo.Member, status discordgo.Status) string {
                emoji = "πŸ”΄"
        }
 
+       switch presence.ClientStatus.Mobile {
+       case discordgo.StatusOnline:
+               emoji += "πŸ“±"
+       case discordgo.StatusIdle:
+               emoji += "πŸ“±"
+       case discordgo.StatusDoNotDisturb:
+               emoji += "πŸ“±"
+       }
+
        return emoji + " " + formatUserVisibleName(member)
 }
 
@@ -340,11 +351,11 @@ func formatUserVisibleName(member discordgo.Member) string {
        var user string
        var id = member.User.ID
 
-       if member.User.DisplayName != "" {
-               user = member.User.DisplayName
-       } else {
-               user = member.User.Username
-       }
+       user = member.User.Username
+
+       // if member.User.DisplayName != "" {
+       //      user = member.User.DisplayName
+       // }
 
        if member.Nick != "" {
                user = member.Nick + " (" + user + ")"
@@ -373,3 +384,30 @@ func getMemberFromMembers(slice []*discordgo.Member, id string) *discordgo.Membe
        }
        return nil
 }
+
+func sortMembers(slice []string) {
+       sort.Slice(slice, func(i, j int) bool {
+               user1 := replaceAllStrings(slice[i], []string{"πŸ“±", "🐡", "πŸ™Š", "πŸ™‰", "πŸ“Ή", "πŸ–₯"}, "")
+               user2 := replaceAllStrings(slice[j], []string{"πŸ“±", "🐡", "πŸ™Š", "πŸ™‰", "πŸ“Ή", "πŸ–₯"}, "")
+
+               if strings.Contains(user1, "🟒") && !strings.Contains(user2, "🟒") {
+                       return true
+               } else if !strings.Contains(user1, "🟒") && strings.Contains(user2, "🟒") {
+                       return false
+               } else if strings.Contains(user1, "πŸ”΄") && !strings.Contains(user2, "πŸ”΄") {
+                       return false
+               } else if !strings.Contains(user1, "πŸ”΄") && strings.Contains(user2, "πŸ”΄") {
+                       return true
+               }
+
+               return user1 < user2
+       })
+}
+
+func replaceAllStrings(str string, old []string, new string) string {
+       for _, o := range old {
+               str = strings.Replace(str, o, new, -1)
+       }
+
+       return str
+}