Перейти к содержанию
  • Язык

Выполнение заданий в Discord не скачивая игры | Discord Orbs

Featured Replies

Опубликовано
  • Граждане

image.png

Проверено на 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

image.png

Закройте 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. Теперь вы можете забрать награду в «Заданиях».

image.png

Опубликовано
  • Автор
  • Граждане

Скрипт переписан и везде теперь указано слово Aprel Team.

Причина: скрипт летает по сети прямо перед глазами у Discord. Сюда не зайдут. Не нужно постить скрипт ни на какие GitHub и GitLab. Это одинаково что с приложениями Spotify. Опубликовали туда и считайте что приложение, скрипт накроется в самое ближайшее время.

Discord заблокирует получение наград, а может и аккаунт в целом. Новый скрипт просьба не публиковать на GitHub, безопаснее это сделать на GitVerse (Discord плевать на российские платформы и обнаружить что-то там можно только вручную, а не автоматически как это делает Spotify со всем API софтом на GitHub. Они уничтожили полностью всё и всех).

image.png

В консоли всё описал.
Лучше используйте софт или новейший скрипт. Мобильные задания выполняйте в первую очередь и исключительно через официальное приложение. Только потом беритесь за ПК.
Правильную версию загружу в данную тему (форк софта с GitHub).

Опубликовано
  • Автор
  • Граждане

image.png

Скрипт полностью переписан.
Если есть мобильные задания, то сперва выполняйте их и обязательно через ваше мобильное устройство, через официальное приложение Discord.

1. Выполнили все мобильные задания на смартфоне.

2. Запустили скрипт на ПК.

Опубликовано
  • Граждане

{15698820-8E14-44E4-B91E-1120F2FF1C6A}.png

вот такая ошибка вылезает...

Опубликовано
  • Автор
  • Граждане

@Eczema94, у вас один аккаунт в Discord?

Опубликовано
  • Делегаты

@Oleg Aprel, такая же проблема. 1 аккаунт. Делаю через chrome://inspect/#devices на arch

вложение

image.png

Опубликовано
  • Граждане

@Oleg Aprel да один аккаунт делал все по инструкции

Для публикации сообщений создайте учётную запись или авторизуйтесь

Последние посетители 0

  • Ни одного делегата форума не просматривает данную страницу

Важная сводка

Мы разместили cookie-файлы на твоё устройство, чтобы помочь сделать этот форум лучше. Ты можешь корректировать своё управление cookie-файлами, или же продолжить без каких-либо корректировок.

Иконка перчаток с несколькими звуками
Иконка перчаток

Досье

Навигация

Розыск

Розыск

Настройка push-извещений браузера

Chrome (Android)
  1. Нажми на значок замка рядом с адресной строкой.
  2. Нажми Разрешения → Извещения.
  3. Корректируй свои предпочтения.
Chrome (Desktop)
  1. Нажми на значок замка в адресной строке.
  2. Выбери Управление сайта.
  3. Разыщи Изввещения и корректируй свои предпочтения.