Проверено на Arch Linux, Manjaro KDE, а также на Garuda KGE Gaming. Официальное приложение Discord Desktop. 1. Если вы из РФ, то включите любой ОВЕ для обхода. Можете использовать наш сервер: https://discord.aprelteam.su. 2. Примите квест в разделе «Задания». 3. Нажмите Ctrl+Shift+I, чтобы открыть Инструменты разработчика (в приложении Discord). Если не работает, то: На Windows: откройте проводник и введите %appdata%/discord/settings.json. На Linux: файл находится по пути ~/.config/discord/settings.json. Добавьте следующую строку в JSON (не забудьте вставить запятую в конце предыдущей строки, если это необходимо): "DANGEROUS_ENABLE_DEVTOOLS_ONLY_ENABLE_IF_YOU_KNOW_WHAT_YOURE_DOING": true Закройте Discord (используйте "Выйти" из трея, чтобы полностью его закрыть). Сохраните изменения в файле и снова запустите Discord. 4. Перейдите на вкладку Консоль (Console). 5. Скопируйте код ниже и вставьте туда же: console.warn("%c[ВНИМАНИЕ]", "color: red; font-weight: bold; font-size: 16px;", "Вы запускаете скрипт от Aprel Team.");
console.warn("Это может привести к блокировке вашего аккаунта. Используйте на свой страх и риск.");
console.warn("Скрипт может перестать работать при обновлении Discord.");
console.warn("----------------------------------------");
const ENCODED_KEY = "QXByZWwgVGVhbQ==";
async function verifyLocalProtection() {
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "Инициализация системы защиты...");
await new Promise(resolve => setTimeout(resolve, 800));
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "Проверка целостности кода...");
await new Promise(resolve => setTimeout(resolve, 600));
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "Дешифровка внутреннего ключа...");
try {
const decodedKey = atob(ENCODED_KEY);
await new Promise(resolve => setTimeout(resolve, 500));
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "Сравнение ключей...");
if (decodedKey === "Aprel Team") {
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "✓ Ключ APRELTEAM подтверждён");
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "✓ Целостность кода не нарушена");
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "✓ Доступ разрешён");
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "=== Aprel Team System Ready ===");
return true;
} else {
console.error("%c[Aprel Team]", "color: red; font-weight: bold;", "✗ Ошибка: ключ не совпадает");
console.error("%c[Aprel Team]", "color: red; font-weight: bold;", "✗ Оригинальный код ищите у Aprel Team");
console.error("%c[Aprel Team]", "color: red; font-weight: bold;", "✗ В коде изменено слово 'Aprel Team'");
console.error("%c[Aprel Team]", "color: red; font-weight: bold;", "✗ Base64 проверка не пройдена");
return false;
}
} catch (e) {
console.error("%c[Aprel Team]", "color: red; font-weight: bold;", "✗ Ошибка дешифровки:", e.message);
console.error("%c[Aprel Team]", "color: red; font-weight: bold;", "✗ Оригинальный код ищите у Aprel Team");
console.error("%c[Aprel Team]", "color: red; font-weight: bold;", "✗ В коде нарушена структура");
return false;
}
}
delete window.$;
let wpRequire = webpackChunkdiscord_app.push([[Symbol()], {}, r => r]);
webpackChunkdiscord_app.pop();
let ApplicationStreamingStore = Object.values(wpRequire.c).find(x => x?.exports?.A?.__proto__?.getStreamerActiveStreamMetadata)?.exports?.A;
let RunningGameStore = Object.values(wpRequire.c).find(x => x?.exports?.Ay?.getRunningGames)?.exports?.Ay;
let QuestsStore = Object.values(wpRequire.c).find(x => x?.exports?.A?.__proto__?.getQuest)?.exports?.A;
let ChannelStore = Object.values(wpRequire.c).find(x => x?.exports?.A?.__proto__?.getAllThreadsForParent)?.exports?.A;
let GuildChannelStore = Object.values(wpRequire.c).find(x => x?.exports?.Ay?.getSFWDefaultChannel)?.exports?.Ay;
let FluxDispatcher = Object.values(wpRequire.c).find(x => x?.exports?.h?.__proto__?.flushWaitQueue)?.exports?.h;
let api = Object.values(wpRequire.c).find(x => x?.exports?.Bo?.get)?.exports?.Bo;
if (!ApplicationStreamingStore || !RunningGameStore || !QuestsStore || !ChannelStore || !GuildChannelStore || !FluxDispatcher || !api) {
console.error("%c[ОШИБКА]", "color: red; font-weight: bold;", "Не удалось найти необходимые модули Discord. Возможно, версия клиента изменилась.");
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "Скрипт от Aprel Team");
throw new Error("Модули не найдены");
}
const supportedTasks = ["WATCH_VIDEO", "PLAY_ON_DESKTOP", "STREAM_ON_DESKTOP", "PLAY_ACTIVITY", "WATCH_VIDEO_ON_MOBILE"];
let quests = [...QuestsStore.quests.values()].filter(x =>
x.userStatus?.enrolledAt &&
!x.userStatus?.completedAt &&
new Date(x.config.expiresAt).getTime() > Date.now() &&
supportedTasks.find(y => Object.keys((x.config.taskConfig ?? x.config.taskConfigV2).tasks).includes(y))
);
let isApp = typeof DiscordNative !== "undefined";
if (quests.length === 0) {
console.log("%c[Инфо]", "color: cyan;", "У вас нет незавершённых квестов!");
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "Скрипт от Aprel Team");
} else {
console.log(`%c[Инфо] Найдено квестов: ${quests.length}`, "color: cyan;");
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "Скрипт от Aprel Team");
const randomDelay = (minMs, maxMs) =>
new Promise(resolve => setTimeout(resolve, Math.floor(Math.random() * (maxMs - minMs + 1)) + minMs));
let completedCount = 0;
const COOLDOWN_AFTER = 4;
let doJob = async function() {
const quest = quests.pop();
if (!quest) {
console.log("%c[Готово]", "color: green;", "Все квесты обработаны!");
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "Aprel Team - Завершено");
return;
}
const pid = Math.floor(Math.random() * 30000) + 1000;
const applicationId = quest.config.application.id;
const applicationName = quest.config.application.name;
const questName = quest.config.messages.questName;
const taskConfig = quest.config.taskConfig ?? quest.config.taskConfigV2;
const taskName = supportedTasks.find(x => taskConfig.tasks[x] != null);
const secondsNeeded = taskConfig.tasks[taskName].target;
let secondsDone = quest.userStatus?.progress?.[taskName]?.value ?? 0;
console.log(`%c[Старт] Квест: ${questName} (${taskName})`, "color: yellow; font-weight: bold;");
console.log(`%c[Старт] Требуется времени: ${secondsNeeded} сек., уже пройдено: ${secondsDone} сек.`, "color: gray;");
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", `Задача #${completedCount + 1} от Aprel Team`);
if (taskName === "WATCH_VIDEO" || taskName === "WATCH_VIDEO_ON_MOBILE") {
const speed = 7;
const enrolledAt = new Date(quest.userStatus.enrolledAt).getTime();
let completed = false;
console.log(`%c[Видео] Имитация просмотра видео для "${questName}".`, "color: magenta;");
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "Video module active - Aprel Team");
let fn = async () => {
while(true) {
const remaining = Math.min(speed, secondsNeeded - secondsDone);
await randomDelay(100, 500);
await new Promise(resolve => setTimeout(resolve, remaining * 1000));
const timestamp = secondsDone + speed;
try {
const res = await api.post({url: `/quests/${quest.id}/video-progress`, body: {timestamp: Math.min(secondsNeeded, timestamp + Math.random())}});
completed = res.body.completed_at != null;
secondsDone = Math.min(secondsNeeded, timestamp);
if (timestamp >= secondsNeeded) {
break;
}
await randomDelay(2000, 5000);
} catch (e) {
console.error("Ошибка при отправке прогресса видео:", e);
break;
}
}
if (!completed) {
try {
await api.post({url: `/quests/${quest.id}/video-progress`, body: {timestamp: secondsNeeded}});
} catch (e) {
console.error("Ошибка финализации видео:", e);
}
}
console.log("%c[Готово] Квест завершён!", "color: green; font-weight: bold;");
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "Video completed - APRELTEAM verified");
completedCount++;
if (completedCount % COOLDOWN_AFTER === 0) {
console.log("%c[Aprel Team]", "color: yellow; font-weight: bold;", `Выполнено ${COOLDOWN_AFTER} заданий. Пауза 1 минута...`);
await new Promise(resolve => setTimeout(resolve, 60000));
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "Пауза завершена. Продолжаем...");
}
await randomDelay(3000, 8000);
doJob();
}
fn();
}
else if (taskName === "PLAY_ON_DESKTOP") {
if (!isApp) {
console.log("%c[Ошибка]", "color: red;", "Это больше не работает в браузере для не-видео квестов! Используйте десктопное приложение Discord для выполнения квеста", questName);
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "Browser not supported - Aprel Team");
doJob();
} else {
try {
const res = await api.get({url: `/applications/public?application_ids=${applicationId}`});
const appData = res.body[0];
const exeName = appData.executables?.find(x => x.os === "win32")?.name?.replace(">","") ?? appData.name.replace(/[\/\\:*?"<>|]/g, "");
const fakeGame = {
cmdLine: `C:\\Program Files\\${appData.name}\\${exeName}`,
exeName,
exePath: `c:/program files/${appData.name.toLowerCase()}/${exeName}`,
hidden: false,
isLauncher: false,
id: applicationId,
name: appData.name,
pid: pid,
pidPath: [pid],
processName: appData.name,
start: Date.now(),
};
const realGames = RunningGameStore.getRunningGames();
const fakeGames = [fakeGame];
const realGetRunningGames = RunningGameStore.getRunningGames;
const realGetGameForPID = RunningGameStore.getGameForPID;
RunningGameStore.getRunningGames = () => fakeGames;
RunningGameStore.getGameForPID = (pid) => fakeGames.find(x => x.pid === pid);
FluxDispatcher.dispatch({type: "RUNNING_GAMES_CHANGE", removed: realGames, added: [fakeGame], games: fakeGames});
console.log(`%c[Игра] Подделка игры "${applicationName}". Ждите ${Math.ceil((secondsNeeded - secondsDone) / 60)} минут.`, "color: cyan;");
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "Game spoofing - Aprel Team active");
let fn = data => {
let progress = quest.config.configVersion === 1 ? data.userStatus.streamProgressSeconds : Math.floor(data.userStatus.progress.PLAY_ON_DESKTOP.value);
console.log(`%c[Прогресс] Прогресс квеста: ${progress}/${secondsNeeded}`, "color: gray;");
if (progress >= secondsNeeded) {
console.log("%c[Готово] Квест завершён!", "color: green; font-weight: bold;");
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "Game completed - APRELTEAM verified");
completedCount++;
if (completedCount % COOLDOWN_AFTER === 0) {
console.log("%c[Aprel Team]", "color: yellow; font-weight: bold;", `Выполнено ${COOLDOWN_AFTER} заданий. Пауза 1 минута...`);
setTimeout(() => {
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "Пауза завершена. Продолжаем...");
RunningGameStore.getRunningGames = realGetRunningGames;
RunningGameStore.getGameForPID = realGetGameForPID;
FluxDispatcher.dispatch({type: "RUNNING_GAMES_CHANGE", removed: [fakeGame], added: [], games: []});
FluxDispatcher.unsubscribe("QUESTS_SEND_HEARTBEAT_SUCCESS", fn);
doJob();
}, 60000);
} else {
RunningGameStore.getRunningGames = realGetRunningGames;
RunningGameStore.getGameForPID = realGetGameForPID;
FluxDispatcher.dispatch({type: "RUNNING_GAMES_CHANGE", removed: [fakeGame], added: [], games: []});
FluxDispatcher.unsubscribe("QUESTS_SEND_HEARTBEAT_SUCCESS", fn);
setTimeout(doJob, 5000);
}
}
};
FluxDispatcher.subscribe("QUESTS_SEND_HEARTBEAT_SUCCESS", fn);
} catch (e) {
console.error("Ошибка при подделке игры:", e);
doJob();
}
}
}
else if (taskName === "STREAM_ON_DESKTOP") {
if (!isApp) {
console.log("%c[Ошибка]", "color: red;", "Это больше не работает в браузере для не-видео квестов! Используйте десктопное приложение Discord для выполнения квеста", questName);
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "Browser not supported - Aprel Team");
doJob();
} else {
let realFunc = ApplicationStreamingStore.getStreamerActiveStreamMetadata;
ApplicationStreamingStore.getStreamerActiveStreamMetadata = () => ({
id: applicationId,
pid,
sourceName: null
});
console.log(`%c[Стрим] Подделка стрима "${applicationName}". Стримьте любое окно в голосовом канале ${Math.ceil((secondsNeeded - secondsDone) / 60)} минут.`, "color: cyan;");
console.log("%c[Важно]", "color: orange;", "Помните: в голосовом канале должен быть хотя бы 1 другой человек!");
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "Stream mode - Aprel Team active");
let fn = data => {
let progress = quest.config.configVersion === 1 ? data.userStatus.streamProgressSeconds : Math.floor(data.userStatus.progress.STREAM_ON_DESKTOP.value);
console.log(`%c[Прогресс] Прогресс квеста: ${progress}/${secondsNeeded}`, "color: gray;");
if (progress >= secondsNeeded) {
console.log("%c[Готово] Квест завершён!", "color: green; font-weight: bold;");
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "Stream completed - APRELTEAM verified");
completedCount++;
if (completedCount % COOLDOWN_AFTER === 0) {
console.log("%c[Aprel Team]", "color: yellow; font-weight: bold;", `Выполнено ${COOLDOWN_AFTER} заданий. Пауза 1 минута...`);
setTimeout(() => {
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "Пауза завершена. Продолжаем...");
ApplicationStreamingStore.getStreamerActiveStreamMetadata = realFunc;
FluxDispatcher.unsubscribe("QUESTS_SEND_HEARTBEAT_SUCCESS", fn);
doJob();
}, 60000);
} else {
ApplicationStreamingStore.getStreamerActiveStreamMetadata = realFunc;
FluxDispatcher.unsubscribe("QUESTS_SEND_HEARTBEAT_SUCCESS", fn);
setTimeout(doJob, 5000);
}
}
};
FluxDispatcher.subscribe("QUESTS_SEND_HEARTBEAT_SUCCESS", fn);
}
}
else if (taskName === "PLAY_ACTIVITY") {
const channelId = ChannelStore.getSortedPrivateChannels()[0]?.id ?? Object.values(GuildChannelStore.getAllGuilds()).find(x => x != null && x.VOCAL.length > 0)?.VOCAL[0]?.channel.id;
if (!channelId) {
console.error("%c[Ошибка]", "color: red;", "Не удалось найти канал для активности. Создайте личный канал или присоединитесь к голосовому.");
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "Activity error - Aprel Team");
doJob();
return;
}
const streamKey = `call:${channelId}:1`;
console.log(`%c[Активность] Выполнение квеста "${questName}" - ${quest.config.messages.questName}`, "color: magenta;");
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "Activity task - Aprel Team active");
let fn = async () => {
while(true) {
try {
const res = await api.post({url: `/quests/${quest.id}/heartbeat`, body: {stream_key: streamKey, terminal: false}});
const progress = res.body.progress.PLAY_ACTIVITY.value;
console.log(`%c[Прогресс] Прогресс квеста: ${progress}/${secondsNeeded}`, "color: gray;");
await randomDelay(18000, 22000);
if (progress >= secondsNeeded) {
await api.post({url: `/quests/${quest.id}/heartbeat`, body: {stream_key: streamKey, terminal: true}});
break;
}
} catch (e) {
console.error("Ошибка при обновлении активности:", e);
break;
}
}
console.log("%c[Готово] Квест завершён!", "color: green; font-weight: bold;");
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "Activity completed - APRELTEAM verified");
completedCount++;
if (completedCount % COOLDOWN_AFTER === 0) {
console.log("%c[Aprel Team]", "color: yellow; font-weight: bold;", `Выполнено ${COOLDOWN_AFTER} заданий. Пауза 1 минута...`);
await new Promise(resolve => setTimeout(resolve, 60000));
console.log("%c[Aprel Team]", "color: #00ff00; font-weight: bold;", "Пауза завершена. Продолжаем...");
}
await randomDelay(3000, 8000);
doJob();
};
fn();
}
};
verifyLocalProtection().then(async (verified) => {
if (verified) {
doJob();
} else {
console.error("%c[Aprel Team]", "color: red; font-weight: bold;", "=== Доступ запрещён ===");
console.error("%c[Aprel Team]", "color: red; font-weight: bold;", "=== Оригинальный код ищите у Aprel Team ===");
console.error("%c[Aprel Team]", "color: red; font-weight: bold;", "=== В коде изменено слово 'Aprel Team' ===");
}
});
}6. Если не вставляется код, то впишите в консоль allow pasting. 7. Теперь вы можете забрать награду в «Заданиях».