Files
tg_tinder_bot/scripts/legacy/fixCallbackHandlers.js
2025-09-18 14:19:49 +09:00

143 lines
8.1 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Скрипт для восстановления оригинальной функциональности callbackHandlers.ts
const fs = require('fs');
const path = require('path');
// Находим самую последнюю версию файла callbackHandlers.ts в репозитории
const { execSync } = require('child_process');
try {
console.log('Поиск оригинальной версии CallbackHandlers.ts с полной функциональностью...');
// Находим коммиты, содержащие значительные изменения в файле (более 1000 символов)
const commits = execSync('git log --format="%H" -- src/handlers/callbackHandlers.ts')
.toString()
.trim()
.split('\n');
console.log(`Найдено ${commits.length} коммитов с изменениями файла`);
// Пробуем разные коммиты, начиная с последнего, чтобы найти полную реализацию
let foundFullImplementation = false;
let fullImplementationContent = '';
for (const commit of commits) {
console.log(`Проверяем коммит ${commit.substring(0, 8)}...`);
try {
const fileContent = execSync(`git show ${commit}:src/handlers/callbackHandlers.ts`).toString();
// Проверяем, содержит ли файл полные реализации методов
const hasFullImplementations = !fileContent.includes('// Заглушка метода') &&
fileContent.includes('await this.bot.sendMessage');
if (hasFullImplementations) {
console.log(`✅ Найдена полная реализация в коммите ${commit.substring(0, 8)}`);
fullImplementationContent = fileContent;
foundFullImplementation = true;
break;
} else {
console.log(`❌ Коммит ${commit.substring(0, 8)} не содержит полной реализации`);
}
} catch (error) {
console.error(`Ошибка при проверке коммита ${commit}:`, error.message);
}
}
if (!foundFullImplementation) {
console.error('❌ Не удалось найти полную реализацию в истории коммитов');
process.exit(1);
}
// Теперь получаем текущую версию файла с поддержкой уведомлений
console.log('Получаем текущую версию с поддержкой уведомлений...');
const currentFilePath = path.join(__dirname, '..', 'src', 'handlers', 'callbackHandlers.ts');
const currentContent = fs.readFileSync(currentFilePath, 'utf-8');
// Сначала создаем бэкап текущего файла
const backupPath = currentFilePath + '.backup-' + Date.now();
fs.writeFileSync(backupPath, currentContent);
console.log(`✅ Создан бэкап текущей версии: ${path.basename(backupPath)}`);
// Извлекаем код для поддержки уведомлений из текущей версии
console.log('Извлекаем код для поддержки уведомлений...');
// Находим импорт NotificationHandlers
const notificationImportRegex = /import\s+{\s*NotificationHandlers\s*}\s*from\s*['"]\.\/notificationHandlers['"]\s*;/;
const notificationImport = currentContent.match(notificationImportRegex)?.[0] || '';
// Находим объявление поля notificationHandlers
const notificationFieldRegex = /private\s+notificationHandlers\?\s*:\s*NotificationHandlers\s*;/;
const notificationField = currentContent.match(notificationFieldRegex)?.[0] || '';
// Находим инициализацию notificationHandlers в конструкторе
const notificationInitRegex = /\/\/\s*Создаем экземпляр NotificationHandlers[\s\S]*?try\s*{[\s\S]*?this\.notificationHandlers\s*=\s*new\s*NotificationHandlers[\s\S]*?}\s*catch[\s\S]*?}/;
const notificationInit = currentContent.match(notificationInitRegex)?.[0] || '';
// Находим метод handleNotificationSettings
const notificationSettingsMethodRegex = /async\s+handleNotificationSettings[\s\S]*?}\s*}/;
const notificationSettingsMethod = currentContent.match(notificationSettingsMethodRegex)?.[0] || '';
// Находим обработку callback для notifications в handleCallback
const notificationCallbackRegex = /\/\/\s*Настройки уведомлений[\s\S]*?else\s+if\s*\(data\s*===\s*['"]notifications['"][\s\S]*?}\s*}/;
const notificationCallback = currentContent.match(notificationCallbackRegex)?.[0] || '';
// Получаем часть обработки коллбэков для уведомлений
const notificationToggleRegex = /\/\/\s*Обработка переключения настроек уведомлений[\s\S]*?else\s+if[\s\S]*?notif_[\s\S]*?}\s*}/;
const notificationToggle = currentContent.match(notificationToggleRegex)?.[0] || '';
console.log(`✅ Извлечены блоки кода для уведомлений`);
// Интегрируем код уведомлений в оригинальную версию
console.log('Интегрируем код уведомлений в оригинальную версию...');
// 1. Добавляем импорт
let newContent = fullImplementationContent;
if (notificationImport) {
newContent = newContent.replace(/import\s*{[^}]*}\s*from\s*['"]\.\/messageHandlers['"]\s*;/,
match => match + '\n' + notificationImport);
}
// 2. Добавляем объявление поля
if (notificationField) {
newContent = newContent.replace(/private\s+translationController\s*:\s*TranslationController\s*;/,
match => match + '\n ' + notificationField);
}
// 3. Добавляем инициализацию в конструкторе
if (notificationInit) {
newContent = newContent.replace(/this\.translationController\s*=\s*new\s*TranslationController\(\);/,
match => match + '\n ' + notificationInit);
}
// 4. Добавляем обработку коллбэков для уведомлений
if (notificationCallback) {
newContent = newContent.replace(/else\s+{\s*await\s+this\.bot\.answerCallbackQuery\(query\.id[\s\S]*?return;/,
match => notificationCallback + '\n ' + match);
}
// 5. Добавляем обработку переключения настроек уведомлений
if (notificationToggle) {
newContent = newContent.replace(/else\s+{\s*await\s+this\.bot\.answerCallbackQuery\(query\.id[\s\S]*?return;/,
match => notificationToggle + '\n ' + match);
}
// 6. Добавляем метод handleNotificationSettings в конец класса
if (notificationSettingsMethod) {
newContent = newContent.replace(/}(\s*)$/, notificationSettingsMethod + '\n}$1');
}
// Сохраняем обновленный файл
const outputPath = currentFilePath + '.fixed';
fs.writeFileSync(outputPath, newContent);
console.log(`✅ Создана исправленная версия файла: ${path.basename(outputPath)}`);
console.log('\nИнструкция по восстановлению:');
console.log(`1. Проверьте файл ${path.basename(outputPath)}`);
console.log('2. Если все выглядит правильно, выполните команду:');
console.log(` Move-Item -Force "${path.basename(outputPath)}" "${path.basename(currentFilePath)}"`);
console.log('3. Перезапустите бота');
} catch (error) {
console.error('Произошла ошибка:', error);
}