mirror of
https://github.com/LBRYFoundation/lbry-wunderbot.git
synced 2025-08-23 17:47:27 +00:00
rewrite claimbot
add missing packages rename example config update example config
This commit is contained in:
parent
72ae7fd91c
commit
c02e364759
5 changed files with 268 additions and 286 deletions
|
@ -1,26 +1,24 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
let lbry;
|
|
||||||
let mongo;
|
let mongo;
|
||||||
let discordBot;
|
let discordBot;
|
||||||
let moment = require('moment');
|
let moment = require('moment');
|
||||||
let request = require('request');
|
|
||||||
let sleep = require('sleep');
|
|
||||||
let config = require('config');
|
let config = require('config');
|
||||||
let channels = config.get('claimbot').channels;
|
let channels = config.get('claimbot').channels;
|
||||||
const Discord = require('discord.js');
|
const Discord = require('discord.js');
|
||||||
const rp = require('request-promise');
|
|
||||||
const jsonfile = require('jsonfile');
|
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const appRoot = require('app-root-path');
|
const appRoot = require('app-root-path');
|
||||||
const fileExists = require('file-exists');
|
const fileExists = require('file-exists');
|
||||||
|
const request = require('request');
|
||||||
|
let lastProcessedBlock = 0;
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
init: init
|
init: init
|
||||||
};
|
};
|
||||||
|
|
||||||
function init(discordBot_) {
|
function init(discordBot_) {
|
||||||
if (lbry) {
|
if (discordBot) {
|
||||||
throw new Error('init was already called once');
|
throw new Error('init was already called once');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,7 +33,7 @@ function init(discordBot_) {
|
||||||
}
|
}
|
||||||
mongo = db;
|
mongo = db;
|
||||||
|
|
||||||
console.log('Activating claimbot ');
|
console.log('Activating claimbot');
|
||||||
discordBot.channels.get(channels[0]).send('activating claimbot');
|
discordBot.channels.get(channels[0]).send('activating claimbot');
|
||||||
|
|
||||||
// Check that our syncState file exist.
|
// Check that our syncState file exist.
|
||||||
|
@ -48,110 +46,101 @@ function init(discordBot_) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
setInterval(function() {
|
setInterval(function() {
|
||||||
//announceClaims(); pause the claim until https://github.com/lbryio/chainquery/issues/58 has been fixed.
|
announceClaimsV2();
|
||||||
}, 60 * 1000);
|
}, 60 * 1000);
|
||||||
//announceClaims();
|
//announceClaims();
|
||||||
}
|
}
|
||||||
);
|
).catch(console.error);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function announceClaims() {
|
function announceClaimsV2() {
|
||||||
// get last block form the explorer API.
|
getClaimsForLastBlock()
|
||||||
let lastBlockHeight = JSON.parse(await rp('https://explorer.lbry.io/api/v1/status')).status.height;
|
.then(claims => {
|
||||||
// get the latest claims from chainquery since last sync
|
let currentBlock = lastProcessedBlock;
|
||||||
let syncState = await getJSON(path.join(appRoot.path, 'syncState.json')); // get our persisted state
|
claims.forEach(c => {
|
||||||
if (!syncState.LastSyncTime) {
|
if (c.height <= lastProcessedBlock) return;
|
||||||
syncState.LastSyncTime = new Date()
|
currentBlock = c.height;
|
||||||
.toISOString()
|
console.log(JSON.stringify(c, null, 4));
|
||||||
.slice(0, 19)
|
|
||||||
.replace('T', ' ');
|
//filter claims that we don't want to announce
|
||||||
}
|
if (c.bid_state === 'Expired' || c.bid_state === 'Spent') return;
|
||||||
let claimsSince = JSON.parse(await getClaimsSince(syncState.LastSyncTime)).data;
|
|
||||||
// filter out the claims that we should add to discord
|
discordPost(embedFromClaim(c));
|
||||||
let claims = [];
|
});
|
||||||
for (let claim of claimsSince) {
|
lastProcessedBlock = currentBlock;
|
||||||
claim.value = JSON.parse(claim.value);
|
})
|
||||||
if (claim.value.Claim && claim.value.Claim.stream) {
|
.catch(console.error);
|
||||||
claim.metadata = claim.value.Claim.stream.metadata;
|
}
|
||||||
} else {
|
|
||||||
claim.metadata = null;
|
/**
|
||||||
}
|
*
|
||||||
if (claim.bid_state !== 'Spent' || claim.bid_state !== 'Expired') {
|
* @param {Object} claim
|
||||||
claims.push(claim);
|
* @returns {RichEmbed} discordEmbeded
|
||||||
}
|
*/
|
||||||
}
|
function embedFromClaim(claim) {
|
||||||
for (let claim of claims) {
|
let e = new Discord.RichEmbed();
|
||||||
console.log(claim);
|
const typeClaim = 1,
|
||||||
}
|
typeChannel = 2;
|
||||||
// send each claim to discord.
|
switch (claim.claim_type) {
|
||||||
for (let claim of claims) {
|
case typeClaim:
|
||||||
console.log(claim);
|
let channelName = claim.channel_name ? claim.channel_name : 'Anonymous';
|
||||||
if (claim.metadata) {
|
let channelPermalink = claim.channel_name ? `${claim.channel_name}#${claim.publisher_id}` : '';
|
||||||
// If its a claim, make a claimEmbed
|
let claimPermalink = claim.channel_name ? `${channelPermalink}/${claim.name}` : `${claim.name}#${claim.claim_id}`;
|
||||||
let claimEmbed = new Discord.RichEmbed()
|
let metadata = JSON.parse(claim.value_as_json).claim.stream.metadata;
|
||||||
.setAuthor(
|
e.setAuthor(`New claim from ${channelName}`, 'http://barkpost-assets.s3.amazonaws.com/wp-content/uploads/2013/11/3dDoge.gif', `http://open.lbry.io/${claimPermalink}`)
|
||||||
claim.channel ? `New claim from ${claim.channel}` : 'New claim from Anonymous',
|
.setTitle(`lbry://${claimPermalink}`)
|
||||||
'http://barkpost-assets.s3.amazonaws.com/wp-content/uploads/2013/11/3dDoge.gif',
|
.setURL(`http://open.lbry.io/${claimPermalink}`)
|
||||||
`http://open.lbry.io/${claim.channel ? `${claim.channel}#${claim.channelId}/${claim['name']}` : `${claim['name']}#${claim['claimId']}`}`
|
|
||||||
)
|
|
||||||
.setTitle('lbry://' + (claim.channel ? `${claim.channel}/` : '') + claim['name'])
|
|
||||||
.setURL(`http://open.lbry.io/${claim.channel ? `${claim.channel}#${claim.channelId}/${claim['name']}` : `${claim['name']}#${claim['claimId']}`}`)
|
|
||||||
.setColor(1399626)
|
.setColor(1399626)
|
||||||
.setFooter(`Block ${claim.height} • Claim ID ${claim.claimId} • Data from Chainquery`);
|
.setFooter(`Block ${claim.height} • Claim ID ${claim.claim_id} • Data from Chainquery`);
|
||||||
if (claim.metadata['title']) claimEmbed.addField('Title', claim.metadata['title']);
|
if (metadata.title) e.addField('Title', claim.metadata['title']);
|
||||||
if (claim.channel) claimEmbed.addField('Channel', claim.channel);
|
if (claim.channel_name) e.addField('Channel', claim.channel_name);
|
||||||
if (claim.metadata['description']) {
|
if (metadata.description) {
|
||||||
claimEmbed.addField('Description', claim.metadata['description'].substring(0, 1020));
|
e.addField('Description', claim.metadata.description.substring(0, 1020));
|
||||||
}
|
}
|
||||||
if (claim.metadata['fee']) claimEmbed.addField('Fee', claim.metadata['fee'].amount + ' ' + claim.metadata['fee'].currency);
|
if (metadata.fee) e.addField('Fee', `${metadata.fee.amount} ${metadata.fee.currency}`);
|
||||||
if (claim.metadata['license'] && claim.metadata['license'].length > 2) claimEmbed.addField('License', claim.metadata['license']);
|
if (metadata.license && metadata.license.length > 2) e.addField('License', metadata.license);
|
||||||
if (!claim.metadata['nsfw'] && claim.metadata['thumbnail']) claimEmbed.setImage(claim.metadata['thumbnail']);
|
if (!metadata.nsfw && metadata.thumbnail) e.setImage(claim.metadata.thumbnail);
|
||||||
if (claim.bid_state !== 'Controlling' && claim.height < claim.valid_at_height) {
|
if (claim.bid_state !== 'Controlling' && claim.height < claim.valid_at_height) {
|
||||||
// Claim have not taken over the old claim, send approx time to event.
|
// Claim have not taken over the old claim, send approx time to event.
|
||||||
let takeoverTime = Date.now() + (claim.valid_at_height - lastBlockHeight) * 161 * 1000; // in theory this should be 150, but in practice its closer to 161
|
let blockTime = 150 * 1000;
|
||||||
claimEmbed.addField('Takes effect on approx', moment(takeoverTime, 'x').format('MMMM Do [at] HH:mm [UTC]') + ` • at block height ${claim.valid_at_height}`);
|
let takeoverTime = Date.now() + (claim.valid_at_height - lastBlockHeight) * blockTime;
|
||||||
|
e.addField('Takes effect on approx', `${moment(takeoverTime, 'x').format('MMMM Do [at] HH:mm [UTC]')} • at block height ${claim.valid_at_height}`);
|
||||||
}
|
}
|
||||||
claimEmbed.addField('Claimed for', `${Number.parseFloat(claim.outputValue)} LBC`);
|
e.addField('Claimed for', `${Number.parseFloat(claim.bid_amount)} LBC`);
|
||||||
discordPost(claimEmbed);
|
break;
|
||||||
} else if (claim.name.charAt(0) === '@') {
|
case typeChannel:
|
||||||
// This is a channel claim
|
e.setAuthor('New channel claim', 'http://barkpost-assets.s3.amazonaws.com/wp-content/uploads/2013/11/3dDoge.gif', `https://open.lbry.io/${claim.name}#${claim.claim_id}`)
|
||||||
let channelEmbed = new Discord.RichEmbed()
|
.setTitle(`lbry://${claim.name}`)
|
||||||
.setAuthor('New channel claim', 'http://barkpost-assets.s3.amazonaws.com/wp-content/uploads/2013/11/3dDoge.gif', `http://open.lbry.io/${claim['name']}#${claim['claimId']}`)
|
.setURL(`https://open.lbry.io/${claim.name}#${claim.claim_id}`)
|
||||||
.setTitle('lbry://' + (claim.channel ? claim.channel + '/' : '') + claim['name'])
|
|
||||||
.setURL(`http://open.lbry.io/${claim['name']}#${claim['claimId']}`)
|
|
||||||
.setColor(1399626)
|
.setColor(1399626)
|
||||||
.setFooter(`Block ${claim.height} • Claim ID ${claim.claimId} • Data from Chainquery`)
|
.setFooter(`Block ${claim.height} • Claim ID ${claim.claim_id} • Data from Chainquery`)
|
||||||
.addField('Channel Name', claim['name']);
|
.addField('Channel Name', claim.name);
|
||||||
discordPost(channelEmbed);
|
break;
|
||||||
}
|
}
|
||||||
}
|
return e;
|
||||||
// set the last sync time to the db.
|
|
||||||
syncState.LastSyncTime = new Date()
|
|
||||||
.toISOString()
|
|
||||||
.slice(0, 19)
|
|
||||||
.replace('T', ' ');
|
|
||||||
await saveJSON(path.join(appRoot.path, 'syncState.json'), syncState);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getJSON(path) {
|
/**
|
||||||
|
*
|
||||||
|
* @returns {Promise} claims in last block
|
||||||
|
*/
|
||||||
|
function getClaimsForLastBlock() {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
jsonfile.readFile(path, function(err, jsoncontent) {
|
let query =
|
||||||
if (err) {
|
'SELECT t1.*, t3.name AS channel_name, t4.value AS bid_amount FROM claim t1 INNER JOIN (SELECT MAX(height) AS height FROM block) t2 ON t1.height = t2.height LEFT JOIN claim t3 ON t1.publisher_id = t3.claim_id LEFT JOIN output t4 ON (t1.transaction_hash_id = t4.transaction_hash AND t1.vout = t4.vout)';
|
||||||
reject(err);
|
let options = {
|
||||||
} else {
|
method: 'GET',
|
||||||
resolve(jsoncontent);
|
url: 'https://chainquery.lbry.io/api/sql',
|
||||||
}
|
qs: { query: query },
|
||||||
});
|
headers: { 'Cache-Control': 'no-cache' }
|
||||||
});
|
};
|
||||||
}
|
|
||||||
function saveJSON(path, obj) {
|
request(options, function(error, response, body) {
|
||||||
return new Promise((resolve, reject) => {
|
if (error) return reject(error);
|
||||||
jsonfile.writeFile(path, obj, function(err, jsoncontent) {
|
if (response.statusCode !== 200 || !body) return reject(response);
|
||||||
if (err) {
|
if (!body.success || body.error) return reject(response);
|
||||||
reject(err);
|
let claimsInBlock = body.data;
|
||||||
} else {
|
return resolve(claimsInBlock);
|
||||||
resolve();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -164,39 +153,3 @@ function discordPost(embed) {
|
||||||
.catch(console.error);
|
.catch(console.error);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function getClaimsSince(time) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
let query =
|
|
||||||
`` +
|
|
||||||
`SELECT ` +
|
|
||||||
`c.name,` +
|
|
||||||
`c.valid_at_height,` +
|
|
||||||
`c.height,` +
|
|
||||||
`p.name as channel,` +
|
|
||||||
`c.publisher_id as channelId,` +
|
|
||||||
`c.bid_state,` +
|
|
||||||
`c.effective_amount,` +
|
|
||||||
`c.claim_id as claimId,` +
|
|
||||||
`c.value_as_json as value, ` +
|
|
||||||
`c.transaction_hash_id, ` + // txhash and vout needed to leverage old format for comparison.
|
|
||||||
`c.vout, ` +
|
|
||||||
`o.value as outputValue ` +
|
|
||||||
`FROM claim c ` +
|
|
||||||
`LEFT JOIN claim p on p.claim_id = c.publisher_id ` +
|
|
||||||
`LEFT JOIN output o on (o.transaction_hash=c.transaction_hash_id and o.vout=c.vout) ` +
|
|
||||||
`WHERE c.created_at >='` +
|
|
||||||
time +
|
|
||||||
`'`;
|
|
||||||
// Outputs full query to console for copy/paste into chainquery (debugging)
|
|
||||||
// console.log(query);
|
|
||||||
rp(`https://chainquery.lbry.io/api/sql?query=` + query)
|
|
||||||
.then(function(htmlString) {
|
|
||||||
resolve(htmlString);
|
|
||||||
})
|
|
||||||
.catch(function(err) {
|
|
||||||
console.log('error', '[Importer] Error getting updated claims. ' + err);
|
|
||||||
reject(err);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
82
config/default.example.json
Normal file
82
config/default.example.json
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
{
|
||||||
|
// Bot configuration
|
||||||
|
"bot": {
|
||||||
|
"token": "",
|
||||||
|
"prefix": "!",
|
||||||
|
"debug": false
|
||||||
|
},
|
||||||
|
"moderation": {
|
||||||
|
"perms": ["Moderator Team", "LBRY TEAM"], // Roles that have access to all commands.
|
||||||
|
"logchannel": "371620338263523328" // Channel to log the bots moderation..
|
||||||
|
},
|
||||||
|
"lbrycrd": {
|
||||||
|
"host": "localhost",
|
||||||
|
"port": 9245,
|
||||||
|
"user": "USERHERE",
|
||||||
|
"pass": "PASSWORDHERE"
|
||||||
|
},
|
||||||
|
"mongodb": {
|
||||||
|
"url": "mongodb://localhost:27017/wunderbot"
|
||||||
|
},
|
||||||
|
"Channels": {
|
||||||
|
"verification": "363050496023592961",
|
||||||
|
"mining": "363049669636390913",
|
||||||
|
"random": "363084227518136322"
|
||||||
|
},
|
||||||
|
"speechbot": {
|
||||||
|
"channels": [
|
||||||
|
"363089721313722387",
|
||||||
|
"363085078403874823",
|
||||||
|
"363086945976320010",
|
||||||
|
"363086925428555776",
|
||||||
|
"363086752518242308",
|
||||||
|
"369896313082478594",
|
||||||
|
"363087606239461377",
|
||||||
|
"363088045366312962",
|
||||||
|
"363084227518136322",
|
||||||
|
"363084262028607488",
|
||||||
|
"371620338263523328"
|
||||||
|
], // Channels speech bot is allowed to post in
|
||||||
|
"mainchannel": "363085078403874823" // Main Speech Bot channel for directing with help message
|
||||||
|
},
|
||||||
|
"pricebot": {
|
||||||
|
"channels": ["363050205043621908", "369896313082478594", "371620338263523328"], // Chanels price bot is allowed to post in
|
||||||
|
"mainchannel": "363050205043621908" // Main Price Bot channel for directing with help message
|
||||||
|
},
|
||||||
|
"gitrelease": {
|
||||||
|
"channel": "370779899650375681" // Channel to send release info to using <!releasenotes post>
|
||||||
|
},
|
||||||
|
"spamdetection": {
|
||||||
|
"channels": ["363089721313722387", "363044238486798336", "363086719391629326", "363044275363119105", "363044260938776576", "372067478542745601", "369896313082478594", "371620338263523328"], // Channels excluded from Spam Detection
|
||||||
|
"users": ["244245498746241025"] // Users to exclude from Spam Detection (include other bots here)
|
||||||
|
},
|
||||||
|
"hashbot": {
|
||||||
|
"channels": ["363049669636390913", "369896313082478594", "371620338263523328"], // Channels Hash Bot is allowed to post in
|
||||||
|
"mainchannel": "363049669636390913" // Main Hash Bot channel for directing with help message
|
||||||
|
},
|
||||||
|
"statsbot": {
|
||||||
|
"channels": ["363050205043621908", "369896313082478594", "371620338263523328"], // Channels Stats Bot is allowed to post in
|
||||||
|
"mainchannel": "363050205043621908" // Main Stats Bot channel for directing with help message
|
||||||
|
},
|
||||||
|
"claimbot": {
|
||||||
|
"channels": ["363086719391629326"]
|
||||||
|
},
|
||||||
|
"rolelist": {
|
||||||
|
"baserole": "LBRYian",
|
||||||
|
"allowedroles": ["NSFW", "Traders", "Miners", "Off-Topic Chats", "International", "Dev"]
|
||||||
|
},
|
||||||
|
"irc": {
|
||||||
|
"nickname": "wunderbot",
|
||||||
|
"server": "chat.freenode.net",
|
||||||
|
"discordToken": "",
|
||||||
|
"ircOptions": {
|
||||||
|
"userName": "wunderbot",
|
||||||
|
"nick": "wunderbot",
|
||||||
|
"password": "",
|
||||||
|
"sasl": true
|
||||||
|
},
|
||||||
|
"channelMapping": {
|
||||||
|
"#shared": "#lbry"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,101 +0,0 @@
|
||||||
{
|
|
||||||
// Bot configuration
|
|
||||||
"bot": {
|
|
||||||
"token": "discordbottoken",
|
|
||||||
"prefix": "!",
|
|
||||||
"debug": false
|
|
||||||
},
|
|
||||||
"moderation": {
|
|
||||||
"perms": ["Moderator Team","LBRY TEAM"], // Roles that have access to all commands.
|
|
||||||
"logchannel": "371620338263523328" // Channel to log the bots moderation..
|
|
||||||
},
|
|
||||||
//define channels for Commands.js usage
|
|
||||||
"Channels": {
|
|
||||||
"verification": "363050496023592961",
|
|
||||||
"mining": "363049669636390913",
|
|
||||||
"random": "363084227518136322",
|
|
||||||
"content": "377938982111019010"
|
|
||||||
},
|
|
||||||
"speechbot": {
|
|
||||||
"channels": [
|
|
||||||
"363089721313722387",
|
|
||||||
"363085078403874823",
|
|
||||||
"363086945976320010",
|
|
||||||
"363086925428555776",
|
|
||||||
"363086752518242308",
|
|
||||||
"369896313082478594",
|
|
||||||
"363087606239461377",
|
|
||||||
"363088045366312962",
|
|
||||||
"363084227518136322",
|
|
||||||
"363084262028607488",
|
|
||||||
"371620338263523328"
|
|
||||||
], // Channels speech bot is allowed to post in
|
|
||||||
"mainchannel": "363085078403874823" // Main Speech Bot channel for directing with help message
|
|
||||||
},
|
|
||||||
"pricebot": {
|
|
||||||
"channels": [
|
|
||||||
"363050205043621908",
|
|
||||||
"369896313082478594",
|
|
||||||
"371620338263523328"
|
|
||||||
], // Chanels price bot is allowed to post in
|
|
||||||
"mainchannel": "363050205043621908" // Main Price Bot channel for directing with help message
|
|
||||||
},
|
|
||||||
"gitrelease": {
|
|
||||||
"channel": "370779899650375681" // Channel to send release info to using <!releasenotes post>
|
|
||||||
},
|
|
||||||
"spamdetection": {
|
|
||||||
"channels": [
|
|
||||||
"363089721313722387",
|
|
||||||
"363044238486798336",
|
|
||||||
"363086719391629326",
|
|
||||||
"363044275363119105",
|
|
||||||
"363044260938776576",
|
|
||||||
"372067478542745601",
|
|
||||||
"369896313082478594",
|
|
||||||
"371620338263523328"
|
|
||||||
], // Channels excluded from Spam Detection
|
|
||||||
"users": [
|
|
||||||
"244245498746241025"
|
|
||||||
] // Users to exclude from Spam Detection (include other bots here)
|
|
||||||
},
|
|
||||||
"hashbot": {
|
|
||||||
"channels": [
|
|
||||||
"363049669636390913",
|
|
||||||
"369896313082478594",
|
|
||||||
"371620338263523328"
|
|
||||||
], // Channels Hash Bot is allowed to post in
|
|
||||||
"mainchannel": "363049669636390913" // Main Hash Bot channel for directing with help message
|
|
||||||
},
|
|
||||||
"statsbot": {
|
|
||||||
"channels": [
|
|
||||||
"363050205043621908",
|
|
||||||
"369896313082478594",
|
|
||||||
"371620338263523328"
|
|
||||||
], // Channels Stats Bot is allowed to post in
|
|
||||||
"mainchannel": "363050205043621908" // Main Stats Bot channel for directing with help message
|
|
||||||
},
|
|
||||||
"rolelist": {
|
|
||||||
// The roles here are Case Sensitive to how they are in your Discord Server!
|
|
||||||
"baserole": "LBRYian",
|
|
||||||
"allowedroles": ["NSFW", "Marketers", "Miners", "Off-Topic Chats", "International", "Dev"]
|
|
||||||
},
|
|
||||||
"claimbot": {
|
|
||||||
"channels": [
|
|
||||||
"377938982111019010"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"mongodb": {
|
|
||||||
"url": "mongodb://HOST:PORT/DATABASE"
|
|
||||||
},
|
|
||||||
"irc": {
|
|
||||||
"nickname": "nick",
|
|
||||||
"server": "chat.freenode.net",
|
|
||||||
"discordToken": "tokenhere",
|
|
||||||
"autoSendCommands": [
|
|
||||||
["PRIVMSG", "NickServ", "IDENTIFY password"]
|
|
||||||
],
|
|
||||||
"channelMapping": {
|
|
||||||
"#shared": "#lbry"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
151
package-lock.json
generated
151
package-lock.json
generated
|
@ -606,9 +606,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"bson": {
|
"bson": {
|
||||||
"version": "1.0.9",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/bson/-/bson-1.0.9.tgz",
|
"resolved": "https://registry.npmjs.org/bson/-/bson-1.1.0.tgz",
|
||||||
"integrity": "sha512-IQX9/h7WdMBIW/q/++tGd+emQr0XMdeZ6icnT/74Xk9fnabWn+gZgpE+9V+gujL3hhJOoNrnDVY7tWdzc7NUTg=="
|
"integrity": "sha512-9Aeai9TacfNtWXOYarkFJRW2CWo+dRon+fuLZYJmvLV3+MiUp0bEI6IAZfXEIg7/Pl/7IWlLaDnhzTsD81etQA=="
|
||||||
},
|
},
|
||||||
"buffer-shims": {
|
"buffer-shims": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
|
@ -664,7 +664,7 @@
|
||||||
},
|
},
|
||||||
"callsites": {
|
"callsites": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
|
"resolved": "http://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
|
||||||
"integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
|
"integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
@ -844,9 +844,9 @@
|
||||||
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
|
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/config/-/config-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/config/-/config-2.0.2.tgz",
|
||||||
"integrity": "sha512-aTaviJnC8ZjQYx8kQf4u6tWqIxWolyQQ3LqXgnCLAsIb78JrUshHG0YuzIarzTaVVe1Pazms3TXImfYra8UsyQ==",
|
"integrity": "sha512-duIbkKb0gls0bOtGwd1vaD4236MwepQlZcrMheOGrn3/9Px7oYFh8G4LB3ylGOlPr5wGoJRm8Grb2RihJZxuHQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"json5": "^1.0.1"
|
"json5": "^1.0.1"
|
||||||
},
|
},
|
||||||
|
@ -1183,7 +1183,7 @@
|
||||||
},
|
},
|
||||||
"expand-range": {
|
"expand-range": {
|
||||||
"version": "1.8.2",
|
"version": "1.8.2",
|
||||||
"resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
|
"resolved": "http://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
|
||||||
"integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
|
"integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
|
@ -1970,9 +1970,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"husky": {
|
"husky": {
|
||||||
"version": "1.1.4",
|
"version": "1.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/husky/-/husky-1.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/husky/-/husky-1.2.0.tgz",
|
||||||
"integrity": "sha512-cZjGpS7qsaBSo3fOMUuR7erQloX3l5XzL1v/RkIqU6zrQImDdU70z5Re9fGDp7+kbYlM2EtS4aYMlahBeiCUGw==",
|
"integrity": "sha512-/ib3+iycykXC0tYIxsyqierikVa9DA2DrT32UEirqNEFVqOj1bFMTgP3jAz8HM7FgC/C8pc/BTUa9MV2GEkZaA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"cosmiconfig": "^5.0.6",
|
"cosmiconfig": "^5.0.6",
|
||||||
|
@ -2503,6 +2503,12 @@
|
||||||
"integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=",
|
"integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=",
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
|
"memory-pager": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-Mf9OHV/Y7h6YWDxTzX/b4ZZ4oh9NSXblQL8dtPCOomOtZciEHxePR78+uHFLLlsk01A6jVHhHsQZZ/WcIPpnzg==",
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
"micromatch": {
|
"micromatch": {
|
||||||
"version": "2.3.11",
|
"version": "2.3.11",
|
||||||
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
|
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
|
||||||
|
@ -2583,51 +2589,23 @@
|
||||||
"integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y="
|
"integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y="
|
||||||
},
|
},
|
||||||
"mongodb": {
|
"mongodb": {
|
||||||
"version": "2.2.34",
|
"version": "3.1.10",
|
||||||
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.34.tgz",
|
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.1.10.tgz",
|
||||||
"integrity": "sha1-o09Zu+thdUrsQy3nLD/iFSakTBo=",
|
"integrity": "sha512-Uml42GeFxhTGQVml1XQ4cD0o/rp7J2ROy0fdYUcVitoE7vFqEhKH4TYVqRDpQr/bXtCJVxJdNQC1ntRxNREkPQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"es6-promise": "3.2.1",
|
"mongodb-core": "3.1.9",
|
||||||
"mongodb-core": "2.1.18",
|
"safe-buffer": "^5.1.2"
|
||||||
"readable-stream": "2.2.7"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"process-nextick-args": {
|
|
||||||
"version": "1.0.7",
|
|
||||||
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
|
|
||||||
"integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
|
|
||||||
},
|
|
||||||
"readable-stream": {
|
|
||||||
"version": "2.2.7",
|
|
||||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz",
|
|
||||||
"integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=",
|
|
||||||
"requires": {
|
|
||||||
"buffer-shims": "~1.0.0",
|
|
||||||
"core-util-is": "~1.0.0",
|
|
||||||
"inherits": "~2.0.1",
|
|
||||||
"isarray": "~1.0.0",
|
|
||||||
"process-nextick-args": "~1.0.6",
|
|
||||||
"string_decoder": "~1.0.0",
|
|
||||||
"util-deprecate": "~1.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"string_decoder": {
|
|
||||||
"version": "1.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
|
|
||||||
"integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
|
|
||||||
"requires": {
|
|
||||||
"safe-buffer": "~5.1.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"mongodb-core": {
|
"mongodb-core": {
|
||||||
"version": "2.1.18",
|
"version": "3.1.9",
|
||||||
"resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.18.tgz",
|
"resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.1.9.tgz",
|
||||||
"integrity": "sha1-TEYTm986HwMt7ZHbSfOO7AFlkFA=",
|
"integrity": "sha512-MJpciDABXMchrZphh3vMcqu8hkNf/Mi+Gk6btOimVg1XMxLXh87j6FAvRm+KmwD1A9fpu3qRQYcbQe4egj23og==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"bson": "~1.0.4",
|
"bson": "^1.1.0",
|
||||||
"require_optional": "~1.0.0"
|
"require_optional": "^1.0.1",
|
||||||
|
"safe-buffer": "^5.1.2",
|
||||||
|
"saslprep": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"mongoose": {
|
"mongoose": {
|
||||||
|
@ -2657,6 +2635,57 @@
|
||||||
"requires": {
|
"requires": {
|
||||||
"lodash": "^4.14.0"
|
"lodash": "^4.14.0"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"bson": {
|
||||||
|
"version": "1.0.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/bson/-/bson-1.0.9.tgz",
|
||||||
|
"integrity": "sha512-IQX9/h7WdMBIW/q/++tGd+emQr0XMdeZ6icnT/74Xk9fnabWn+gZgpE+9V+gujL3hhJOoNrnDVY7tWdzc7NUTg=="
|
||||||
|
},
|
||||||
|
"mongodb": {
|
||||||
|
"version": "2.2.34",
|
||||||
|
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.34.tgz",
|
||||||
|
"integrity": "sha1-o09Zu+thdUrsQy3nLD/iFSakTBo=",
|
||||||
|
"requires": {
|
||||||
|
"es6-promise": "3.2.1",
|
||||||
|
"mongodb-core": "2.1.18",
|
||||||
|
"readable-stream": "2.2.7"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mongodb-core": {
|
||||||
|
"version": "2.1.18",
|
||||||
|
"resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.18.tgz",
|
||||||
|
"integrity": "sha1-TEYTm986HwMt7ZHbSfOO7AFlkFA=",
|
||||||
|
"requires": {
|
||||||
|
"bson": "~1.0.4",
|
||||||
|
"require_optional": "~1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"process-nextick-args": {
|
||||||
|
"version": "1.0.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
|
||||||
|
"integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
|
||||||
|
},
|
||||||
|
"readable-stream": {
|
||||||
|
"version": "2.2.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz",
|
||||||
|
"integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=",
|
||||||
|
"requires": {
|
||||||
|
"buffer-shims": "~1.0.0",
|
||||||
|
"core-util-is": "~1.0.0",
|
||||||
|
"inherits": "~2.0.1",
|
||||||
|
"isarray": "~1.0.0",
|
||||||
|
"process-nextick-args": "~1.0.6",
|
||||||
|
"string_decoder": "~1.0.0",
|
||||||
|
"util-deprecate": "~1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"string_decoder": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
|
||||||
|
"integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
|
||||||
|
"requires": {
|
||||||
|
"safe-buffer": "~5.1.0"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -3606,6 +3635,15 @@
|
||||||
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
||||||
},
|
},
|
||||||
|
"saslprep": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-4cDsYuAjXssUSjxHKRe4DTZC0agDwsCqcMqtJAQPzC74nJ7LfAJflAtC1Zed5hMzEQKj82d3tuzqdGNRsLJ4Gw==",
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"sparse-bitfield": "^3.0.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
"sax": {
|
"sax": {
|
||||||
"version": "1.2.4",
|
"version": "1.2.4",
|
||||||
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
|
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
|
||||||
|
@ -3834,6 +3872,15 @@
|
||||||
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
|
||||||
"integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
|
"integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
|
||||||
},
|
},
|
||||||
|
"sparse-bitfield": {
|
||||||
|
"version": "3.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
|
||||||
|
"integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"memory-pager": "^1.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"spdx-correct": {
|
"spdx-correct": {
|
||||||
"version": "3.0.2",
|
"version": "3.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz",
|
||||||
|
@ -3996,7 +4043,7 @@
|
||||||
},
|
},
|
||||||
"string_decoder": {
|
"string_decoder": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
|
"resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
|
||||||
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
|
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"safe-buffer": "~5.1.0"
|
"safe-buffer": "~5.1.0"
|
||||||
|
|
|
@ -20,7 +20,8 @@
|
||||||
"request": "^2.85.0",
|
"request": "^2.85.0",
|
||||||
"request-promise": "^4.2.2",
|
"request-promise": "^4.2.2",
|
||||||
"sleep": "^5.1.1",
|
"sleep": "^5.1.1",
|
||||||
"wget": "^0.0.1"
|
"wget": "^0.0.1",
|
||||||
|
"mongodb": "latest"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"prettier": "prettier --write \"{bot,.}/**/*.{js,json}\" --single-quote --print-width 240",
|
"prettier": "prettier --write \"{bot,.}/**/*.{js,json}\" --single-quote --print-width 240",
|
||||||
|
|
Loading…
Add table
Reference in a new issue