-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathpoe.go
119 lines (113 loc) · 4.04 KB
/
poe.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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package main
import (
"encoding/json"
"fmt"
"net/http"
"strings"
"time"
raven "github.com/getsentry/raven-go"
log "gopkg.in/inconshreveable/log15.v2"
)
const poeNinjaCurrencyEndpoint = `https://poe.ninja/api/data/currencyoverview?league=%s&type=Currency`
func formatCurrencyForSlack(pnc PoeNinjaCurrency) string {
currencies := make(map[string]float64)
var ret []string
ret = append(ret, "\n")
var currencyString string
for _, l := range pnc.Lines {
if stringSliceContains(conf.PoE.WantedCurrencies, l.CurrencyTypeName) {
curName := strings.ToLower(strings.Replace(strings.Replace(l.CurrencyTypeName, " Orb", "", -1), " ", "", -1))
currencies[curName] = l.ChaosEquivalent
}
}
for _, c := range conf.PoE.WantedCurrencies {
var extra string
curName := strings.ToLower(strings.Replace(strings.Replace(c, " Orb", "", -1), " ", "", -1))
if curName == "mirrorofkalandra" {
mirrorInDiv := currencies[curName] / currencies["divine"]
extra = fmt.Sprintf(" %.3f :divine:", mirrorInDiv)
}
currencyString = fmt.Sprintf(":%s: : %.3f :chaos:%s", curName, currencies[curName], extra)
ret = append(ret, currencyString)
}
return strings.Join(ret, "\n")
}
func handlePoeCurrencyQuery() string {
url := fmt.Sprintf(poeNinjaCurrencyEndpoint, conf.PoE.League)
log.Debug("handlePoeCurrency: Attempting to fetch", "URL", url)
resp, err := http.Get(url)
if err != nil {
raven.CaptureError(err, nil)
log.Debug("HTTP request to Poe Currency Endpoint failed", "Error", err)
return ""
}
defer resp.Body.Close()
var pnc PoeNinjaCurrency
if resp.StatusCode == 200 {
if err := json.NewDecoder(resp.Body).Decode(&pnc); err != nil {
raven.CaptureError(err, nil)
log.Debug("Failed decoding the PoE Currency response", "Error", err)
return ""
}
return formatCurrencyForSlack(pnc)
}
return ""
}
type PoeNinjaCurrency struct {
Lines []struct {
CurrencyTypeName string `json:"currencyTypeName"`
Pay struct {
ID int `json:"id"`
LeagueID int `json:"league_id"`
PayCurrencyID int `json:"pay_currency_id"`
GetCurrencyID int `json:"get_currency_id"`
SampleTimeUtc time.Time `json:"sample_time_utc"`
Count int `json:"count"`
Value float64 `json:"value"`
DataPointCount int `json:"data_point_count"`
IncludesSecondary bool `json:"includes_secondary"`
ListingCount int `json:"listing_count"`
} `json:"pay,omitempty"`
Receive struct {
ID int `json:"id"`
LeagueID int `json:"league_id"`
PayCurrencyID int `json:"pay_currency_id"`
GetCurrencyID int `json:"get_currency_id"`
SampleTimeUtc time.Time `json:"sample_time_utc"`
Count int `json:"count"`
Value float64 `json:"value"`
DataPointCount int `json:"data_point_count"`
IncludesSecondary bool `json:"includes_secondary"`
ListingCount int `json:"listing_count"`
} `json:"receive"`
PaySparkLine struct {
Data []interface{} `json:"data"`
TotalChange float64 `json:"totalChange"`
} `json:"paySparkLine"`
ReceiveSparkLine struct {
Data []float64 `json:"data"`
TotalChange float64 `json:"totalChange"`
} `json:"receiveSparkLine"`
ChaosEquivalent float64 `json:"chaosEquivalent"`
LowConfidencePaySparkLine struct {
Data []interface{} `json:"data"`
TotalChange float64 `json:"totalChange"`
} `json:"lowConfidencePaySparkLine"`
LowConfidenceReceiveSparkLine struct {
Data []float64 `json:"data"`
TotalChange float64 `json:"totalChange"`
} `json:"lowConfidenceReceiveSparkLine"`
DetailsID string `json:"detailsId"`
} `json:"lines"`
CurrencyDetails []struct {
ID int `json:"id"`
Icon string `json:"icon"`
Name string `json:"name"`
TradeID string `json:"tradeId,omitempty"`
} `json:"currencyDetails"`
Language struct {
Name string `json:"name"`
Translations struct {
} `json:"translations"`
} `json:"language"`
}