DevGX Command Doctrine — خانه‌ی KrubiK و Krubot

یک‌بار قصه-کدی را بنویس؛ بر چندین جهان فرمان بده.

با KrubiK / Krubot، توسعه‌ی بات برای Telegram، Bale و Rubika از گیرنده های پخش‌وپلا، توابع شکننده و مدیریت‌وضعیت های فرسوده عبور می‌کند؛ و به معماری روایی، چندسکویی، لذّت‌بخش و فرمان‌پذیر می‌رسد.

PHP 8.2+ Laravel 12+ Story-Driven Architecture TG / Bale / Rubika
با نصب Krubot، دیگر فقط Developer نیستی؛ تو یک StoryCaster هستی.
DevGX
THE REBEL PROTOCOL

کروبات، برای وصله‌زدن آشوب متولد نشد؛ برای تبدیلش به «شتاب گرفتن» برنامه‌نویسی آمد.

وقتی توسعه‌ی بات با بزرگ‌تر شدن پروژه تبدیل به جنگ با callbackها، stateهای گم‌شده و منطق‌های پراکنده می‌شود، مشکل فقط کد نیست؛ مشکل، فقدان یک زبان معماری درست است.

callbackهای شکننده و غیرقابل refactor
handlerهای پخش‌شده در سراسر پروژه
state management خسته‌کننده و دستی
UIهای مبتنی بر آرایه‌های بی‌روح
توسعه‌ی جداگانه برای هر پلتفرم
رشد محصول همراه با ریسک و فرسودگی
THE MAGICIAN LAYER

StoryCasting یعنی کد فقط دستور نباشد؛ روایت باشد.

در جهان DevGX، تو صرفاً eventها را مدیریت نمی‌کنی. تو نیت، صحنه، انتخاب، حافظه، مسیر، پاسخ و تجربه را طراحی می‌کنی. این همان نقطه‌ای است که تعامل انسان، ماشین و AI با کد، از یک فرآیند مکانیکی به یک رقص دقیق و معنادار تبدیل می‌شود.

گفت‌وگو را مثل یک داستان مهندسی کن هر فرمان، انتخاب و پاسخ، بخشی از یک جریان قابل‌فهم و هدفمند است.
پیچیدگی را به intent تبدیل کن تو خواسته را تعریف می‌کنی؛ Krubot اجرای چندلایه را سازمان می‌دهد.
معماری را در دل تجربه نگه دار سرعت ساخت، نباید بهای از دست‌دادن نظم، خوانایی و توسعه‌پذیری باشد.
نیّت
حافظه
تجربه
THE DEVGX DNA

سه نیرو، یک هسته؛ شورش، جادو، حکمت.

DevGX فقط یک محصول تولید نمی‌کند؛ یک طرز فکر برای ساختن نرم‌افزارهای زنده، خوانا و فرمان‌پذیر می‌سازد.

Rebel — طغیانگر

برای کسانی که حاضر نیستند آشفتگی را به‌عنوان «طبیعت توسعه بات» بپذیرند. KrubiK علیه boilerplate، تکرار و وابستگی‌های شکننده قیام می‌کند.

Magician — جادوگر

Krubot پیچیدگی را ناپدید نمی‌کند؛ آن را به چیزی قابل‌فرمان، شفاف و لذت‌بخش تبدیل می‌کند. این جادو، حاصل abstraction درست است؛ نه پنهان‌کاری.

Sage — حکیم

قدرت بدون معماری، هرج‌ومرج است. DevGX برای محصولاتی ساخته شده که باید رشد کنند، refactor شوند، تیمی شوند و در زمان دوام بیاورند.

THE COMMAND STACK

DevGX قلمرو است؛ KrubiK و Krubot، قدرت اجرایی آن هستند.

این دو را یکی ندان. KrubiK ستون فقرات و منطق معماری است؛ Krubot سردار عملیاتی‌ای است که روایت را در میدان اجرا می‌کند.

کروبیک — هسته‌ای که آشوب را به فرمان تبدیل می‌کند

