twitter-tipbot/move_helper.js

97 lines
3.1 KiB
JavaScript
Raw Permalink Normal View History

// This file helps with moving over accounts from the old username system to the id system.
// It uses the same configuration files as index.js
// Checks for the old format, gets their id from twitter, creates new acc, moves balance.
const Twit = require("twit");
const config = require("config");
const winston = require("winston");
require("winston-daily-rotate-file");
const Client = require("bitcoin-core");
const lbry = new Client({
version: "0.12.0",
username: config.get("lbrycrd.username"),
password: config.get("lbrycrd.password"),
port: config.get("lbrycrd.port")
});
const logger = winston.createLogger({
level: "info",
format: winston.format.json(),
transports: [
new winston.transports.DailyRotateFile({
filename: "move-helper-%DATE%.log",
dirname: "./logs",
datePattern: "YYYY-MM-DD-HH",
zippedArchive: true,
maxSize: "20m",
maxFiles: "14d"
}),
new winston.transports.Console({
format: winston.format.simple(),
level: "debug"
})
]
});
let notSynced = [];
const T = new Twit({
consumer_key: config.get("twitter.consumer_key"),
consumer_secret: config.get("twitter.consumer_secret"),
access_token: config.get("twitter.access_token"),
access_token_secret: config.get("twitter.access_token_secret"),
timeout_ms: 60 * 1000, // optional HTTP request timeout to apply to all requests.
strictSSL: true // optional - requires SSL certificates to be valid.
});
async function main(){
let accs = await getAccounts();
logger.info(`Trying to move ${accs.length} accounts...`)
for (let i in accs){
try {
//Get user details from twitter.
let data = await T.get('users/show', { screen_name: accs[i] });
//Create a account for the user by id.
let usr = data.data.id_str;
await getAddress(id(usr));
//Move over from old account to the new account
const balanceFromOld = await lbry.getBalance(`twttr-${accs[i]}`);
if (balanceFromOld !== 0) {
let res = await lbry.move(
`twttr-${accs[i]}`,
id(usr),
Number(balanceFromOld)
);
// If move is successful, log it!
if (res) logger.info(`Transferred ${balanceFromOld} LBC from twttr-${accs[i]} to ${id(usr)}!`);
}
}catch(e){
logger.info(`Could not sync ${accs[i]}, error occured:`, e.allErrors);
notSynced.push({ user: accs[i], error: e.allErrors});
logger.info("Could not sync these:"+JSON.stringify(notSynced));
}
}
}
// Get a list of all twitter accounts on lbrycrd.
async function getAccounts(){
let accs = await lbry.listAccounts();
accs = Object.entries(accs);
let accsArr = [];
for (let i in accs){
if(accs[i][0].startsWith('twttr-')) accsArr.push(accs[i][0].substring(6));
}
return accsArr;
}
async function getAddress(userId) {
try {
let uAddresses = await lbry.getAddressesByAccount(userId);
if (uAddresses.length > 0) return;
await lbry.getNewAddress(userId);
} catch (e) {
throw("Something went wrong while creating an account for the user: ", e);
}
}
function id(usrId){
return `t-${usrId}`;
}
main();