@@ -7,13 +7,14 @@ import (
7
7
"github.com/modmuss50/goutils"
8
8
"encoding/json"
9
9
"strings"
10
- "strconv"
11
10
"github.com/dustin/go-humanize"
12
11
"github.com/bwmarrin/discordgo"
13
12
"sort"
14
13
"github.com/patrickmn/go-cache"
15
14
"time"
16
15
"compress/bzip2"
16
+ "github.com/modmuss50/CAV2"
17
+ "strconv"
17
18
)
18
19
19
20
var (
23
24
24
25
func Load (){
25
26
Cache = cache .New (90 * time .Minute , 1 * time .Minute )
27
+
28
+ //logs with with cav
29
+ err := cav2 .SetupDefaultConfig ()
30
+ if err != nil {
31
+ panic (err )
32
+ }
26
33
}
27
34
28
35
func HandleCurseMessage (s * discordgo.Session , m * discordgo.MessageCreate ) bool {
@@ -37,7 +44,8 @@ func HandleCurseMessage(s *discordgo.Session, m *discordgo.MessageCreate) bool {
37
44
38
45
data , found := Cache .Get ("data" )
39
46
if ! found {
40
- s .ChannelMessageSend (m .ChannelID , "Curse Cache Expired, re-downloading" )
47
+ m , merr := s .ChannelMessageSend (m .ChannelID , "Curse Cache Expired, give me a second ..." )
48
+ s .ChannelTyping (m .ChannelID )
41
49
reader , dwerr := goutils .Download ("http://clientupdate-v6.cursecdn.com/feed/addons/432/v10/complete.json.bz2" )
42
50
if dwerr != nil {
43
51
s .ChannelMessageSend (m .ChannelID , "failed to download curse data" )
@@ -55,62 +63,77 @@ func HandleCurseMessage(s *discordgo.Session, m *discordgo.MessageCreate) bool {
55
63
data = database
56
64
57
65
Cache .Set ("data" , database , cache .DefaultExpiration )
66
+
67
+ if merr == nil { //Remove that message
68
+ s .ChannelMessageDelete (m .ChannelID , m .ID )
69
+ }
58
70
}
59
71
60
72
var database = data .(AddonDatabase )
61
73
62
- var downloads int64 = 0
63
74
64
- var addons []Addon
75
+
76
+ var addons []int
65
77
66
78
for _ ,addon := range database .Addons {
67
79
for _ ,author := range addon .Authors {
68
80
if strings .EqualFold (author .Name , username ){
69
- addons = append (addons , addon )
70
-
71
- downloads = downloads + getDownloadCount (addon .DownloadCount )
81
+ addons = append (addons , addon .Id )
72
82
}
73
83
}
74
84
}
75
85
86
+ if len (addons ) == 0 {
87
+ s .ChannelMessageSend (m .ChannelID , "No addons found for " + username )
88
+ return true
89
+ }
90
+
91
+
92
+ var downloads float64 = 0
93
+ addonInfo , err := cav2 .GetAddons (addons )
94
+ if err != nil {
95
+ s .ChannelMessageSend (m .ChannelID , "Something bad happened when loading detailed addon data from curse" )
96
+ return true
97
+ }
98
+
99
+ for _ , addon := range addonInfo {
100
+ downloads += addon .DownloadCount
101
+ }
102
+
76
103
if downloads == 0 {
77
104
s .ChannelMessageSend (m .ChannelID , "No downloads found for " + username )
78
105
return true
79
106
}
80
107
81
- sort .Sort (SortAddon (addons ))
108
+ sort .Sort (SortAddon (addonInfo ))
82
109
projects := ""
83
- for i ,addon := range addons {
84
- if i < 10 {
85
- projects = projects + addon .Name + " : `" + humanize .Comma (getDownloadCount (addon .DownloadCount )) + "`\n "
86
-
87
- }
110
+ for _ ,addon := range addonInfo {
111
+ projects = projects + addon .Name + " : `" + humanize .Comma (round (addon .DownloadCount )) + "`\n "
88
112
}
113
+
89
114
s .ChannelMessageSend (m .ChannelID , projects )
90
115
91
- fmt .Println (humanize .Comma (downloads ))
92
- s .ChannelMessageSend (m .ChannelID , username + " has `" + humanize .Comma (downloads ) + "` total downloads" )
116
+ fmt .Println (humanize .Comma (round ( downloads ) ))
117
+ s .ChannelMessageSend (m .ChannelID , username + " has `" + humanize .Comma (round ( downloads )) + "` total downloads over `" + strconv . Itoa ( len ( addons )) + "` projects " )
93
118
}
94
119
return false
95
120
}
96
121
97
- type SortAddon []Addon
122
+ type SortAddon []cav2. Addon
98
123
99
124
func (c SortAddon ) Len () int { return len (c ) }
100
125
func (c SortAddon ) Swap (i , j int ) { c [i ], c [j ] = c [j ], c [i ] }
101
- func (c SortAddon ) Less (i , j int ) bool { return getDownloadCount (c [i ].DownloadCount ) > getDownloadCount (c [j ].DownloadCount ) }
102
-
103
- func getDownloadCount (number json.Number ) int64 {
104
- intstr := strings .Split (number .String (), "." )[0 ]
105
- int , _ := strconv .ParseInt (intstr , 10 , 64 )
106
- return int
107
- }
126
+ func (c SortAddon ) Less (i , j int ) bool { return c [i ].DownloadCount > c [j ].DownloadCount }
108
127
109
128
func LoadFromBz2 (byteArray []byte ) string {
110
129
reader := bzip2 .NewReader (bytes .NewReader (byteArray ))
111
130
buf := new (bytes.Buffer )
112
131
buf .ReadFrom (reader )
113
132
s := buf .String ()
114
133
return s
134
+ }
115
135
136
+ func round (val float64 ) int64 {
137
+ if val < 0 { return int64 (val - 0.5 ) }
138
+ return int64 (val + 0.5 )
116
139
}
0 commit comments