کروبیک استخوان‌بندی جهان DevGX است؛ یک کرنل معماری‌محور برای نظم‌دادن به intent، flow، execution و رشد. برای کسانی که نمی‌خواهند ابزارشان فقط «کار کند»؛ بلکه می‌خواهند ابزارشان در مقیاس، در زمان و در refactor نیز قدرتمند بماند.

Architectural Core

کروبات — فرمانده اجرایی StoryCasting

کروبات فقط یک wrapper برای API نیست. او routeها، حافظه، فرم‌ها، UI، middlewareها و تعامل چندسکویی را زیر یک اراده‌ی واحد گرد می‌آورد. تو نیت را می‌نویسی؛ Krubot آن را در Telegram، Bale و Rubika به واقعیت تبدیل می‌کند.

Narrative Runtime
Krubot Nexus Terminal
STORY ONCE / COMMAND MULTI-VERSE

یک‌بار بنویس؛ چند جهان را بگشا.

Telegram، Bale و Rubika نباید سه پروژه‌ی جدا، سه منطق جدا و سه برابر هزینه‌ی نگهداری داشته باشند.  کروبیک به تو اجازه می‌دهد یک داستان، یک جریان و یک معماری واحد را در چندین به‌طورهمزمان جبهه اجرا کنی. این یعنی سرعت بیشتر، انسجام بیشتر و هزینه‌های کمتر برای رشد استارتاپ.

Telegram
Bale
Rubika
HYPERDX, WITH DISCIPLINE

توانمندی‌هایی که فقط خوشگل نیستند؛ نجات‌دهنده‌اند.

Krubot برای دموهای فریبنده ساخته نشده؛ برای سیستم‌هایی ساخته شده که قرار است جدی، زنده، مقیاس‌پذیر و قابل‌اعتماد باشند.

KrubiK Stack Architecture

معماری روایی

به‌جای handlerهای تکه‌تکه، جریان تعامل را مثل یک داستان مهندسی‌شده و خوانا بساز.

Routeهای نام‌دار

callback stringهای شکننده را با مسیرهای معنادار و refactor-friendly جایگزین کن.

Forms و Wizardها

سفرهای چندمرحله‌ای، اعتبارسنجی و بازگردانی progress را بدون آشوب state دستی بساز.

Memory با مرز مشخص

حافظه‌ی user، chat، global و context را به یک تصمیم معماری تبدیل کن؛ نه یک وصله.

UI Composition

دکمه‌ها، gridها و انتخاب‌ها را composable بساز؛ نه اینکه در آرایه‌های مبهم دفنشان کنی.

Middlewareهای واقعی

سیستم واقعی boundary واقعی می‌خواهد؛ global، route، alias و group را جدی مدیریت کن.

Attribute-Driven Routing

با attributeهای مدرن PHP، intent و dispatch را قابل‌کشف‌تر، تمیزتر و قابل‌نگهداری‌تر کن.

HyperDX برای همه‌ی سطوح

جونیورها سریع‌تر حرکت می‌کنند؛ سینیورها کنترل، عمق و شرافت معماری را از دست نمی‌دهند.

THE PROOF IS IN THE CODE

وقتی کد مثل یک صحنه‌ی داستانی خوانده می‌شود، می‌فهمی چرا اینجا StoryCaster می‌شویم.

این فقط یک کد خوانا نیست؛ این زبانِ طراحی تجربه، مسیر و تعامل است. کدی که هم برای جونیور قابل‌فهم می‌ماند و هم برای سینیور، عمق و قدرت معماری دارد.

app/Nexus/GamePanelNexus.php
namespace App\Nexus;
// To Activate, Just Drop The Code In :: app/Nexus/GamePanelNexus.php

