Skip navigation

Sans titrePar où commencer… Il y a longtemps, dans une galaxie… je jouais beaucoup, vraiment beaucoup à SWGEmu, j’avais donc install un petit gadget windows qui affichait les stats des deux serveurs. Vraiment pratique.

J’ai fait une longue pause. Et me voilà de retour ! Seulement le gadget ne marche plus… Je décide donc de faire un petit tour sur android voir si une app existe

et OUI !

Je l’install donc, et biensur : « notworking » . (╯°□°)╯︵ ┻━┻
(Je ne suis pas allez voir les app ios (pas de device pour))

Il existe donc deux façons relativement simples pour consulter ces stats :
1) le website ( swgemu.com (mal adapté aux mobiles))
2) le chan irc ( irc.swgemu.com #status (trop peu utilisé))
Pourquoi ne pas rajouter une troisième option ? ┬──┬ ノ( ゜-゜ノ)

Un bot qui tweeterait les stats à chaque actualisation du bot irc présent sur le chan #status.
Bref, du coup voila ce que ça donne :

#NODEJS

index.js

const Twitter = require('twitter');
const Irc = require('irc');

const IRC_CHANEL = '#status';
const IRC_HOST = 'irc.swgemu.com';
const IRC_USER = 'TwitBot';

const FROM_NICK = 'Status';

const TWITTER = {
consumer_key: 'CONSUMER_KEY',
consumer_secret: 'CONSUMER_SECRET',
access_token_key: 'ACCES_TOKEN_KEY',
access_token_secret: 'ACCES_TOKEN_SECRET'
}

const ircClient = new Irc.Client(IRC_HOST, IRC_USER, {
channels: [IRC_CHANEL],
debug: true
});

const twitterClient = new Twitter(TWITTER);

function parseStatus(status){

// Decode >< status = JSON.parse(JSON.stringify(status).replace(/\\u([\d]{4})/gi, () => ''));

var sentences = [];
var regex = /[0-9]{1}Current[\s]{1,}([\w]{3,12})[\s\w]{1,}[0-9]{1}([A-Z]{6,})[\s-]{3,}[0-9]{1}Users:[\s]{1,}([0-9]{1,})[\s-]{3,}[0-9]{1}Uptime:[\s]{1,}([\w\s]{10,})([\s-]{2,})?([\w\s]{1,}Maximum Capacity[\s:]{3,}[0-9]{1} )?([0-9]{4,})?/g;
var rows = status.match(new RegExp(regex));

if(!rows)return [];

rows.forEach(function(row){
var match = new RegExp(regex).exec(row);
var sentence = `Current ${match[1]} status is ${match[2]} - Users: ${match[3]} - Uptime: ${match[4]}`;
if(match[7])sentence += `- Maximum Capacity : ${match[7]}`;
sentence += ' #SWGEmu';
sentences.push(sentence);
});

return sentences;
}

ircClient.addListener('message', function (from, nick, message) {
//console.log(from, nick, message);
if(from != FROM_NICK)return;
parseStatus(message).forEach(function(status){
twitterClient.post('statuses/update', {status: status}, function(err, tweet) {
if(err) return console.log(err);
console.log('tweet sent');
});
});
});

package.json


{
"name": "twitterirc",
"version": "1.0.0",
"description": "bot",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "shivashandra",
"license": "GPLv3",
"dependencies": {
"irc": "^0.4.0",
"twitter": "^1.2.5"
},
"engines": {
"node": ">= 5.0.0"
}
}

Le code est aussi accessible ici : https://github.com/shiva-shandra/SWGEmu_Status_Bot

Et enfin, le résultat !

https://twitter.com/SWGEmu_Status

 

Un Grand merci à Dim sans qui tout ca aurais pris deux mois…