-
Notifications
You must be signed in to change notification settings - Fork 0
/
scoresaber.js
132 lines (114 loc) · 4.26 KB
/
scoresaber.js
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
120
121
122
123
124
125
126
127
128
129
130
131
132
/* CONFIG
var display# = [data, dataType, displayID];
When setting these values, DO NOT CHANGE displayID.
While good practive to set a value for data, it can be left blank if using a custom type other than 0.
*/
var display0 = [0,2,0];
var display1 = [0,3,1];
var display2 = [0,7,2];
//END CONFIG
// ignore this stuff unless things do really wrong, then contact me on discord (TM0D#4533)
var LedControl = require("rpi-led-control");
var lc = new LedControl(14,18,15);
var ld = new LedControl(13,26,19);
var le = new LedControl(23,25,24);
var ss = "";
var displaySSData = [0,0,0,0,0,0];
callAPI();
setInterval(function(){
callAPI();
console.log("\n\n\n" + Date.now() + ": Calling ScoreSaber API (setInterval 30s)");
}, 600000);
function callAPI(){
console.log(Date.now() + ": Calling ScoreSaber API (callAPI())");
const http = require("https")
http.request(
{
hostname: "scoresaber.com",
path: "/api/player/76561198323656813/full",
},
res => {
let data = ""
res.on("data", d => {
data += d
})
res.on("end", () => {
console.log(ss = data)
console.log(Date.now() + ": Completed API Call, Status: " + res.statusCode);
if (res.statusCode = 200) {
prepData();
} else {
console.log("No Response, holding data and waiting.")
}
})
})
.end()
}
function prepData() {
displaySSData[0] = Number(ss.substring(ss.indexOf("\"pp\": ") + 6, ss.indexOf(",", ss.indexOf("\"pp\": "))));
//display 0: pp
displaySSData[1] = Number(ss.substring(ss.indexOf("\"rank\": ") + 8, ss.indexOf(",", ss.indexOf("\"rank\": "))));
//display 1: rank
displaySSData[2] = Number(ss.substring(ss.indexOf("\"countryRank\": ") + 15, ss.indexOf(",", ss.indexOf("\"countryRank\": "))));
//display 2: countryRank
displaySSData[3] = Number(ss.substring(ss.indexOf("\"totalPlayCount\": ") + 18, ss.indexOf(",", ss.indexOf("\"totalPlayCount\": "))));
//display 3: totalPlayCount
displaySSData[4] = Number(ss.substring(ss.indexOf("\"rankedPlayCount\": ") + 19, ss.indexOf("}", ss.indexOf("\"rankedPlayCount\": ") - 3)));
//display 4: rankedPlayCount
displaySSData[5] = Number(ss.substring(ss.indexOf("\"averageRankedAccuracy\": ") + 25, ss.indexOf(",", ss.indexOf("\"averageRankedAccuracy\": "))));
//display 5: averageRankedAcc
console.log(Date.now() + ": Completed Data Processing (" + displaySSData + ")");
displayInfo(display0,lc);
displayInfo(display1,ld);
displayInfo(display2,le);
console.log(Date.now() + ": Completed Display Building ("+display0[1]+","+display1[1]+","+display2[1]+")");
}
function displayInfo(display, lcd) {
let type = display[1];
// showNumber(deviceNumber, num, [decimalplaces], [minimumdigits], [leftjustified], [pos], [dontclear])
switch (type) {
// SPECIAL CASES
case 2: // pp
lcd.showNumber(0,displaySSData[0],1);
lcd.setChar(0, 7, "P", true);
lcd.setChar(0, 6, "P", true);
break;
case 3: // 4 digits each for played, total / ranked
lcd.showNumber(0,displaySSData[3],0,1,true,void 0,false);
lcd.showNumber(0,displaySSData[4],0,1,false,void 0,true);
break;
case 4: // 4 digits each for played, ranked / total
lcd.showNumber(0,displaySSData[4],0,1,true,void 0,false);
lcd.showNumber(0,displaySSData[3],0,1,false,void 0,true);
break;
case 5: // totalPlays
lcd.showNumber(0,displaySSData[3],0,1,false,void 0,true);
break;
case 6: // rankedPlays
lcd.showNumber(0,displaySSData[4],0,1,false,void 0,true);
break;
case 7: // rank
lcd.showNumber(0,displaySSData[1],0,1,false,void 0,true);
break;
case 8: // countryRank
lcd.showNumber(0,displaySSData[2],0,1,false,void 0,true);
break;
case 9: // 4 digits each for rank, rank / country
lcd.showNumber(0,displaySSData[1],0,1,true,void 0,false);
lcd.showNumber(0,displaySSData[2],0,1,false,void 0,true);
break;
case 10: // 4 digits each for rank, country / rank
lcd.showNumber(0,displaySSData[2],0,1,true,void 0,false);
lcd.showNumber(0,displaySSData[1],0,1,false,void 0,true);
break;
//DEFAULT CASES
case 1: // Double, rounded to hundreths
lcd.showNumber(0,display[0],2,3);
break;
case 0: // Integer, no formatting
default:
lcd.showNumber(0,display[0])
break;
}
console.log("Display" + display[2] + " with type " + type);
}