class GamePanelNexus
{
    #[OnCommand('panel')]
    public function showDashboard(Krubot $bot): void
    {
        // Super-Speed Fail-safe resolver for userData
        $isActive = $bot->userStorage()->get('subscribed', false);

        $bot->reply('**Welcome back Commander!**\nYour Account Status 🎮: ' . ($isActive ? 'Active ✅' : 'DeActive ❌️'))
            ->attachKeyboard(function($kb) use($isActive) {
                
            $kb

                // 🟡 Row 1: Primary Action Buttons (3 columns each = 50% width distribution)
                ->row(fn($row) => $row
                    ->add(PowerButton::make('♦️ Buy Gems 💎')->col(3)->action('buy_gem'))
                    ->add(PowerButton::make('♦️ Top-up Wallet 💰')->col(3)->action('wallet'))
                )

                // Only attach Server buttons IF the account is active
                ->when($isActive, function(Keyboard $kbx) {

                    // 🔵 Row 2: Conditional Server Selection Matrix
                    // This demonstrates the raw power of the col() method; strictly aligning
                    // 3 elements side-by-side (2 columns each = 33.33% viewport width).
                    $kbx->row(
                        fn($row) => $row
                            ->add(PowerButton::simple('srv_1', 'IR 🇮🇷')->col(2))
                            ->add(PowerButton::simple('srv_2', 'US 🇺🇸')->col(2))
                            ->add(PowerButton::simple('srv_3', 'EU 🇪🇺')->col(2))
                    );

                })

                // 🔴 Row 3: Full-width Support / Fallback Button (6 columns = 100% viewport width)
                ->row(fn($row) => $row
                    ->add(PowerButton::make('♦️ Online Support 🆘')->col(6)->action('support'))
                );
            })
        ->send();
    }

    #[Action('buy_gem')]
    public function buy_gem(Krubot $bot): void 
    {
        // Business logic for purchasing gems...
    }
    
    #[Action('wallet')]
    public function show_wallet(Krubot $bot): void 
    {
        // Business logic for wallet top-up...
    }

    #[OnCommand('menu')]
    public function showGamesMenu(Krubot $bot): void
    {
        // 1. Fetching VIP products from the database.
        $products = Product::query()
            ->where('is_vip', true)
            ->get(['id', 'name', 'price']); // Returns an Eloquent Collection
        
        // 2. Rapid Transformation via Laravel Collections.
        // Mapping the Products directly into the PowerButton actionable architecture.
        $buttons = $products->map(function (Product $product) {
            $label = "{$product->name} (💰 {$product->price}T)";
            return PowerButton::make($label)->action('order', ['id' => $product->id]);
        })->toArray();

        // 3. The Magic of Chunking: Automatically grouping elements into a pristine matrix.
        // Changing chunk(2) to chunk(3) effortlessly switches the grid layout to a 3-column UI.
        $bot->reply("Today's Exclusive VIP Games: ✨️🧧")
            ->keyboard(
                Keyboard::make()
                    ->rtl() // Can be used for properly Align Persian layouts on the screen by forcing Right-to-Left rendering order // + rtl(false) === ltr()
                    ->buttons($buttons)
                    ->chunk(2) // <--- Its DX! Zero manual row calculation!
            )
        ->send();
    }

    #[Action('order')]
    public function orderGame(Krubot $bot, int $id): void 
    {
        // Business logic for $product Order

        $product = Product::find($id);
        if(!$product)
            return $bot->reply("Product Id is Invalid")->send();

        // $userId = $bot->userId();
        // AmethystMatrix::whisper('Order Started', compact('userId', 'product'));
        // not needed userId, AmethystMatrix collects & logs any data allowed to her via: `config('krubot.amethyst.report_context')[]`

        AmethystMatrix::whisper('Order Started', $product);

        $bot
        ->reply('You\'ve Chosen a Great Game to Engage ✨️🎮️ :: ***' . $product->name . '***')
        ->send();

    }
}
این فقط یک نمونه کوچک است. KrubiK/Krubot برای سناریوهای پیچیده‌تر مجهّز و آماده شده است.
THE SAGA-SHIFT

تفاوت بین «نوشتن کد» و «طراحی روایت».

دیگر زمان هدر دادن بر روی جزئیات بی‌معنی گذشته است. با KrubiK و Krubot، بر روی آنچه واقعاً مهم است تمرکز کن: داستان.

