/
trending.go
71 lines (57 loc) · 1.66 KB
/
trending.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package disc
import (
"errors"
"strings"
"github.com/Karitham/WaifuBot/anilist"
"github.com/diamondburned/arikawa/v2/bot"
"github.com/diamondburned/arikawa/v2/discord"
"github.com/diamondburned/arikawa/v2/gateway"
"github.com/rs/zerolog/log"
)
// Trending Initializes a subcommand
type Trending struct {
Ctx *bot.Context
}
// Setup setups the subcommand
func (s *Trending) Setup(sub *bot.Subcommand) {
sub.Command = "trending"
sub.Description = "View trending manga and anime"
sub.ChangeCommandInfo("Manga", "", "search for a manga")
sub.ChangeCommandInfo("Anime", "", "search for an anime")
}
// Manga is a subcommand of Search
func (s *Trending) Manga(_ *gateway.MessageCreateEvent) (*discord.Embed, error) {
r, err := anilist.TrendingMediaQuery("MANGA")
if err != nil {
log.Err(err).
Str("Type", "TRENDING MANGA").
Msg("Could not query trending manga")
return nil, errors.New("couldn't query trending manga")
}
return &discord.Embed{
Title: "Trending Manga",
Description: formatTrending(r),
}, nil
}
// Anime is a subcommand of Search
func (s *Trending) Anime(_ *gateway.MessageCreateEvent) (*discord.Embed, error) {
r, err := anilist.TrendingMediaQuery("ANIME")
if err != nil {
log.Err(err).
Str("Type", "TRENDING ANIME").
Msg("Could not query trending anime")
return nil, errors.New("couldn't query trending anime")
}
return &discord.Embed{
Title: "Trending Anime",
Description: formatTrending(r),
}, nil
}
func formatTrending(list anilist.TrendingMediaStruct) string {
sb := new(strings.Builder)
for _, v := range list.Page.Media {
sb.WriteString(v.Title.Romaji)
sb.WriteString("\n")
}
return sb.String()
}