From 67cccfb92c0fc0569955662e039a26bcda76751c Mon Sep 17 00:00:00 2001 From: Eduardo Date: Tue, 26 Mar 2024 23:48:49 +0100 Subject: [PATCH] lets do the presence prettier --- bot.go | 68 +++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 53 insertions(+), 15 deletions(-) diff --git a/bot.go b/bot.go index 8d2d471..871457f 100644 --- 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 += "👤 EN LÍNEA (" + strconv.Itoa(len(usersOnline)) + ")" + "\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 +} -- 2.30.2