قبل از DevGX

  • Callback Hell و Spagetti Code
  • مدیریت دستی و پرخطای State
  • UIهای سفارشی و غیرقابل نگهداری
  • تکرار منطق برای پلتفرم‌های مختلف
  • دشواری در Refactor و مقیاس‌پذیری

بعد از DevGX

  • معماری روایی و Routeهای نام‌دار
  • Memory Management هوشمند و امن
  • UI Composability و Reusability
  • توسعه‌ی یکپارچه برای چند پلتفرم
  • افزایش سرعت، خوانایی و توسعه‌پذیری
THE MANIFESTO

ما برای انقلاب در نحوه‌ی ساخت بات‌ها اینجا هستیم؛ نه برای بهبود وضعیت موجود.

DevGX یک ابزار نیست؛ یک جنبش است. جنبشی برای بازتعریف رابطه‌ی ما با کد، با کاربرانمان و با آینده‌ی توسعه‌ی نرم‌افزار. ما به شما قدرت StoryCasting را می‌دهیم.

شورش علیه آشوب جادو در معماری حکمت در مقیاس‌پذیری روایت، هسته‌ی فرمان توسعه‌پذیری بی‌حد
QUESTIONS / ANSWERS

سوالاتی که ممکن است داشته باشید؛ پاسخ‌هایی که نیاز دارید.

برای شفافیت کامل، به برخی از رایج‌ترین سوالات درباره‌ی KrubiK و Krubot پاسخ داده‌ایم.

KrubiK/Krubot برای چه کسانی مناسب است؟

برای هر توسعه‌دهنده‌ای که می‌خواهد بات‌های Telegram، Bale یا Rubika را با معماری تمیز، قابل‌نگهداری و مقیاس‌پذیر بسازد. چه یک جونیور باشید که به دنبال بهترین شروع است، چه یک سینیور که از آشفتگی پروژه‌های بزرگ خسته شده، DevGX برای شماست.

آیا KrubiK/Krubot فقط برای PHP و Laravel است؟

هسته‌ی KrubiK به‌عنوان یک پکیج PHP طراحی شده است و به‌صورت بومی با Laravel سازگاری کامل دارد. این به این معناست که می‌توانید از قدرت و اکوسیستم گسترده Laravel بهره‌مند شوید. اما فلسفه‌ی Story-Driven آن، برای معماری‌های دیگر نیز الهام‌بخش است.

چه تفاوتی بین KrubiK و Krubot وجود دارد؟

KrubiK هسته‌ی معماری و فریم‌ورک اصلی است که اصول Story-Driven را پیاده‌سازی می‌کند. Krubot یک "Narrative Runtime" است که بر روی KrubiK ساخته شده و مسئول اجرای این معماری در پلتفرم‌های خاص (مثل Telegram، Bale، Rubika) است. KrubiK مغز متفکر است؛ Krubot بازوی اجرایی.

آیا می‌توانم از KrubiK/Krubot در پروژه‌های موجود استفاده کنم؟

بله، KrubiK/Krubot به‌گونه‌ای طراحی شده‌اند که بتوانند به‌راحتی در پروژه‌های موجود Laravel ادغام شوند. شما می‌توانید به‌تدریج بخش‌هایی از منطق بات خود را به معماری Story-Driven منتقل کنید.

چگونه می‌توانم به جامعه DevGX بپیوندم؟

ما از مشارکت شما استقبال می‌کنیم! می‌توانید از طریق لینک‌های شبکه‌های اجتماعی ما در فوتر صفحه به کانال‌ها و گروه‌های گفت‌وگوی ما بپیوندید. همچنین مشارکت در GitHub نیز بسیار ارزشمند است.

JOIN THE REBELLION NETWORK

آماده‌ای که یک StoryCaster شوی؟ به ما بپیوند!

ما فقط یک پلتفرم نیستیم؛ ما یک جامعه از توسعه‌دهندگان طغیانگر و جادوگر هستیم که به دنبال ساختن جهان‌های بهتر با کد هستند.