<?xml version="1.0"?>
<rss version="2.0"><channel><title>&#x41E;&#x431;&#x441;&#x443;&#x436;&#x434;&#x435;&#x43D;&#x438;&#x435; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x438;&#x445; &#x442;&#x435;&#x43C;</title><link>https://forum.aprelteam.by/meow/obsuzhdenie/?id=150</link><description>&#x41E;&#x431;&#x441;&#x443;&#x436;&#x434;&#x435;&#x43D;&#x438;&#x435; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x438;&#x445; &#x442;&#x435;&#x43C;</description><language>ru</language><item><title>&#x412;&#x44B;&#x43F;&#x43E;&#x43B;&#x43D;&#x435;&#x43D;&#x438;&#x435; &#x437;&#x430;&#x434;&#x430;&#x43D;&#x438;&#x439; &#x432; Discord &#x43D;&#x435; &#x441;&#x43A;&#x430;&#x447;&#x438;&#x432;&#x430;&#x44F; &#x438;&#x433;&#x440;&#x44B; | Discord Orbs</title><link>https://forum.aprelteam.by/mur/vypolnenie-zadanij-v-discord-ne-skachivaya-igry-discord-orbs/?id=324</link><description><![CDATA[<p style="text-align:center;"><img class="ipsImage ipsImage_thumbnailed ipsRichText__align--block" data-fileid="795" src="https://forum.aprelteam.by/uploads/monthly_2025_11/image.thumb.png.a145913aac36d1155c3d05600524596d.png" alt="image.png" title="image.png" width="640" height="347" data-full-image="https://forum.aprelteam.su/uploads/monthly_2025_11/image.png.ab7949ac09227b5ca6f3c3f296a2deeb.png" loading="lazy"></p><p style="text-align:center;"></p><p>Проверено на Arch Linux, Manjaro KDE, а также на Garuda KGE Gaming. Официальное приложение Discord <abbr title="Desktop — рабочий стол компьютера или стационарный компьютер. В контексте ОС — графический интерфейс, содержащий значки, окна и панель задач для управления приложениями и файлами. В контексте приложения: графический пользовательский интерфейс или отдельная версия приложения, рассчитанная на работу на настольных/стационарных компьютерах (Windows, macOS, Linux). Обычно включает полноценные окна, меню, панель инструментов, поддержку мыши и клавиатуры, локальное хранение данных и возможности интеграции с ОС (системные уведомления, автозапуск, файловая система).">Desktop</abbr>.</p><p>1. Если вы из РФ, то включите любой <abbr title="Окно в Европу. VPN \ dVPN. Децентрализованные решения, которые позволяют пользователям обходить блокировки и ограничения доступа к интернет-ресурсам. Они используют распределенные сети для обеспечения анонимности и безопасности, позволяя пользователям подключаться к интернету без централизованного контроля, что делает их более устойчивыми к цензуре и вмешательству.">ОВЕ</abbr> для обхода. Можете использовать наш сервер: <a rel="external nofollow" href="https://discord.aprelteam.su">https://discord.aprelteam.su</a>.</p><p>2. Примите квест в разделе <strong>«Задания».</strong><br>3. Нажмите Ctrl+Shift+I, чтобы открыть Инструменты разработчика (в приложении Discord). Если не работает, то: <br><em>На Windows: откройте проводник и введите </em><code>%appdata%/discord/settings.json</code><em>.</em></p><p><em>На Linux: файл находится по пути </em><code>~/.config/discord/settings.json</code><em>.<br>Добавьте следующую строку в <abbr title="JSON (JavaScript Object Notation) — легковесный формат обмена данными, основанный на текстовом представлении объектов JavaScript. Он используется для хранения и передачи структурированных данных, легко читаем как людьми, так и машинами. JSON широко применяется в веб-разработке для обмена данными между клиентом и сервером, а также в API и конфигурационных файлах.">JSON</abbr> (не забудьте вставить запятую в конце предыдущей строки, если это необходимо):</em></p><p><code>"DANGEROUS_ENABLE_DEVTOOLS_ONLY_ENABLE_IF_YOU_KNOW_WHAT_YOURE_DOING": true</code></p><p><img class="ipsImage ipsRichText__align--block" data-fileid="796" src="https://forum.aprelteam.by/uploads/monthly_2025_11/image.png.b2d417dc055457a366ed6bf0fcbbd248.png" alt="image.png" title="image.png" width="629" height="88" loading="lazy"></p><p><em>Закройте Discord (используйте "Выйти" из трея, чтобы полностью его закрыть).</em></p><p><em>Сохраните изменения в файле и снова запустите Discord.</em></p><p>4. Перейдите на вкладку Консоль (Console).<br>5. Скопируйте код ниже и вставьте туда же:</p><p></p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Обычный текст"><code>console.warn("%c[ВНИМАНИЕ]", "color: red; font-weight: bold; font-size: 16px;", "Вы запускаете скрипт от <abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>.");
console.warn("Это может привести к блокировке вашего аккаунта. Используйте на свой страх и риск.");
console.warn("Скрипт может перестать работать при обновлении Discord.");
console.warn("----------------------------------------");

const ENCODED_KEY = "QXByZWwgVGVhbQ=="; 

