Загрузка данных
const mineflayer = require('mineflayer');
const fs = require('fs');
const { exit } = require('process');
const bot = mineflayer.createBot({
host: 'mc.funtime.su',
version: '1.16.5',
username: 'ficherlip14',
hideErrors: true
});
let currentIndex = 0;
let loop = 0;
let isParsing = false
function generateAnarchyValues(start, end, prefix = 'an') {
const anarchyValues = [];
for (let i = start; i <= end; i++) {
anarchyValues.push(`${prefix}${i}`);
}
return anarchyValues.map(value => parseInt(value.replace(prefix, '')));
}
const allowedAnarchyValues = [
...generateAnarchyValues(102, 108),
...generateAnarchyValues(203, 227),
...generateAnarchyValues(302, 316),
...generateAnarchyValues(502, 509),
...generateAnarchyValues(602, 605),
];
function loadExistingData() {
try {
const data = fs.readFileSync('output.json', 'utf8');
return JSON.parse(data);
} catch (error) {
console.error('Ошибка при загрузке данных:', error);
return { dump: { Принц: [], Титан: [], Герцог: [], Князь: [] } };
}
}
function loadExistingDataOther() {
try {
const data = fs.readFileSync('output_other.json', 'utf8');
return JSON.parse(data);
} catch (error) {
console.error('Ошибка при загрузке данных:', error);
return { dump: { Барон: [], Страж: [], Герой: [], Аспид: [], Сквид: [], Глава: [], Элита: [] } }; // Возвращаем пустую структуру в случае ошибки
}
}
bot.on('spawn', () => {
if (isParsing) return; // If parsing is already in progress, exit
isParsing = true;
let niks = [];
let niks_other = []
let niks_all = []
let userFT = []
const existingData = loadExistingData(); // Загружаем существующие данные
const existingNicks = new Set();
const existingDataOther = loadExistingDataOther(); // Загружаем существующие данные
const existingNicksOther = new Set();
// Заполняем множество существующими никами
for (const title in existingData.dump) {
existingData.dump[title].forEach(nick => existingNicks.add(nick));
}
for (const title in existingDataOther.dump) {
existingDataOther.dump[title].forEach(nick => existingNicksOther.add(nick));
}
function getPlayerNames() {
setTimeout(() => {
let acc_added = 0;
let add_users = 0;
let write_other = 0
let write_niks = 0
let write_add_users = 0
const code = allowedAnarchyValues[currentIndex];
bot.chat(`/an${code}`);
console.log(`Anarchy ${code}`);
setTimeout(async () => {
const playerNames = Object.keys(bot.players).map(playerName => bot.players[playerName].displayName.extra);
const UsersFuntime_all = Object.keys(bot.players).map(playerName => bot.players[playerName].username)
UsersFuntime_all.forEach((name) => {
niks_other.push(name)
})
playerNames.forEach((msgArray) => {
if (Array.isArray(msgArray)) {
const playerNameText = msgArray.map(msg => msg.text).join('');
const colors = msgArray.map(msg => msg.color);
userFT.push(playerNameText)
playername = playerNameText
add_users++
if (playerNameText.includes('Титан') && colors.includes('#FF4600')) {
niks.push(playerNameText);
acc_added++
}
if (playerNameText.includes('Князь') && colors.includes('#FF0000')) {
niks.push(playerNameText);
acc_added++
}
if (playerNameText.includes('Князь') && colors.includes('#FCFCFC')) {
niks.push(playerNameText);
acc_added++
}
if (playerNameText.includes('Князь') && colors.includes('#FFFFFF')) {
niks.push(playerNameText);
acc_added++
}
if (playerNameText.includes('Герцог') && colors.includes('#840303')) {
niks.push(playerNameText);
acc_added++
}
if (playerNameText.includes('Герцог') && colors.includes('#CB0000')) {
niks.push(playerNameText);
acc_added++
}
if (playerNameText.includes('Принц') && colors.includes('#FF2300')) {
niks.push(playerNameText);
acc_added++
}
if (playerNameText.includes('Сквид') && colors.includes('#00FFF7')) {
niks_other.push(playerNameText);
acc_added++
}
if (playerNameText.includes('Глава') && colors.includes('#FF7800')) {
niks_other.push(playerNameText);
acc_added++
}
if (playerNameText.includes('Аспид') && colors.includes('#00CDFF')) {
niks_other.push(playerNameText);
acc_added++
}
if (playerNameText.includes('Барон') && colors.includes('#5CFFE5')) {
niks_other.push(playerNameText);
acc_added++
}
if (playerNameText.includes('Герой') && colors.includes('#00FF66')) {
niks_other.push(playerNameText);
acc_added++
}
if (playerNameText.includes('Элита') && colors.includes('#CD00FF')) {
niks_other.push(playerNameText);
acc_added++
}
if (playerNameText.includes('Страж') && colors.includes('#CDFF00')) {
niks_other.push(playerNameText);
acc_added++
}
}
});
const filePath = 'UsersFuntime.txt';
await fs.readFile(filePath, 'utf8', (err, data) => {
if (err) {
console.error('Ошибка чтения файла:', err);
return;
}
userFT.forEach(nik => {
const parts = nik.trim().split(" ");
if (parts.length > 2) {
const title = parts[1]; // Получаем титул
const playerName = parts[2]; // Получаем имя игрока
const fullNick = `[ICODE]${parts[0]} ${title} ${playerName}[/ICODE]`;
// Проверяем, содержится ли полный ник в файле
if (!data.includes(fullNick)) {
write_add_users++
fs.appendFile(filePath, fullNick + '\n', (err) => {
if (err) {
console.error('Ошибка записи в файл:', err);
} else {
}
});
}
}
});
});
await fs.promises.readFile('all_user_ft.txt', 'utf8')
.then(async (data) => {
for (const nik of niks_other) {
if (!data.includes(nik) && !nik.includes('⚡')) {
write_other++;
await fs.promises.appendFile('all_user_ft.txt', nik + '\n')
.catch(err => console.error('Ошибка записи в файл:', err));
}
}
})
.catch(err => console.error('Ошибка чтения файла:', err));
niks.forEach(nik => {
const parts = nik.trim().split(" ");
if (parts.length > 2) {
const title = parts[1];
const playerName = parts[2];
if (existingData.dump[title] && !existingNicks.has(playerName)) {
existingData.dump[title].push(playerName);
write_niks++
existingNicks.add(playerName);
}
}
});
niks_other.forEach(nik => {
const parts = nik.trim().split(" ");
if (parts.length > 2) {
const title = parts[1];
const playerName = parts[2];
if (existingDataOther.dump[title] && !existingNicksOther.has(playerName)) {
existingDataOther.dump[title].push(playerName);
write_niks++
existingNicksOther.add(playerName);
}
}
});
await fs.writeFile('output.json', JSON.stringify(existingData, null, 2), (writeErr) => {
if (writeErr) {
console.error('Ошибка при записи файла:', writeErr);
} else {
}
});
await fs.writeFile('output_other.json', JSON.stringify(existingDataOther, null, 2), (writeErr) => {
if (writeErr) {
console.error('Ошибка при записи файла:', writeErr);
} else {
}
});
console.log(`Акков добавленно ${write_niks}/${acc_added} за эту анархию всех ников - ${write_add_users}/${add_users} без фильтров добавленно: ${write_other}`);
acc_added = 0
add_users = 0
write_niks = 0
write_add_users = 0
currentIndex++;
if (code >= 604) {
currentIndex = 0
}
getPlayerNames();
}, 1000);
}, 1500);
}
getPlayerNames();
});
bot.on('packet', (packet) => {
try {
if (packet.metadata && packet.metadata.length > 1) {
bot.oxygenLevel = Math.round(packet.metadata[1].value / 15);
}
} catch (error) {
console.error('Ошибка при обработке пакета:', error);
}
});
bot.on('kicked', console.log)
bot.on('error', console.log)