Add Avatar (doesn't work yet) and fix Creator
This commit is contained in:
140
Avatar.js
Normal file
140
Avatar.js
Normal file
@@ -0,0 +1,140 @@
|
||||
import fs from 'fs';
|
||||
import request from 'request';
|
||||
import prompts from 'prompts';
|
||||
import awsSignRequests from 'aws-sign-requests';
|
||||
import { parseString } from 'xml2js';
|
||||
|
||||
import { accounts } from './accounts.json';
|
||||
import { HEADERS, SERVER_URL } from './config';
|
||||
|
||||
export default class Avatar {
|
||||
constructor() {
|
||||
this.logger = null;
|
||||
this.playersReturned = 0;
|
||||
}
|
||||
|
||||
async run() {
|
||||
console.log(`You have ${accounts.length} players available!\n`);
|
||||
|
||||
const getChoice = async () => {
|
||||
const response = await prompts([
|
||||
{
|
||||
type: 'number',
|
||||
name: 'count',
|
||||
message: 'Number of Players to Change Avatar:',
|
||||
},
|
||||
]);
|
||||
|
||||
return response;
|
||||
};
|
||||
|
||||
const response = await getChoice();
|
||||
const { count } = response;
|
||||
|
||||
const players = accounts.sort(() => Math.round(Math.random()) - 0.5);
|
||||
|
||||
for (let i = 0; i < count; i++) {
|
||||
this.changeAvatar(players[i]);
|
||||
}
|
||||
|
||||
const getSummary = setInterval(() => {
|
||||
if (this.playersReturned === count) {
|
||||
fs.writeFile('accounts.json', players, 'utf8', (err, data) => {
|
||||
if (err) {
|
||||
console.log('Error saving accounts: ', err);
|
||||
}
|
||||
console.log('Done!');
|
||||
});
|
||||
clearInterval(getSummary);
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
|
||||
changeAvatar(player) {
|
||||
const { username } = player;
|
||||
console.log(`Attempting to change ${username}'s avatar...`);
|
||||
|
||||
request({
|
||||
url: `https://${SERVER_URL}/credentials/s3`,
|
||||
headers: {
|
||||
...HEADERS,
|
||||
authorization: `Bearer ${player.accessToken}`,
|
||||
}
|
||||
}, (error, response, body) => {
|
||||
try {
|
||||
const result = JSON.parse(body);
|
||||
const { error, accessKeyId, secretKey, sessionToken, expiration } = result;
|
||||
|
||||
if (error) {
|
||||
console.log(`Error: ${error}`);
|
||||
return;
|
||||
}
|
||||
|
||||
this.uploadAvatar({ ...result, player });
|
||||
} catch (error) {
|
||||
console.log('Error\n', error.toString('utf8'));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
uploadAvatar({ accessKeyId, secretKey, sessionToken, expiration, player }) {
|
||||
const filename = `${player.username}.jpg`;
|
||||
|
||||
request.get('https://mailaton.com/avagen')
|
||||
.on('response', response => {
|
||||
let options = awsSignRequests({
|
||||
credentials: {
|
||||
accessKeyId,
|
||||
secretAccessKey: secretKey,
|
||||
securityToken: sessionToken,
|
||||
expiration,
|
||||
},
|
||||
method: 'PUT',
|
||||
url: `https://hypespace-quiz.s3.amazonaws.com/avatars/${filename}`,
|
||||
host: 'hypespace-quiz.s3.amazonaws.com',
|
||||
headers: {
|
||||
'content-type': 'image/jpeg',
|
||||
},
|
||||
body: response,
|
||||
});
|
||||
|
||||
request.put(options)
|
||||
.on('response', response => {
|
||||
response.on('data', data => {
|
||||
console.log(`Using accessKey: ${accessKeyId}`);
|
||||
parseString(data, (xmlErr, xmlResult) => { console.log('xmlResult', xmlResult); });
|
||||
this.setAvatar(player);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
setAvatar(player) {
|
||||
const filename = `https://hypespace-quiz.s3.amazonaws.com/avatars/${player.username}.jpg`;
|
||||
|
||||
const options = {
|
||||
headers: {
|
||||
...HEADERS,
|
||||
authorization: `Bearer ${player.accessToken}`,
|
||||
},
|
||||
json: true,
|
||||
body: JSON.stringify({avatarUrl: filename}),
|
||||
};
|
||||
|
||||
request.put(`https://${SERVER_URL}/users/me/avatarUrl`, options)
|
||||
.on('error', error => console.log('Error:', error))
|
||||
.on('response', response => {
|
||||
response.on('data', data => {
|
||||
const { error, avatarUrl } = JSON.parse(data);
|
||||
console.log(JSON.parse(data));
|
||||
if (error) {
|
||||
console.log(`Error setting avatar for ${player.username}: ${error}`);
|
||||
} else {
|
||||
console.log(`${player.username}'s avatar successfully changed!`, avatarUrl);
|
||||
player.avatarUrl = avatarUrl;
|
||||
}
|
||||
this.playersReturned++;
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
11
Creator.js
11
Creator.js
@@ -37,7 +37,7 @@ export default class Creator {
|
||||
const response = await getChoice();
|
||||
const { count, referral } = response;
|
||||
|
||||
const priceCheckRequest = await request(`https://cloudsms.io/api/number/price?key=${this.apiKey}&service=3&tier=0`);
|
||||
const priceCheckRequest = await request(`https://cloudsms.io/api/number/price?key=${this.apiKey}&service=7&tier=0`);
|
||||
|
||||
const { balance, price } = JSON.parse(priceCheckRequest.body);
|
||||
const totalPrice = price * count;
|
||||
@@ -128,7 +128,7 @@ export default class Creator {
|
||||
async register(count, referral) {
|
||||
for (let i = 0; i < count; i++) {
|
||||
console.log(`Generating phone number for account #${i + 1}...`);
|
||||
const newNumberRequest = await request(`https://cloudsms.io/api/number?key=${this.apiKey}&service=3&tier=0`);
|
||||
const newNumberRequest = await request(`https://cloudsms.io/api/number?key=${this.apiKey}&service=7&tier=0`);
|
||||
const { status, error, number } = JSON.parse(newNumberRequest.body);
|
||||
|
||||
if (status === 'error') {
|
||||
@@ -141,8 +141,11 @@ export default class Creator {
|
||||
const verificationId = await this.verifyNumber(number);
|
||||
if (!verificationId) return;
|
||||
|
||||
console.log(`Successfully verified with id ${verificationId}! Checking for confirmation code...`);
|
||||
console.log(`Successfully verified with id ${verificationId}! Waiting for 10 seconds then checking for confirmation code...`);
|
||||
|
||||
const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
|
||||
await delay(10000);
|
||||
|
||||
const confirmationCode = await this.readSMS(number);
|
||||
if (!confirmationCode) return;
|
||||
|
||||
@@ -191,7 +194,7 @@ export default class Creator {
|
||||
}
|
||||
|
||||
async readSMS(number) {
|
||||
const messageRequest = await request(`https://cloudsms.io/api/number/messages?key=${this.apiKey}&number=${number}&recent=30`);
|
||||
const messageRequest = await request(`https://cloudsms.io/api/number/messages?key=${this.apiKey}&number=${number}`);
|
||||
|
||||
const { status, error, messages } = JSON.parse(messageRequest.body);
|
||||
if (status === 'error') {
|
||||
|
||||
2
index.js
2
index.js
@@ -5,6 +5,7 @@ import Summary from './Summary';
|
||||
import Weekly from './Weekly';
|
||||
import Cashout from './Cashout';
|
||||
import TopPlayers from './TopPlayers';
|
||||
import Avatar from './Avatar';
|
||||
|
||||
import * as config from './config';
|
||||
import { LOG_TYPES } from './constants';
|
||||
@@ -13,6 +14,7 @@ const choices = [
|
||||
{ title: 'Play Trivia', select: () => new Trivia().run() },
|
||||
{ title: 'Create Account', select: () => new Creator().run() },
|
||||
{ title: 'Update Weekly Lives', select: () => new Weekly().run() },
|
||||
{ title: 'Change Avatars', select: () => new Avatar().run() },
|
||||
{ title: 'Show Player Summaries', select: () => new Summary().run() },
|
||||
{ title: 'Show Top Players', select: () => new TopPlayers().run() },
|
||||
{ title: 'Cashout', select: () => new Cashout().run() },
|
||||
|
||||
29
package-lock.json
generated
29
package-lock.json
generated
@@ -129,6 +129,16 @@
|
||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
|
||||
},
|
||||
"aws-sign": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/aws-sign/-/aws-sign-0.1.2.tgz",
|
||||
"integrity": "sha1-BsMcnXDau0eXNgfEv/6wp75mEWg="
|
||||
},
|
||||
"aws-sign-requests": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/aws-sign-requests/-/aws-sign-requests-0.4.0.tgz",
|
||||
"integrity": "sha512-TCtwBCiCcTx2fcZut23QC71dk7GuI/1XxJ5EOixGghBhl2V1E4EqsKxJx3jFfvll62waQdltuyTK2edBEQFgeg=="
|
||||
},
|
||||
"aws-sign2": {
|
||||
"version": "0.7.0",
|
||||
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
|
||||
@@ -7041,6 +7051,11 @@
|
||||
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
||||
},
|
||||
"sax": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
|
||||
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
|
||||
},
|
||||
"semver": {
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
|
||||
@@ -7287,6 +7302,20 @@
|
||||
"async-limiter": "1.0.0"
|
||||
}
|
||||
},
|
||||
"xml2js": {
|
||||
"version": "0.4.19",
|
||||
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
|
||||
"integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
|
||||
"requires": {
|
||||
"sax": "1.2.4",
|
||||
"xmlbuilder": "9.0.7"
|
||||
}
|
||||
},
|
||||
"xmlbuilder": {
|
||||
"version": "9.0.7",
|
||||
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
|
||||
"integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
|
||||
},
|
||||
"yallist": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
|
||||
|
||||
@@ -25,6 +25,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"async-request": "^1.2.0",
|
||||
"aws-sign": "^0.1.2",
|
||||
"aws-sign-requests": "^0.4.0",
|
||||
"aws4": "^1.7.0",
|
||||
"chalk": "^2.4.1",
|
||||
"cloudsms-api": "^1.0.2",
|
||||
"discord.js": "^11.3.2",
|
||||
@@ -41,6 +44,7 @@
|
||||
"request": "^2.87.0",
|
||||
"request-promise": "^4.2.2",
|
||||
"url": "^0.11.0",
|
||||
"ws": "^5.2.1"
|
||||
"ws": "^5.2.1",
|
||||
"xml2js": "^0.4.19"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -513,7 +513,9 @@ export default class Trivia {
|
||||
|
||||
removePlayer(userId) {
|
||||
const player = this.players.find(player => player.userId === userId);
|
||||
player.removePlayer();
|
||||
if (player) {
|
||||
player.removePlayer();
|
||||
}
|
||||
|
||||
this.players = this.players.filter(player => player.userId !== userId);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user