package main import ( "bytes" "context" "fmt" "git.xeserv.us/xena/vyvanse/internal/dao" "github.com/bwmarrin/discordgo" "github.com/olekukonko/tablewriter" opentracing "github.com/opentracing/opentracing-go" splog "github.com/opentracing/opentracing-go/log" ) func top10(us *dao.Users) func(context.Context, *discordgo.Session, *discordgo.Message, []string) error { return func(ctx context.Context, s *discordgo.Session, m *discordgo.Message, parv []string) error { sp, ctx := opentracing.StartSpanFromContext(ctx, "top10") defer sp.Finish() users, err := us.Top10(ctx) if err != nil { return err } buf := &bytes.Buffer{} table := tablewriter.NewWriter(buf) table.SetHeader([]string{"Nick", "Score"}) for _, u := range users { apd := []string{} ch, err := s.Channel(m.ChannelID) if err != nil { sp.LogFields(splog.Error(err)) continue } mem, err := s.GuildMember(ch.GuildID, u.DiscordID) if err != nil { sp.LogFields(splog.Error(err)) continue } if mem.Nick == "" { mem.Nick = mem.User.Username } apd = append(apd, mem.Nick, fmt.Sprint(u.Score)) table.Append(apd) } table.Render() txt := fmt.Sprintf("```\n%s\n```", buf) _, err = s.ChannelMessageSend(m.ChannelID, txt) if err != nil { return err } return nil } }