async function verifyLocalProtection() {
    console.log("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: #00ff00; font-weight: bold;", "Инициализация системы защиты...");
    
    await new Promise(resolve =&gt; setTimeout(resolve, 800));
    console.log("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: #00ff00; font-weight: bold;", "Проверка целостности кода...");
    
    await new Promise(resolve =&gt; setTimeout(resolve, 600));
    console.log("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: #00ff00; font-weight: bold;", "Дешифровка внутреннего ключа...");
    
    try {
        const decodedKey = atob(ENCODED_KEY);
        
        await new Promise(resolve =&gt; setTimeout(resolve, 500));
        console.log("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: #00ff00; font-weight: bold;", "Сравнение ключей...");
        
        if (decodedKey === "<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>") {
            console.log("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: #00ff00; font-weight: bold;", "✓ Ключ APRELTEAM подтверждён");
            console.log("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: #00ff00; font-weight: bold;", "✓ Целостность кода не нарушена");
            console.log("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: #00ff00; font-weight: bold;", "✓ Доступ разрешён");
            console.log("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: #00ff00; font-weight: bold;", "=== <abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr> System Ready ===");
            return true;
        } else {
            console.error("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: red; font-weight: bold;", "✗ Ошибка: ключ не совпадает");
            console.error("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: red; font-weight: bold;", "✗ Оригинальный код ищите у <abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>");
            console.error("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: red; font-weight: bold;", "✗ В коде изменено слово '<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>'");
            console.error("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: red; font-weight: bold;", "✗ Base64 проверка не пройдена");
            return false;
        }
    } catch (e) {
        console.error("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: red; font-weight: bold;", "✗ Ошибка дешифровки:", e.message);
        console.error("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: red; font-weight: bold;", "✗ Оригинальный код ищите у <abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>");
        console.error("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: red; font-weight: bold;", "✗ В коде нарушена структура");
        return false;
    }
}

delete window.$;

let wpRequire = webpackChunkdiscord_app.push([[Symbol()], {}, r =&gt; r]);
webpackChunkdiscord_app.pop();

