if member.User.Bot {
continue
}
- usersOnline = append(usersOnline, formatUserStatus(*member, presence.Status))
+ usersOnline = append(usersOnline, formatUserStatus(*member, *presence))
}
}
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"
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)
}
}
-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:
emoji = "π΄"
}
+ switch presence.ClientStatus.Mobile {
+ case discordgo.StatusOnline:
+ emoji += "π±"
+ case discordgo.StatusIdle:
+ emoji += "π±"
+ case discordgo.StatusDoNotDisturb:
+ emoji += "π±"
+ }
+
return emoji + " " + formatUserVisibleName(member)
}
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 + ")"
}
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
+}