Add MediaWiki integration basics
This commit is contained in:
parent
74429feb9d
commit
c0c2f97dae
4
index.js
4
index.js
@ -147,4 +147,8 @@ module.exports = async function(robot) {
|
||||
|
||||
require('./integrations/github')(robot, kredits);
|
||||
|
||||
if (typeof process.env.KREDITS_MEDIAWIKI_URL !== 'undefined') {
|
||||
require('./integrations/mediawiki')(robot, kredits);
|
||||
}
|
||||
|
||||
};
|
||||
|
@ -1,5 +1,7 @@
|
||||
module.exports = async function(robot, kredits) {
|
||||
|
||||
robot.logger.debug('[hubot-kredits] Loading GitHub integration...')
|
||||
|
||||
const Contributor = kredits.Contributor;
|
||||
const Operator = kredits.Operator;
|
||||
|
||||
|
85
integrations/mediawiki.js
Normal file
85
integrations/mediawiki.js
Normal file
@ -0,0 +1,85 @@
|
||||
const util = require('util');
|
||||
const fetch = require('node-fetch');
|
||||
const groupArray = require('group-array');
|
||||
|
||||
module.exports = async function(robot, kredits) {
|
||||
|
||||
robot.logger.debug('[hubot-kredits] Loading MediaWiki integration...')
|
||||
|
||||
const Contributor = kredits.Contributor;
|
||||
const Operator = kredits.Operator;
|
||||
|
||||
const apiURL = process.env.KREDITS_MEDIAWIKI_URL + 'api.php';
|
||||
|
||||
const robot = {
|
||||
data: {},
|
||||
brain: {
|
||||
set(key, value) {
|
||||
this.data[key] = value;
|
||||
},
|
||||
get(key) {
|
||||
return this.data[key];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function fetchChanges () {
|
||||
const params = [
|
||||
'action=query',
|
||||
'format=json',
|
||||
'list=recentchanges',
|
||||
'rctype=edit|new',
|
||||
'rcshow=!minor|!bot|!anon|!redirect',
|
||||
'rclimit=max',
|
||||
'rcprop=ids|title|timestamp|user|sizes|comment|flags'
|
||||
];
|
||||
|
||||
const url = `${apiURL}?${params.join('&')}`;
|
||||
|
||||
return fetch(url).then(res => {
|
||||
if (res.status === 200) {
|
||||
return res.json();
|
||||
} else {
|
||||
robot.logger.warn(`Fetching ${url} returned HTTP status ${res.status}:`);
|
||||
robot.logger.warn(res.body);
|
||||
throw Error('Unexpected response from '+url);
|
||||
}
|
||||
}).then(res => {
|
||||
return res.query.recentchanges;
|
||||
});
|
||||
}
|
||||
|
||||
function groupChangesByUser (changes) {
|
||||
return groupArray(changes, 'user');
|
||||
}
|
||||
|
||||
function analyzeUserChanges (user, changes) {
|
||||
robot.logger.info(`Analyzing ${changes.length} edits from ${user} ...`);
|
||||
const results = {};
|
||||
|
||||
results.pagesCreated = changes.filter(c => c.type === 'new');
|
||||
results.pagesChanged = changes.filter(c => c.type === 'edit');
|
||||
results.linesAdded = changes
|
||||
.map(c => { return (c.oldlen < c.newlen) ? (c.newlen - c.oldlen) : 0; })
|
||||
.reduce((a, b) => a + b);
|
||||
|
||||
robot.logger.info(`Created ${results.pagesCreated.length} pages`);
|
||||
robot.logger.info(`Edited ${results.pagesChanged.length} pages`);
|
||||
robot.logger.info(`Added ${results.linesAdded} lines of text\n`);
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
function createProposalForUserChanges (user, changes) {
|
||||
const details = analyzeUserChanges(user, changes);
|
||||
|
||||
// robot.logger.info(util.inspect(details));
|
||||
}
|
||||
|
||||
fetchChanges()
|
||||
.then(res => groupChangesByUser(res))
|
||||
.then(res => {
|
||||
Object.keys(res).forEach(user => createProposalForUserChanges(user, res[user]));
|
||||
});
|
||||
|
||||
};
|
79
mediawiki.js
79
mediawiki.js
@ -1,79 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
const util = require('util');
|
||||
const fetch = require('node-fetch');
|
||||
const groupArray = require('group-array');
|
||||
|
||||
if (typeof process.env.KREDITS_MEDIAWIKI_URL === 'undefined') { return false; }
|
||||
const apiURL = process.env.KREDITS_MEDIAWIKI_URL + 'api.php';
|
||||
|
||||
const robot = {
|
||||
data: {},
|
||||
brain: {
|
||||
set(key, value) {
|
||||
this.data[key] = value;
|
||||
},
|
||||
get(key) {
|
||||
return this.data[key];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function fetchChanges () {
|
||||
const params = [
|
||||
'action=query',
|
||||
'format=json',
|
||||
'list=recentchanges',
|
||||
'rctype=edit|new',
|
||||
'rcshow=!minor|!bot|!anon|!redirect',
|
||||
'rclimit=max',
|
||||
'rcprop=ids|title|timestamp|user|sizes|comment|flags'
|
||||
];
|
||||
|
||||
const url = `${apiURL}?${params.join('&')}`;
|
||||
|
||||
return fetch(url).then(res => {
|
||||
if (res.status === 200) {
|
||||
return res.json();
|
||||
} else {
|
||||
console.log(`Fetching ${url} returned HTTP status ${res.status}:`);
|
||||
console.log(res.body);
|
||||
throw Error('Unexpected response from '+url);
|
||||
}
|
||||
}).then(res => {
|
||||
return res.query.recentchanges;
|
||||
});
|
||||
}
|
||||
|
||||
function groupChangesByUser (changes) {
|
||||
return groupArray(changes, 'user');
|
||||
}
|
||||
|
||||
function analyzeUserChanges (user, changes) {
|
||||
console.log(`Analyzing ${changes.length} edits from ${user} ...`);
|
||||
const results = {};
|
||||
|
||||
results.pagesCreated = changes.filter(c => c.type === 'new');
|
||||
results.pagesChanged = changes.filter(c => c.type === 'edit');
|
||||
results.linesAdded = changes
|
||||
.map(c => { return (c.oldlen < c.newlen) ? (c.newlen - c.oldlen) : 0; })
|
||||
.reduce((a, b) => a + b);
|
||||
|
||||
console.log(`Created ${results.pagesCreated.length} pages`);
|
||||
console.log(`Edited ${results.pagesChanged.length} pages`);
|
||||
console.log(`Added ${results.linesAdded} lines of text\n`);
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
function createProposalForUserChanges (user, changes) {
|
||||
const details = analyzeUserChanges(user, changes);
|
||||
|
||||
// console.log(util.inspect(details));
|
||||
}
|
||||
|
||||
fetchChanges()
|
||||
.then(res => groupChangesByUser(res))
|
||||
.then(res => {
|
||||
Object.keys(res).forEach(user => createProposalForUserChanges(user, res[user]));
|
||||
});
|
Loading…
x
Reference in New Issue
Block a user