let ApplicationStreamingStore = Object.values(wpRequire.c).find(x =&gt; x?.exports?.A?.__proto__?.getStreamerActiveStreamMetadata)?.exports?.A;
let RunningGameStore = Object.values(wpRequire.c).find(x =&gt; x?.exports?.Ay?.getRunningGames)?.exports?.Ay;
let QuestsStore = Object.values(wpRequire.c).find(x =&gt; x?.exports?.A?.__proto__?.getQuest)?.exports?.A;
let ChannelStore = Object.values(wpRequire.c).find(x =&gt; x?.exports?.A?.__proto__?.getAllThreadsForParent)?.exports?.A;
let GuildChannelStore = Object.values(wpRequire.c).find(x =&gt; x?.exports?.Ay?.getSFWDefaultChannel)?.exports?.Ay;
let FluxDispatcher = Object.values(wpRequire.c).find(x =&gt; x?.exports?.h?.__proto__?.flushWaitQueue)?.exports?.h;
let api = Object.values(wpRequire.c).find(x =&gt; 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[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: #00ff00; font-weight: bold;", "Скрипт от <abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>");
    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 =&gt; 
    x.userStatus?.enrolledAt &amp;&amp; 
    !x.userStatus?.completedAt &amp;&amp; 
    new Date(x.config.expiresAt).getTime() &gt; Date.now() &amp;&amp; 
    supportedTasks.find(y =&gt; 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[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: #00ff00; font-weight: bold;", "Скрипт от <abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>");
} else {
    console.log(`%c[Инфо] Найдено квестов: ${quests.length}`, "color: cyan;");
    console.log("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: #00ff00; font-weight: bold;", "Скрипт от <abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>");

    const randomDelay = (minMs, maxMs) =&gt; 
        new Promise(resolve =&gt; 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[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: #00ff00; font-weight: bold;", "<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr> - Завершено");
            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 =&gt; 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[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: #00ff00; font-weight: bold;", `Задача #${completedCount + 1} от <abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>`);

        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[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: #00ff00; font-weight: bold;", "Video module active - <abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>");
            
            let fn = async () =&gt; {			
                while(true) {
                    const remaining = Math.min(speed, secondsNeeded - secondsDone);

                    await randomDelay(100, 500); 
                    
                    await new Promise(resolve =&gt; 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 &gt;= 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[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: #00ff00; font-weight: bold;", "Video completed - APRELTEAM verified");
                
                completedCount++;
                
                if (completedCount % COOLDOWN_AFTER === 0) {
                    console.log("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: yellow; font-weight: bold;", `Выполнено ${COOLDOWN_AFTER} заданий. Пауза 1 минута...`);
                    await new Promise(resolve =&gt; setTimeout(resolve, 60000));
                    console.log("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "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[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: #00ff00; font-weight: bold;", "Browser not supported - <abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>");
                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 =&gt; x.os === "win32")?.name?.replace("&gt;","") ?? appData.name.replace(/[\/\\:*?"&lt;&gt;|]/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 = () =&gt; fakeGames;
                    RunningGameStore.getGameForPID = (pid) =&gt; fakeGames.find(x =&gt; 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[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: #00ff00; font-weight: bold;", "Game spoofing - <abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr> active");
                    
                    let fn = data =&gt; {
                        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 &gt;= secondsNeeded) {
                            console.log("%c[Готово] Квест завершён!", "color: green; font-weight: bold;");
                            console.log("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: #00ff00; font-weight: bold;", "Game completed - APRELTEAM verified");
                            
                            completedCount++;
                            
                            if (completedCount % COOLDOWN_AFTER === 0) {
                                console.log("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: yellow; font-weight: bold;", `Выполнено ${COOLDOWN_AFTER} заданий. Пауза 1 минута...`);
                                setTimeout(() =&gt; {
                                    console.log("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "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[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: #00ff00; font-weight: bold;", "Browser not supported - <abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>");
                doJob();
            } else {
                let realFunc = ApplicationStreamingStore.getStreamerActiveStreamMetadata;
                ApplicationStreamingStore.getStreamerActiveStreamMetadata = () =&gt; ({
                    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[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: #00ff00; font-weight: bold;", "Stream mode - <abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr> active");
                
                let fn = data =&gt; {
                    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 &gt;= secondsNeeded) {
                        console.log("%c[Готово] Квест завершён!", "color: green; font-weight: bold;");
                        console.log("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: #00ff00; font-weight: bold;", "Stream completed - APRELTEAM verified");
                        
                        completedCount++;
                        
                        if (completedCount % COOLDOWN_AFTER === 0) {
                            console.log("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: yellow; font-weight: bold;", `Выполнено ${COOLDOWN_AFTER} заданий. Пауза 1 минута...`);
                            setTimeout(() =&gt; {
                                console.log("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "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 =&gt; x != null &amp;&amp; x.VOCAL.length &gt; 0)?.VOCAL[0]?.channel.id;
            
            if (!channelId) {
                console.error("%c[Ошибка]", "color: red;", "Не удалось найти канал для активности. Создайте личный канал или присоединитесь к голосовому.");
                console.log("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: #00ff00; font-weight: bold;", "Activity error - <abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>");
                doJob();
                return;
            }

            const streamKey = `call:${channelId}:1`;
            
            console.log(`%c[Активность] Выполнение квеста "${questName}" - ${quest.config.messages.questName}`, "color: magenta;");
            console.log("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: #00ff00; font-weight: bold;", "Activity task - <abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr> active");
            
            let fn = async () =&gt; {
                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 &gt;= 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[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: #00ff00; font-weight: bold;", "Activity completed - APRELTEAM verified");
                
                completedCount++;
                
                if (completedCount % COOLDOWN_AFTER === 0) {
                    console.log("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: yellow; font-weight: bold;", `Выполнено ${COOLDOWN_AFTER} заданий. Пауза 1 минута...`);
                    await new Promise(resolve =&gt; setTimeout(resolve, 60000));
                    console.log("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: #00ff00; font-weight: bold;", "Пауза завершена. Продолжаем...");
                }
                
                await randomDelay(3000, 8000);
                doJob();
            };
            fn();
        }
    };
    
    verifyLocalProtection().then(async (verified) =&gt; {
        if (verified) {
            doJob();
        } else {
            console.error("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: red; font-weight: bold;", "=== Доступ запрещён ===");
            console.error("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: red; font-weight: bold;", "=== Оригинальный код ищите у <abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr> ===");
            console.error("%c[<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>]", "color: red; font-weight: bold;", "=== В коде изменено слово '<abbr title="Aprel Team (Апрель Тим &lt;/&gt; APRELTEAM) — частное сообщество, которое представляет и объединяет людей с общими интересами и целями в различных областях, таких как технологии, разработка программного обеспечения, кибербезопасность, или другие профессиональные и хоббийные направления.">Aprel Team</abbr>' ===");
        }
    });
}</code></pre><p>6. Если не вставляется код, то впишите в консоль <code>allow pasting</code>.<br>7. Теперь вы можете забрать награду в <strong>«Заданиях».</strong></p><p style="text-align:center;"></p><p style="text-align:center;"><img class="ipsImage ipsImage_thumbnailed ipsRichText__align--block" data-fileid="797" src="https://forum.aprelteam.by/uploads/monthly_2025_11/image.thumb.png.cb9265e15d585f8063d806e7c408df31.png" alt="image.png" title="image.png" width="640" height="482" data-full-image="https://forum.aprelteam.su/uploads/monthly_2025_11/image.png.be67cc61491d2b0b460b24ee84db2fd3.png" loading="lazy"></p>]]></description><guid isPermaLink="false">324</guid><pubDate>Sat, 04 May 2024 07:07:43 +0000</pubDate></item><item><title>&#x41A;&#x43E;&#x43F;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440;&#x430; Discord</title><link>https://forum.aprelteam.by/mur/kopirovanie-servera-discord/?id=359</link><description><![CDATA[<p style="text-align: center;">
	<strong>Скрипт обновлён, переделан и очищен от мусора и лишнего кода. Актуален на момент написания данной темы.<br>
	<br>
	&gt; Копирование аватарки сервера &lt;<br>
	&gt; Копирование названия сервера &lt;<br>
	&gt; Копирование всех ролей сервера &lt;<br>
	&gt; Копирование всех разрешений в каналах &lt;<br>
	&gt; Копирование всех эмодзи сервера &lt;<br>
	&gt; Копирование всех настроек сервера &lt;<br>
	&gt; Копирование всех каналов сервера (даже те, которые вы не видите) &lt;</strong>
</p>

<p>
	1. Забираем <a href="https://mega.nz/file/zCREDKDQ#uPS89huIpcWdbVKFe7xgDP6WQ38_vYaaMUBXn8qi_sE" rel="external nofollow">архив</a> &gt; Распаковываем &gt; Запускаем<strong> start.bat</strong>.<br>
	2. Токен берём на сервере:<br>
	<em><strong>Ctrl + Shift + I</strong>. Сеть. В поиске вводим <strong>/api</strong> (ничего не нажимаем). Перезагружаем окно слева от консоли. <strong>Ctrl + R</strong>. Нажимаем на <strong>@me</strong> и ниже ищем <strong>Authorization</strong>. Копируем этот токен.</em>
</p>

<p style="text-align: center;">
	<br>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="361" href="https://forum.aprelteam.by/uploads/monthly_2024_08/image.png.99f6a3f86eef1984594759ddbb54f6cf.png" rel=""><img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="361" data-unique="abeekdjaj" style="height: auto;" width="640" src="https://forum.aprelteam.by/uploads/monthly_2024_08/image.thumb.png.ef3a39e90e0824915829651e1ab9e5aa.png" loading="lazy" height="390.4"></a><br>
	 
</p>

<p>
	3. Вставляем токен (одно нажатие правой кнопкой мыши).<br>
	4. Копируем ID сервера, который нужно копировать. <strong>Настройки Discord</strong> &gt; <strong>Расширенные</strong> &gt; <strong>Включаем режим разработчика</strong>. Наводим мышкой на иконку сервера, нажимаем правой кнопкой и копируем данный ID.
</p>

<p style="text-align: center;">
	<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="362" data-unique="s3hqa1xpr" style="height: auto;" width="289" src="https://forum.aprelteam.by/uploads/monthly_2024_08/image.png.027daf97c2ddc9c6ecb1a44d1afa1b31.png" loading="lazy" height="179.18">
</p>

<p>
	5. Копируем ID сервера, в который нужно копировать.<br>
	6. Всё.
</p>

<p style="text-align: center;">
	<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="363" data-unique="l15eswrm8" style="height: auto;" width="561" src="https://forum.aprelteam.by/uploads/monthly_2024_08/image.png.dfd697c93ed7e842fafe516d61b5307e.png" loading="lazy" height="516.12">
</p>

<p style="text-align: center;">
	<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="364" data-unique="6nu8q9pkz" style="height: auto;" width="383" src="https://forum.aprelteam.by/uploads/monthly_2024_08/image.png.1eb2b4a00379317a17971ab685547484.png" loading="lazy" height="428.96">
</p>

<p style="text-align: center;">
	<strong>&gt; <a href="https://mega.nz/file/zCREDKDQ#uPS89huIpcWdbVKFe7xgDP6WQ38_vYaaMUBXn8qi_sE" rel="external nofollow">[ MEGA ]</a> &lt;</strong>
</p>
]]></description><guid isPermaLink="false">359</guid><pubDate>Wed, 07 Aug 2024 10:36:13 +0000</pubDate></item><item><title>&#x422;&#x435;&#x43C;&#x430; Spotify &#x434;&#x43B;&#x44F; Discord (BetterDiscord, Vencord &#x438; &#x442;.&#x434;.)</title><link>https://forum.aprelteam.by/mur/tema-spotify-dlja-discord-betterdiscord-vencord-i-td/?id=322</link><description><![CDATA[<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="218" href="https://forum.aprelteam.by/uploads/monthly_2024_05/image.png.93ad866e6b9fe0209e3fe8e08313e249.png" rel=""><img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="218" data-unique="6ezruamjw" style="height: auto;" width="640" src="https://forum.aprelteam.by/uploads/monthly_2024_05/image.thumb.png.232d0084041e1f74fd66596d6c2ecfe0.png" loading="lazy" height="313.6"></a><br>
	<br>
	<strong>Путь тем:<br>
	C:\Users\ИМЯ ПОЛЬЗОВАТЕЛЯ\AppData\Roaming\Vencord.<br>
	C:\Users\ИМЯ ПОЛЬЗОВАТЕЛЯ\AppData\Roaming\BetterDiscord\themes<br>
	<br>
	Загрузить тему:</strong><br>
	&gt; <a href="https://forum.aprelteam.by/css/Spotify_Discord.theme.css" rel="">https://forum.aprelteam.su/css/Spotify_Discord.theme.css</a><br>
	<br>
	<strong>Исходник:</strong><br>
	&gt; <a href="https://forum.aprelteam.by/css/Spotify_Discord/css/source.css" rel="">https://forum.aprelteam.su/css/Spotify_Discord/css/source.css</a>
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">322</guid><pubDate>Fri, 03 May 2024 12:54:26 +0000</pubDate></item><item><title>&#x421;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x438;&#x435; &#x431;&#x43E;&#x442;&#x43E;&#x432; &#x434;&#x43B;&#x44F; Discord, &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x44F; aoi.js</title><link>https://forum.aprelteam.by/mur/sozdanie-botov-dlja-discord-ispolzuja-aoijs/?id=346</link><description><![CDATA[<p style="text-align:center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://forum.aprelteam.by/uploads/monthly_2024_07/image.png.8f01299ff8c99a9947353999c85cc370.png" data-fileid="323" data-fileext="png" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="323" width="640" alt="image.thumb.png.06c956e35472e3fc3173e227b20d3d72.png" src="https://forum.aprelteam.by/uploads/monthly_2024_07/image.thumb.png.06c956e35472e3fc3173e227b20d3d72.png" loading="lazy" height="332.8"></a>
</p>

<p style="text-align:center;">
	Aoi.js (ранее dbd.js) — это быстро набирающая популярность платформа с открытым исходным кодом для создания ботов Discord. Aoi.js выделяется как мощная и универсальная платформа, особенно подходящая для создания сложных ботов Discord. Его модульность, простота и обширный набор функций делают его главным претендентом на арене создания ботов.
</p>

<p style="text-align:center;">
	<strong>Выбор редактора кода</strong><br>
	Я советую использовать VSCode, у него довольно простой интерфейс и он очень удобный. Также вы можете использовать другой редактор, но в процессе создания бота я использую VSCode.<br>
	Отлично, с редактором кода мы определились. Теперь мы должны установить Node.js.<br>
	Если у вас уже есть Node.js вы можете перейти к следующему этапу, а именно - загрузка aoi.js. Как создать папку с ботом я думаю вы додумаетесь сами. Потом просто откройте папку для бота в VSCode и начинайте работать в ней.
</p>

<p style="text-align:center;">
	<strong>Установка aoi.js</strong><br>
	Откройте CMD и впишите в консоль команду показанную на скрине ниже. Если установка пройдет успешно в консоль будет выведено сообщение о успешной загрузке.<br>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="322" href="https://forum.aprelteam.by/uploads/monthly_2024_07/image.png.0bb303576b2389a741512b7443c0b9bf.png" rel=""><img alt="image.thumb.png.6ef6e4b1b414ed7187d47306d5d20c07.png" class="ipsImage ipsImage_thumbnailed" data-fileid="322" style="height:auto;" width="640" src="https://forum.aprelteam.by/uploads/monthly_2024_07/image.thumb.png.6ef6e4b1b414ed7187d47306d5d20c07.png" loading="lazy" height="83.2"></a>
</p>

<p style="text-align:center;">
	Через VSCode зайдите в раннее созданную для бота папку и создайте файл с названием index.js. В этот файл добавьте код:<br>
	 
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted"><span class="kwd">const</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="typ">AoiClient</span><span class="pln"> </span><span class="pun">}</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">require</span><span class="pun">(</span><span class="str">"aoi.js"</span><span class="pun">);</span><span class="pln">

</span><span class="kwd">const</span><span class="pln"> client </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">AoiClient</span><span class="pun">({</span><span class="pln">
    token</span><span class="pun">:</span><span class="pln"> </span><span class="str">"ТОКЕН ВАШЕГО БОТА"</span><span class="pun">,</span><span class="pln"> </span><span class="com">//НУЖНО ЗАМЕНИТЬ НА СВОЕ</span><span class="pln">
    prefix</span><span class="pun">:</span><span class="pln"> </span><span class="str">"ПРЕФИКС БОТА"</span><span class="pun">,</span><span class="pln"> </span><span class="com">//НУЖНО ЗАМЕНИТЬ НА СВОЕ</span><span class="pln">
    intents</span><span class="pun">:</span><span class="pln"> </span><span class="pun">[</span><span class="str">"MessageContent"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Guilds"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"GuildMessages"</span><span class="pun">],</span><span class="pln">
    events</span><span class="pun">:</span><span class="pln"> </span><span class="pun">[</span><span class="str">"onMessage"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"onInteractionCreate"</span><span class="pun">],</span><span class="pln">
    database</span><span class="pun">:</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        type</span><span class="pun">:</span><span class="pln"> </span><span class="str">"aoi.db"</span><span class="pun">,</span><span class="pln">
        db</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">require</span><span class="pun">(</span><span class="str">"@akarui/aoi.db"</span><span class="pun">),</span><span class="pln">
        dbType</span><span class="pun">:</span><span class="pln"> </span><span class="str">"KeyValue"</span><span class="pun">,</span><span class="pln">
        tables</span><span class="pun">:</span><span class="pln"> </span><span class="pun">[</span><span class="str">"main"</span><span class="pun">],</span><span class="pln">
        securityKey</span><span class="pun">:</span><span class="pln"> </span><span class="str">"a-32-characters-long-string-here"</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
</span><span class="pun">});</span></pre>

<p style="text-align:center;">
	Там где нужно изменить на своё, я отметил комментарием в коде. Я не буду рассказывать как создать бота и получить его токен. Посмотрите в ютубе!<br>
	Далее создайте папку с названием <strong>commands</strong>. Там будут файлы команд бота.
</p>

<p style="text-align:center;">
	<strong>О командах</strong><br>
	Для того, чтобы создать свою первую команду, нужно указать в файле <strong>index.js</strong> путь к паке с командами. Делается это следующим образом:<br>
	 
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted"><span class="kwd">const</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="typ">AoiClient</span><span class="pln"> </span><span class="pun">}</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">require</span><span class="pun">(</span><span class="str">"aoi.js"</span><span class="pun">);</span><span class="pln">

</span><span class="kwd">const</span><span class="pln"> client </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">AoiClient</span><span class="pun">({</span><span class="pln">
  </span><span class="com">//наша конфигурация</span><span class="pln">
</span><span class="pun">});</span><span class="pln">

 client</span><span class="pun">.</span><span class="pln">loadCommands</span><span class="pun">(</span><span class="str">"./commands/"</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">);</span><span class="pln">

</span><span class="com">//ДОБАВЬТЕ ТОЛЬКО СТРОЧКУ С УКАЗАНИЕМ ПУТИ К ПАПКЕ</span></pre>

<p style="text-align:center;">
	Теперь в папке для команд создаем файл с расширением .js, например ping.js.<br>
	Давайте сделаем простую команду, при которой бот будет возвращать его задержку. Ее код снизу.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted"><span class="kwd">module</span><span class="pun">.</span><span class="pln">exports </span><span class="pun">=</span><span class="pln"> </span><span class="pun">({</span><span class="pln">
    name</span><span class="pun">:</span><span class="pln"> </span><span class="str">"ping"</span><span class="pun">,</span><span class="pln"> </span><span class="com">//название команды</span><span class="pln">
    code</span><span class="pun">:</span><span class="pln"> </span><span class="str">`My ping is $ping MS!`</span><span class="pln"> </span><span class="com">//структура команды</span><span class="pln">
</span><span class="pun">});</span></pre>

<p style="text-align:center;">
	$ping - это встроенная функция для простого создания команд. Встроенных функций в aoi.js очень много! Подробнее о них почитайте в официальной документации: <a href="https://aoi.js.org" rel="external nofollow">https://aoi.js.org</a>.<br>
	<strong>Теперь запустите бота и протестируйте!</strong>
</p>
]]></description><guid isPermaLink="false">346</guid><pubDate>Sat, 20 Jul 2024 14:04:38 +0000</pubDate></item><item><title>&#x421;&#x43E;&#x437;&#x434;&#x430;&#x451;&#x43C; Discord-&#x431;&#x43E;&#x442;&#x430; &#x43D;&#x430; PHP</title><link>https://forum.aprelteam.by/mur/sozdayom-discord-bota-na-php/?id=301</link><description><![CDATA[<p>
	<span style="font-size:20px;">Шаг 1: Подготовка бота</span>
</p>

<p>
	1. Переходим по ссылке и создаём новое приложение: <a href="https://discord.com/developers/applications" rel="external nofollow">https://discord.com/developers/applications</a>.<br />
	2. Во вкладке Bot добавляем бота, подтверждаем выбор в появившемся окне.<br />
	3. Во вкладке <strong>OAuth2 -&gt; URL Generator</strong> ставим галочку напротив пункта <strong>bot</strong>, ниже выбираем необходимые права доступа и копируем появившуюся внизу ссылку на инвайт бота.<br />
	4. Переходим по скопированной ссылке и приглашаем бота в нужный нам сервер.<br />
	5. Генерируем токен бота и сохраняем его у себя.<br />
	6. Включаем SERVER MEMBERS INTENT, дабы отслеживать события пользователей (например, вход на сервер).
</p>

<p>
	<span style="font-size:20px;">Шаг 2: Скрипт</span>
</p>

<p>
	Подключаем библиотеку через <strong>composer</strong><span>:</span>
</p>

<pre class="ipsCode prettyprint lang-xml prettyprinted"><span class="pln">composer require team-reflex/discord-php</span></pre>

<p>
	Разберём только базовые вещи. 
</p>

<p>
	Начинаем с подключения библиотеки, импортируем необходимые для работы классы:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted"><span class="pun">&lt;?</span><span class="pln">php

</span><span class="kwd">require</span><span class="pln"> __DIR__ </span><span class="pun">.</span><span class="pln"> </span><span class="str">'/vendor/autoload.php'</span><span class="pun">;</span><span class="pln">


</span><span class="kwd">use</span><span class="pln"> </span><span class="typ">Discord</span><span class="pln">\Discord</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">use</span><span class="pln"> </span><span class="typ">Discord</span><span class="pln">\WebSockets\Event</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">use</span><span class="pln"> </span><span class="typ">Discord</span><span class="pln">\WebSockets\Intents</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">use</span><span class="pln"> </span><span class="typ">Discord</span><span class="pln">\Parts\User\Member</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">use</span><span class="pln"> </span><span class="typ">Discord</span><span class="pln">\Parts\Channel\Message</span><span class="pun">;</span></pre>

<p>
	Создаём экземпляр класса <strong>Discord</strong><span>:</span>
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted"><span class="pln">$ds </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Discord</span><span class="pun">(</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
    </span><span class="str">'token'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'*****************'</span><span class="pun">,</span><span class="pln"> </span><span class="com">// Токен, который мы сгенерировали ранее</span><span class="pln">
    </span><span class="str">'intents'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="typ">Intents</span><span class="pun">::</span><span class="pln">getDefaultIntents</span><span class="pun">()</span><span class="pln"> </span><span class="pun">|</span><span class="pln"> </span><span class="typ">Intents</span><span class="pun">::</span><span class="pln">GUILD_MEMBERS</span><span class="pun">,</span><span class="pln"> </span><span class="com">// Понадобится для отслеживания событий участников</span><span class="pln">
</span><span class="pun">]</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	Далее вставляем конструкцию, внутри которой будем прописывать конкретные события для отслеживания. В конец сразу добавил <strong>$ds-&gt;run()</strong> для запуска бота:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted"><span class="pln">$ds</span><span class="pun">-&gt;</span><span class="pln">on</span><span class="pun">(</span><span class="pln"> </span><span class="str">'ready'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">(</span><span class="pln"> $ds </span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">

    </span><span class="com">// Тут продолжим писать код</span><span class="pln">

</span><span class="pun">}</span><span class="pln"> </span><span class="pun">);</span><span class="pln">


$ds</span><span class="pun">-&gt;</span><span class="pln">run</span><span class="pun">();</span></pre>

<p>
	И первое событие, которое мы обработаем - так это входящие сообщения:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted"><span class="pln">$ds</span><span class="pun">-&gt;</span><span class="pln">on</span><span class="pun">(</span><span class="pln"> </span><span class="typ">Event</span><span class="pun">::</span><span class="pln">MESSAGE_CREATE</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">(</span><span class="pln"> </span><span class="typ">Message</span><span class="pln"> $msg</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Discord</span><span class="pln"> $ds </span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">

    </span><span class="com">// Тут будем обрабатывать входящие</span><span class="pln">

</span><span class="pun">}</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	Добавим тестовую команду:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted"><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> $msg</span><span class="pun">-&gt;</span><span class="pln">content </span><span class="pun">==</span><span class="pln"> </span><span class="str">'/бот'</span><span class="pln"> </span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
    $msg</span><span class="pun">-&gt;</span><span class="pln">reply</span><span class="pun">(</span><span class="pln"> </span><span class="str">'Привет, '</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> $msg</span><span class="pun">-&gt;</span><span class="pln">author</span><span class="pun">-&gt;</span><span class="pln">username </span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	Да, бот пока не запущен и не готов к работе, но я забегу наперёд.
</p>

<p>
	С помощью метода <strong>ban()</strong> можно заблокировать участника. В первом параметре можно указать, за какой промежуток времени нужно удалить сообщения этого пользователя (я для примера удалю сообщения за последние сутки), а во втором - причину бана:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted"><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> str_contains</span><span class="pun">(</span><span class="pln"> $msg</span><span class="pun">-&gt;</span><span class="pln">content</span><span class="pun">,</span><span class="pln"> </span><span class="str">'админ лох'</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
    $msg</span><span class="pun">-&gt;</span><span class="pln">member</span><span class="pun">-&gt;</span><span class="pln">ban</span><span class="pun">(</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">'reason'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	Такое условие на практике, конечно, использоваться никогда не будет, да и в принципе банить людей по ключевым словам - решение не шибко надёжное. Но сейчас я просто показываю, как можно банить юзеров средствами библиотеки.
</p>

<p>
	В первом шаге мы включили <strong>Members Intent</strong>, поэтому теперь можем отслеживать вход новых участников на наш сервер:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted"><span class="pln">$ds</span><span class="pun">-&gt;</span><span class="pln">on</span><span class="pun">(</span><span class="pln"> </span><span class="typ">Event</span><span class="pun">::</span><span class="pln">GUILD_MEMBER_ADD</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">(</span><span class="pln"> </span><span class="typ">Member</span><span class="pln"> $member</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Discord</span><span class="pln"> $ds </span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">

    </span><span class="com">// Тут продолжим писать код</span><span class="pln">

</span><span class="pun">}</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	Давайте выдадим новым участникам какую-нибудь роль, а для этого нам понадобится получить ID этой самой роли. Чтобы его получить - включаем режим разработчика (<strong>Настройки -&gt; Настройки приложения -&gt; Расширенное</strong>).<br />
	Ну, и теперь копируем ID нужной роли.<br />
	<br />
	Теперь мы можем воспользоваться методом <strong>addRole()</strong>, передав в него скопированный айдишник (в виде строки):
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted"><span class="pln">$member</span><span class="pun">-&gt;</span><span class="pln">addRole</span><span class="pun">(</span><span class="pln"> </span><span class="str">'1007995229674156102'</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	Ну, и ещё поменяем никнейм присоединившегося участника на сервере методом <strong>setNickname()</strong><span>:</span>
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted"><span class="pln">$member</span><span class="pun">-&gt;</span><span class="pln">setNickname</span><span class="pun">(</span><span class="pln"> </span><span class="str">'Новый никнейм'</span><span class="pln"> </span><span class="pun">);</span></pre>

<p>
	Весь код:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted"><span class="pun">&lt;?</span><span class="pln">php

</span><span class="kwd">require</span><span class="pln"> __DIR__ </span><span class="pun">.</span><span class="pln"> </span><span class="str">'/vendor/autoload.php'</span><span class="pun">;</span><span class="pln">


</span><span class="kwd">use</span><span class="pln"> </span><span class="typ">Discord</span><span class="pln">\Discord</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">use</span><span class="pln"> </span><span class="typ">Discord</span><span class="pln">\WebSockets\Event</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">use</span><span class="pln"> </span><span class="typ">Discord</span><span class="pln">\WebSockets\Intents</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">use</span><span class="pln"> </span><span class="typ">Discord</span><span class="pln">\Parts\User\Member</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">use</span><span class="pln"> </span><span class="typ">Discord</span><span class="pln">\Parts\Channel\Message</span><span class="pun">;</span><span class="pln">




$ds </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Discord</span><span class="pun">(</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
    </span><span class="str">'token'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="str">'******************'</span><span class="pun">,</span><span class="pln">
    </span><span class="str">'intents'</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="typ">Intents</span><span class="pun">::</span><span class="pln">getDefaultIntents</span><span class="pun">()</span><span class="pln"> </span><span class="pun">|</span><span class="pln"> </span><span class="typ">Intents</span><span class="pun">::</span><span class="pln">GUILD_MEMBERS</span><span class="pun">,</span><span class="pln">
</span><span class="pun">]</span><span class="pln"> </span><span class="pun">);</span><span class="pln">



$ds</span><span class="pun">-&gt;</span><span class="pln">on</span><span class="pun">(</span><span class="pln"> </span><span class="str">'ready'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">(</span><span class="pln"> $ds </span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">


    $ds</span><span class="pun">-&gt;</span><span class="pln">on</span><span class="pun">(</span><span class="pln"> </span><span class="typ">Event</span><span class="pun">::</span><span class="pln">MESSAGE_CREATE</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">(</span><span class="pln"> </span><span class="typ">Message</span><span class="pln"> $msg</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Discord</span><span class="pln"> $ds </span><span class="pun">)</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">

        </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> $msg</span><span class="pun">-&gt;</span><span class="pln">content </span><span class="pun">==</span><span class="pln"> </span><span class="str">'/бот'</span><span class="pln"> </span><span class="pun">)</span><span class="pln">
        </span><span class="pun">{</span><span class="pln">
            $msg</span><span class="pun">-&gt;</span><span class="pln">reply</span><span class="pun">(</span><span class="pln"> </span><span class="str">'Привет, '</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> $msg</span><span class="pun">-&gt;</span><span class="pln">author</span><span class="pun">-&gt;</span><span class="pln">username </span><span class="pun">);</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">

        </span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> str_contains</span><span class="pun">(</span><span class="pln"> $msg</span><span class="pun">-&gt;</span><span class="pln">content</span><span class="pun">,</span><span class="pln"> </span><span class="str">'админ лох'</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">)</span><span class="pln">
        </span><span class="pun">{</span><span class="pln">
            $msg</span><span class="pun">-&gt;</span><span class="pln">member</span><span class="pun">-&gt;</span><span class="pln">ban</span><span class="pun">(</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">'reason'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">

    </span><span class="pun">}</span><span class="pln"> </span><span class="pun">);</span><span class="pln">

    $ds</span><span class="pun">-&gt;</span><span class="pln">on</span><span class="pun">(</span><span class="pln"> </span><span class="typ">Event</span><span class="pun">::</span><span class="pln">GUILD_MEMBER_ADD</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">(</span><span class="pln"> </span><span class="typ">Member</span><span class="pln"> $member</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Discord</span><span class="pln"> $ds </span><span class="pun">)</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">

        $member</span><span class="pun">-&gt;</span><span class="pln">addRole</span><span class="pun">(</span><span class="pln"> </span><span class="str">'1007995229674156102'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
        $member</span><span class="pun">-&gt;</span><span class="pln">setNickname</span><span class="pun">(</span><span class="pln"> </span><span class="str">'Новый никнейм'</span><span class="pln"> </span><span class="pun">);</span><span class="pln">

    </span><span class="pun">}</span><span class="pln"> </span><span class="pun">);</span><span class="pln">


</span><span class="pun">}</span><span class="pln"> </span><span class="pun">);</span><span class="pln">


$ds</span><span class="pun">-&gt;</span><span class="pln">run</span><span class="pun">();</span></pre>

<p>
	<span style="font-size:20px;">Шаг 3: Запуск бота</span>
</p>

<p>
	Запустить бота можно на OpenServer. Для этого нужно перейти в консоль.
</p>

<p>
	И ввести следующую команду (путь, естественно, указывать нужно свой):
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted"><span class="pln">php </span><span class="str">"D:\DiscordBOT\bot.php"</span></pre>

<p>
	Если же у вас есть купленный хост, который предоставляет возможность юзать консоль, то запустить бота можно там. ISPManager принцип:
</p>

<p>
	1. Переходим во вкладку Shell-клиент.<br />
	2. Вводим следующую команду.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted"><span class="str">/opt/</span><span class="pln">php</span><span class="pun">/</span><span class="lit">8.1</span><span class="pun">/</span><span class="pln">bin</span><span class="pun">/</span><span class="pln">php www</span><span class="pun">/</span><span class="pln">site</span><span class="pun">.</span><span class="pln">ru</span><span class="pun">/</span><span class="pln">bot</span><span class="pun">.</span><span class="pln">php</span></pre>

<p>
	Путь и версию PHP меняем под себя.
</p>

<p>
	Чтобы быстро вставить команду в консоли - нажмите <strong>ПКМ -&gt; Paste from browser</strong>:
</p>

<p>
	На этом всё!
</p>
]]></description><guid isPermaLink="false">301</guid><pubDate>Tue, 19 Mar 2024 22:42:55 +0000</pubDate></item><item><title>&#x41A;&#x430;&#x43A; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442;&#x44C; &#x437;&#x43D;&#x430;&#x447;&#x43E;&#x43A; &#x430;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x433;&#x43E; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x447;&#x438;&#x43A;&#x430; &#x432; Discord?</title><link>https://forum.aprelteam.by/mur/kak-poluchit-znachok-aktivnogo-razrabotchika-v-discord/?id=296</link><description><![CDATA[<p>
	<strong>Как получить значок активного разработчика в Discord? (статья ещё обновится, текст ниже скорее всего неактуален, на работе просто)</strong>
</p>

<p>
	Значок активного разработчика — знак признания создателей приложений, которые вы можете использовать на платформе Discord. Как только вы получите значок, он появится рядом с вашим профилем, чтобы обозначить ваш выдающийся статус. Другие пользователи будут знать, что могут обратиться к вам, если им понадобится совет от разработчика или доверенного автора. Однако иногда система выдачи значков Discord может показаться немного запутанной.
</p>

<p>
	<strong>Как получить значок разработчика в Discord?</strong><br />
	Если вы разработчик, то вы должны сначала убедиться, что соответствуете требованиям. Пользователи Discord соответствуют условиям, если у них есть хотя бы одно проверенное или непроверенное активное приложение. Платформа рассматривает приложение только как “активное” если вы использовали его через команду за последние 30 дней.
</p>

<p>
	<strong>Если вы соответствуете вышеуказанным требованиям, вы можете претендовать на сам значок, то вот как это сделать:</strong>
</p>

<ol>
	<li>
		Откройте <a href="https://discord.com/developers/applications" rel="external nofollow">Discord Developer Portal</a>, а затем нажмите кнопку <strong>Приложения</strong> в главном меню в левой части экрана.
	</li>
	<li>
		Выберите активное приложение, которое появится в раскрывающемся меню. Обязательно найдите то, которое вы использовали за последние 30 дней, чтобы иметь право на участие.
	</li>
	<li>
		Discord предложит вам выбрать один из вариантов в меню, отмеченном как выбор сервера, после того, как вы выберете своё приложение и назначите сервер. Нажмите на сервер, чтобы назначить новостной канал для разработчиков, а затем обновите свой профиль.
	</li>
</ol>

<p>
	Вернувшись в свой профиль Discord, вы должны увидеть значок активного разработчика под изображением вашего профиля. Убедитесь, что указанный вами сервер настроен как сервер сообщества и что у вас есть доступ к нему с правами администратора.
</p>

<p>
	<strong>Как создать приложение для вашего сервера Discord?</strong><br />
	Вот как настроить и создать приложение для сервера Discord:
</p>

<ol>
	<li>
		Перейдите на портал разработчика и выберите <strong>Новое приложение</strong> вариант.
	</li>
	<li>
		Откроется окно с предложением назвать ваше приложение. Назвав его, выберите <strong>Создать</strong> option.
	</li>
	<li>
		Внесите любые изменения в приложение – таких как аватар, описание или имя – а затем сохраните их, когда закончите.
	</li>
	<li>
		Перейдите к кнопке приложения в меню слева, выберите <strong>Добавить бота</strong> и подтвердите это.
	</li>
</ol>

<p>
	После того, как вы создадите свое приложение, появится окно с вашим токеном бота. Вы можете сбросить его, если хотите. Однако никому не сообщайте этот токен, так как он действует как пароль для вашего приложения. Если кто-то получит его, он сможет использовать ваше приложение. Также стоит отметить, что фактический процесс написания кода для создания новых приложений потребует от вас самостоятельного написания и разработки.
</p>

<p>
	<strong>Часто задаваемые вопросы<br />
	<br />
	Почему мой значок не отображается, несмотря на то, что я его запрашиваю?</strong><br />
	Как только Discord уведомит вас о том, что вы получили значок, вы сможете обновить экран, используя версию для браузера. Кроме того, вы можете выйти и снова войти в приложение, и значок появится под изображением вашего профиля.
</p>

<p>
	<strong>Могу ли я удалить значок разработчика из своего профиля?</strong><br />
	Вы можете удалить свой значок через портал разработчика, выбрав “Удалить значок” вариант.
</p>

<p>
	<strong>Какие еще значки есть у Discord?</strong><br />
	У Discord есть другие значки, такие как значок Hype Squad House, значок Hype Squad Events, Значок сертифицированного модератора, значок охотника за ошибками и значок раннего сторонника.
</p>

<p>
	<strong>Все ли значки имеют преимущества?</strong><br />
	Некоторые значки дают привилегии, функции и особые преимущества, в то время как другие просто служат украшением вашего профиля, например значок Early Supporter.
</p>

<p>
	<strong>Как я могу получить значок Early Supporter?</strong><br />
	К сожалению, значки Early Supporter были выданный в то время, когда платформа Discord только зарождалась и еще не получила широкого распространения. По этой причине получить этот значок больше невозможно.
</p>
]]></description><guid isPermaLink="false">296</guid><pubDate>Mon, 18 Mar 2024 15:27:23 +0000</pubDate></item></channel></rss>
