The GSI object takes raw request from CS:GO GSI's system, parses this to more comfortable form and calls listeners on certain events. You need to configure GSI file and receiving end yourself.
npm install csgogsi
import express from 'express';
import { CSGOGSI } from 'csgogsi';
const app = express();
const GSI = new CSGOGSI();
app.use(express.urlencoded({extended:true}));
app.use(express.raw({limit:'10Mb', type: 'application/json' }));
app.post('/', (req, res) => {
const text = req.body.toString().replace(/"(player|owner)":([ ]*)([0-9]+)/gm, '"$1": "$3"').replace(/(player|owner):([ ]*)([0-9]+)/gm, '"$1": "$3"');
const data = JSON.parse(text);
GSI.digest(data);
res.sendStatus(200);
});
GSI.on('roundEnd', score => {
console.log(`Team ${score.winner.name} win!`);
});
GSI.on('bombPlant', player => {
console.log(`${player.name} planted the bomb`);
});
app.listen(3000);
Method |
Description |
Example |
Returned objects |
digest(GSIData) |
Gets raw GSI data from CSGO and does magic |
GSI.digest(req.body) |
CSGO Parsed |
digestMIRV(event: RawKill or RawHurt, eventType: "player_death" (default) or "player_hurt) |
Gets raw kill data from mirv pgl and does magic |
GSI.digestMIRV(mirv) |
KillEvent or HurtEvent |
on('event', callback) |
Sets listener for given event (check them below) |
GSI.on('roundEnd', score => { console.log(score.winner.name); }); |
|
static findSite(mapName, position) |
Tries to guess the bombsite of the position |
|
A, B, null |
CSGOGSI also has MR property, which specifies the MR system for overtimes (used in map.rounds). Default value is 3.
Beside that, CSGOGSI implements standard Event Emitter interfaces.
Event |
Name |
Callback |
Data incoming |
data |
(data: CSGO Parsed) => {} |
End of the round |
roundEnd |
(score: Score) => {} |
End of the map |
matchEnd |
(score: Score) => {} |
Kill |
kill |
(kill: KillEvent) => {} |
Hurt |
hurt |
(hurt: HurtEvent) => {} |
Timeout start |
timeoutStart |
(team: Team) => {} |
Timeout end |
timeoutEnd |
() => {} |
MVP of the round |
mvp |
(player: Player) => {} |
Freezetime start |
freezetimeStart |
() => {} |
Freezetime end |
freezetimeEnd |
() => {} |
Intermission start |
intermissionStart |
() => {} |
Intermission end |
intermissionEnd |
() => {} |
Defuse started |
defuseStart |
(player: Player) => {} |
Defuse stopped (but not defused and not exploded) |
defuseStop |
(player: Player) => {} |
Bomb plant started |
bombPlantStart |
(player: Player) => {} |
Bomb planted |
bombPlant |
(player: Player) => {} |
Bomb exploded |
bombExplode |
() => {} |
Bomb defused |
bombDefuse |
(player: Player) => {} |
Property |
Type |
provider |
Provider Object |
map |
Map Object |
round |
Round Object or null |
player |
Player Object or null |
players |
Array of Player's Object |
observer |
Observer Object |
bomb |
Bomb Object |
phase_countdowns |
The same as in raw GSI |
Property |
Type |
activity |
'playing', 'textinput' or 'menu' |
spectarget |
'free' or SteamID64 |
position |
number[] |
forward |
number[] |
Property |
Type |
id |
string |
name |
string |
country |
string or null |
logo |
string or null |
map_score |
number |
Property |
Type |
id |
string |
name |
string |
steramid |
string |
realName |
string or null |
country |
string or null |
avatar |
string or null |
Property |
Type |
name |
'Counter-Strike: Global Offensive' |
appid |
730 |
version |
number |
steamid |
number |
timestamp |
number |
Property |
Type |
mode |
string |
name |
string |
phase |
"warmup" or "live" or "intermission" or "gameover" |
round |
number |
team_ct |
Team Object |
team_t |
Team Object |
num_matches_to_win_series |
number |
current_spectators |
number |
souvenirs_total |
number |
round_wins |
Object with Round Outcome Object as values |
rounds |
Array of RoundInfo objects |
Property |
Type |
team |
Team |
round |
number |
side |
Side |
outcome |
'ct_win_elimination', 't_win_elimination', 'ct_win_time', 'ct_win_defuse', 't_win_bomb' |
Property |
Type |
phase |
"freezetime" or "live" or "over" |
bomb? |
"planted" or "exploded" or "defused" |
win_team? |
Side Object |
Property |
Type |
steamid |
string |
name |
string |
observer_slot |
number |
team |
Team Object |
stats |
{kills, assists, deaths, mvps, score} all numbers |
state |
{health, armor, helmet, defusekit?, flashed, smoked, burning, money, round_kills, round_killshs, round_totaldmg, equip_value, adr} |
position |
Array of numbers |
forward |
number |
avatar |
string or null |
country |
string or null |
realName |
string or null |
Property |
Type |
state |
"carried" or "planted" or "dropped" or "defused" or "defusing" or "planting" or "exploded" |
countdown? |
string |
player? |
Player Object |
position |
string |
Property |
Type |
score |
number |
consecutive_round_losses |
number |
timeouts_remaining |
number |
matches_won_this_series |
string |
name |
string |
country |
string or null |
id |
string or null |
side |
Side Object |
orientation |
left or right |
logo |
string |
Property |
Type |
winner |
Team |
loser |
Team |
map |
Map |
mapEnd |
boolean |
"CT" or "T"