This repository has been archived by the owner on Aug 3, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit cc0ae8c
Showing
7 changed files
with
714 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
module.exports = { | ||
mysql: { | ||
host: "", //IP-адрес MySQL / MariaDB | ||
user: "", //Используемый пользователь | ||
database: "", //Название базы данных | ||
password: "" //Пароль | ||
}, | ||
vimeworld: { | ||
dev_token: "" //Например: DuuaUb249dJxZuXSEqovuKfYLlJLLq0 | ||
}, | ||
debug: true | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
const mysql = require('./libs/mysql') | ||
const config = require('./config') | ||
const vimeworld = require('./libs/vimelibrary') | ||
|
||
const core = require('./statsStorage') | ||
|
||
const Storage = new core.Top(new vimeworld.Total(config.vimeworld.dev_token), new core.Storage(mysql)) | ||
|
||
async function start(){ | ||
let info = await mysql.execute("SELECT * FROM info") | ||
|
||
if(info[0].month - Date.now()/1000 >= 1){ | ||
console.log("</> До обнуления сбора информации: " + Math.floor(info[0].month - Date.now()/1000) + " секунд") | ||
} | ||
else { | ||
console.log("</> Новые сезон") | ||
|
||
await Storage.push("leaderboards_last_month") | ||
await mysql.execute("UPDATE info SET month = ?", [Math.floor(Date.now()/1000) + (60 * 60 * 24 * 7 * 29)]) | ||
} | ||
|
||
info = await mysql.execute("SELECT * FROM info") | ||
setTimeout(async function () { | ||
await Storage.push("leaderboards_last_month") | ||
}, Math.floor(info[0].month - Date.now()/1000)); | ||
} | ||
|
||
start() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
const mysql = require('mysql2'); | ||
const config = require('../config') | ||
|
||
const connection = mysql.createConnection({ | ||
host: config.mysql.host, | ||
user: config.mysql.user, | ||
database: config.mysql.database, | ||
password: config.mysql.password, | ||
}); | ||
|
||
async function execute(query, params = []) { | ||
return await new Promise((resolve, reject) => { | ||
connection.query( | ||
query, | ||
params, | ||
function(err, results, fields) { | ||
if(err) return reject(err.stack); | ||
resolve(results); | ||
} | ||
); | ||
}); | ||
} | ||
|
||
module.exports = { execute } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,277 @@ | ||
const axios = require("axios") | ||
|
||
class Request { | ||
async get(url, token) { | ||
const req = await axios.get(url, { | ||
params: { | ||
token: token | ||
} | ||
}); | ||
return req.data | ||
} | ||
|
||
async post(url, data) { | ||
const req = await axios.post(url, data, {dataType: 'json',}); | ||
return req.data | ||
} | ||
} | ||
|
||
|
||
class User { | ||
constructor(token) { | ||
this.token = token | ||
this.requests = new Request() | ||
} | ||
|
||
/** Получение информации об игроке */ | ||
async get(data, by) { | ||
if (!data || !by) return console.error("[VimeLibrary] Один из обязательных параметров отсутствует") | ||
switch (by) { | ||
case 'nick': | ||
case 'nickname': | ||
case 'username': | ||
case 'name': | ||
return this.requests.get(`https://api.vimeworld.ru/user/name/${data}`, this.token) | ||
case 'id': | ||
return this.requests.get(`https://api.vimeworld.ru/user/${data}`, this.token) | ||
} | ||
} | ||
|
||
/** Получение друзей игрока */ | ||
async friends(data, by) { | ||
if (!data || !by) return console.error("[VimeLibrary] Один из обязательных параметров отсутствует") | ||
switch (by) { | ||
case 'nick': | ||
case 'nickname': | ||
case 'username': | ||
case 'name': | ||
return this.requests.get(`https://api.vimeworld.ru/user/name/${data}/friends`, this.token) | ||
case 'id': | ||
return this.requests.get(`https://api.vimeworld.ru/user/${data}/friends`, this.token) | ||
} | ||
} | ||
|
||
/** Получение сессии игрока */ | ||
async session(data, by) { | ||
if (!data || !by) return console.error("[VimeLibrary] Один из обязательных параметров отсутствует") | ||
switch (by) { | ||
case 'nick': | ||
case 'nickname': | ||
case 'username': | ||
case 'name': | ||
return this.requests.get(`https://api.vimeworld.ru/user/name/${data}/session`, this.token) | ||
case 'id': | ||
return this.requests.get(`https://api.vimeworld.ru/user/${data}/session`, this.token) | ||
} | ||
} | ||
|
||
/** Очень массовое получение статуса (до 1000) */ | ||
async sessionBig(data) { | ||
if (!data) return console.error("[VimeLibrary] Необходимо указать массив поиска") | ||
if (!data instanceof Array) return console.error("[VimeLibrary] Необходимо указать имеено МАССИВ поиска") | ||
return this.requests.post(`https://api.vimeworld.ru/user/session`, data) | ||
} | ||
|
||
/** Получение статистики игрока */ | ||
async stats(data, by) { | ||
if (!data || !by) return console.error("[VimeLibrary] Один из обязательных параметров отсутствует") | ||
switch (by) { | ||
case 'nick': | ||
case 'nickname': | ||
case 'username': | ||
case 'name': | ||
return this.requests.get(`https://api.vimeworld.ru/user/name/${data}/stats`, this.token) | ||
case 'id': | ||
return this.requests.get(`https://api.vimeworld.ru/user/${data}/stats`, this.token) | ||
} | ||
} | ||
|
||
/** Получение достижений игрока */ | ||
async achievements(data, by) { | ||
if (!data || !by) return console.error("[VimeLibrary] Один из обязательных параметров отсутствует") | ||
switch (by) { | ||
case 'nick': | ||
case 'nickname': | ||
case 'username': | ||
case 'name': | ||
return this.requests.get(`https://api.vimeworld.ru/user/name/${data}/achievements`, this.token) | ||
case 'id': | ||
return this.requests.get(`https://api.vimeworld.ru/user/${data}/achievements`, this.token) | ||
} | ||
} | ||
|
||
/** Получение топов игрока */ | ||
async leaderboards(data, by) { | ||
if (!data || !by) return console.error("[VimeLibrary] Один из обязательных параметров отсутствует") | ||
switch (by) { | ||
case 'nick': | ||
case 'nickname': | ||
case 'username': | ||
case 'name': | ||
return this.requests.get(`https://api.vimeworld.ru/user/name/${data}/leaderboards`, this.token) | ||
case 'id': | ||
return this.requests.get(`https://api.vimeworld.ru/user/${data}/leaderboards`, this.token) | ||
} | ||
} | ||
|
||
/** Получение последних матчей игрока */ | ||
async matches(data, by) { | ||
if (!data || !by) return console.error("[VimeLibrary] Один из обязательных параметров отсутствует") | ||
switch (by) { | ||
case 'nick': | ||
case 'nickname': | ||
case 'username': | ||
case 'name': | ||
return this.requests.get(`https://api.vimeworld.ru/user/name/${data}/matches`, this.token) | ||
case 'id': | ||
return this.requests.get(`https://api.vimeworld.ru/user/${data}/matches`, this.token) | ||
} | ||
} | ||
} | ||
|
||
class Online { | ||
constructor(token) { | ||
this.token = token | ||
this.requests = new Request() | ||
} | ||
|
||
/** Получение общего онлайна на MiniGames */ | ||
async get() { | ||
return this.requests.get(`https://api.vimeworld.ru/online`, this.token) | ||
} | ||
|
||
/** Получение модераторов онлайн */ | ||
async staff() { | ||
return this.requests.get(`https://api.vimeworld.ru/online/staff`, this.token) | ||
} | ||
|
||
/** Получение стримов онлайн */ | ||
async streams() { | ||
return this.requests.get(`https://api.vimeworld.ru/online/streams`, this.token) | ||
} | ||
} | ||
|
||
class Misc { | ||
constructor(token) { | ||
this.token = token | ||
this.requests = new Request() | ||
} | ||
|
||
/** Возвращает информацию о токене */ | ||
async getToken(data) { | ||
if (!data) return console.error("[VimeLibrary] Необходимо указать токен для просмотра") | ||
return this.requests.get(`https://api.vimeworld.ru/misc/token/${data}`) | ||
} | ||
|
||
/** Список всех возможных достижений */ | ||
async achievements() { | ||
return this.requests.get(`https://api.vimeworld.ru/misc/achievements`, this.token) | ||
} | ||
|
||
/** Список карт, сгруппированный по играм */ | ||
async maps() { | ||
return this.requests.get(`https://api.vimeworld.ru/misc/maps`, this.token) | ||
} | ||
|
||
/** Список игр, по которым ведется статистика */ | ||
async games() { | ||
return this.requests.get(`https://api.vimeworld.ru/misc/games`, this.token) | ||
} | ||
} | ||
|
||
class Match { | ||
constructor(token) { | ||
this.token = token | ||
this.requests = new Request() | ||
} | ||
|
||
/** Полная информация о матче */ | ||
async get(id) { | ||
return this.requests.get(`https://api.vimeworld.ru/match/${id}`, this.token) | ||
} | ||
|
||
/** Список последних матчей на сервере */ | ||
async latest() { | ||
return this.requests.get(`https://api.vimeworld.ru/match/latest`, this.token) | ||
} | ||
|
||
/** Список матчей на сервере */ | ||
async list() { | ||
return this.requests.get(`https://api.vimeworld.ru/match/list`, this.token) | ||
} | ||
} | ||
|
||
class Guild { | ||
constructor(token) { | ||
this.token = token | ||
this.requests = new Request() | ||
} | ||
|
||
/** Получает информацию о гильдии */ | ||
async get(data, by) { | ||
if (!data || !by) return console.error("[VimeLibrary] Один из необходимых аргументов (data, by) отсутствует") | ||
switch (by) { | ||
case 'id': | ||
return this.requests.get(`https://api.vimeworld.ru/guild/get?id=${data}`, this.token) | ||
case 'name': | ||
return this.requests.get(`https://api.vimeworld.ru/guild/get?name=${data}`, this.token) | ||
case 'tag': | ||
return this.requests.get(`https://api.vimeworld.ru/guild/get?tag=${data}`, this.token) | ||
default: | ||
return console.error("[VimeLibrary] Неверный тип поиска, доступно: id, name, tag") | ||
} | ||
} | ||
|
||
/** Ищет гильдии по названию или тегу */ | ||
async search(data) { | ||
if (!data) return console.error("[VimeLibrary] Необходимо указать ключевое слово/ключевые слова для поиска") | ||
return this.requests.get(`https://api.vimeworld.ru/guild/search?query=${data}`, this.token) | ||
} | ||
} | ||
|
||
class Locale { | ||
constructor(token) { | ||
this.token = token | ||
this.requests = new Request() | ||
} | ||
|
||
/** Человекочитаемые названия игр, статистики, рангов */ | ||
async get(parts) { | ||
if (!parts) parts = `games,game_stats,ranks` | ||
return this.requests.get(`https://api.vimeworld.ru/locale/ru?parts=${parts}`, this.token) | ||
} | ||
} | ||
|
||
class Leaderboard { | ||
constructor(token) { | ||
this.token = token | ||
this.requests = new Request() | ||
} | ||
|
||
/** Список таблиц рекордов */ | ||
async list() { | ||
return this.requests.get(`https://api.vimeworld.ru/leaderboard/list`, this.token) | ||
} | ||
|
||
/** Возвращает таблицу рекордов */ | ||
async get(type, sort, size, offset) { | ||
if (!size) size = 100 | ||
if (!offset) offset = 0 | ||
|
||
return this.requests.get(`https://api.vimeworld.ru/leaderboard/get/${type}/${sort}?size=${size}&offset=${offset}`, this.token) | ||
} | ||
} | ||
|
||
class Total { | ||
constructor(token) { | ||
this.User = new User(token) | ||
this.Online = new Online(token) | ||
this.Misc = new Misc(token) | ||
this.Locale = new Locale(token) | ||
this.Guild = new Guild(token) | ||
this.Match = new Match(token) | ||
this.Leaderboard = new Leaderboard(token) | ||
} | ||
} | ||
|
||
module.exports = {User, Online, Misc, Locale, Match, Guild, Leaderboard, Total} |
Oops, something went wrong.