Rebel — طغیانگر
برای کسانی که حاضر نیستند آشفتگی را بهعنوان «طبیعت توسعه بات» بپذیرند. KrubiK علیه boilerplate، تکرار و وابستگیهای شکننده قیام میکند.
با KrubiK / Krubot، توسعهی بات برای Telegram، Bale و Rubika از گیرنده های پخشوپلا، توابع شکننده و مدیریتوضعیت های فرسوده عبور میکند؛ و به معماری روایی، چندسکویی، لذّتبخش و فرمانپذیر میرسد.
وقتی توسعهی بات با بزرگتر شدن پروژه تبدیل به جنگ با callbackها، stateهای گمشده و منطقهای پراکنده میشود، مشکل فقط کد نیست؛ مشکل، فقدان یک زبان معماری درست است.
در جهان DevGX، تو صرفاً eventها را مدیریت نمیکنی. تو نیت، صحنه، انتخاب، حافظه، مسیر، پاسخ و تجربه را طراحی میکنی. این همان نقطهای است که تعامل انسان، ماشین و AI با کد، از یک فرآیند مکانیکی به یک رقص دقیق و معنادار تبدیل میشود.
DevGX فقط یک محصول تولید نمیکند؛ یک طرز فکر برای ساختن نرمافزارهای زنده، خوانا و فرمانپذیر میسازد.
برای کسانی که حاضر نیستند آشفتگی را بهعنوان «طبیعت توسعه بات» بپذیرند. KrubiK علیه boilerplate، تکرار و وابستگیهای شکننده قیام میکند.
Krubot پیچیدگی را ناپدید نمیکند؛ آن را به چیزی قابلفرمان، شفاف و لذتبخش تبدیل میکند. این جادو، حاصل abstraction درست است؛ نه پنهانکاری.
قدرت بدون معماری، هرجومرج است. DevGX برای محصولاتی ساخته شده که باید رشد کنند، refactor شوند، تیمی شوند و در زمان دوام بیاورند.
این دو را یکی ندان. KrubiK ستون فقرات و منطق معماری است؛ Krubot سردار عملیاتیای است که روایت را در میدان اجرا میکند.
کروبیک استخوانبندی جهان DevGX است؛ یک کرنل معماریمحور برای نظمدادن به intent، flow، execution و رشد. برای کسانی که نمیخواهند ابزارشان فقط «کار کند»؛ بلکه میخواهند ابزارشان در مقیاس، در زمان و در refactor نیز قدرتمند بماند.
کروبات فقط یک wrapper برای API نیست. او routeها، حافظه، فرمها، UI، middlewareها و تعامل چندسکویی را زیر یک ارادهی واحد گرد میآورد. تو نیت را مینویسی؛ Krubot آن را در Telegram، Bale و Rubika به واقعیت تبدیل میکند.
Krubot برای دموهای فریبنده ساخته نشده؛ برای سیستمهایی ساخته شده که قرار است جدی، زنده، مقیاسپذیر و قابلاعتماد باشند.
بهجای handlerهای تکهتکه، جریان تعامل را مثل یک داستان مهندسیشده و خوانا بساز.
callback stringهای شکننده را با مسیرهای معنادار و refactor-friendly جایگزین کن.
سفرهای چندمرحلهای، اعتبارسنجی و بازگردانی progress را بدون آشوب state دستی بساز.
حافظهی user، chat، global و context را به یک تصمیم معماری تبدیل کن؛ نه یک وصله.
دکمهها، gridها و انتخابها را composable بساز؛ نه اینکه در آرایههای مبهم دفنشان کنی.
سیستم واقعی boundary واقعی میخواهد؛ global، route، alias و group را جدی مدیریت کن.
با attributeهای مدرن PHP، intent و dispatch را قابلکشفتر، تمیزتر و قابلنگهداریتر کن.
جونیورها سریعتر حرکت میکنند؛ سینیورها کنترل، عمق و شرافت معماری را از دست نمیدهند.
این فقط یک کد خوانا نیست؛ این زبانِ طراحی تجربه، مسیر و تعامل است. کدی که هم برای جونیور قابلفهم میماند و هم برای سینیور، عمق و قدرت معماری دارد.
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، بر روی آنچه واقعاً مهم است تمرکز کن: داستان.
DevGX یک ابزار نیست؛ یک جنبش است. جنبشی برای بازتعریف رابطهی ما با کد، با کاربرانمان و با آیندهی توسعهی نرمافزار. ما به شما قدرت StoryCasting را میدهیم.
برای شفافیت کامل، به برخی از رایجترین سوالات دربارهی KrubiK و Krubot پاسخ دادهایم.
برای هر توسعهدهندهای که میخواهد باتهای Telegram، Bale یا Rubika را با معماری تمیز، قابلنگهداری و مقیاسپذیر بسازد. چه یک جونیور باشید که به دنبال بهترین شروع است، چه یک سینیور که از آشفتگی پروژههای بزرگ خسته شده، DevGX برای شماست.
هستهی KrubiK بهعنوان یک پکیج PHP طراحی شده است و بهصورت بومی با Laravel سازگاری کامل دارد. این به این معناست که میتوانید از قدرت و اکوسیستم گسترده Laravel بهرهمند شوید. اما فلسفهی Story-Driven آن، برای معماریهای دیگر نیز الهامبخش است.
KrubiK هستهی معماری و فریمورک اصلی است که اصول Story-Driven را پیادهسازی میکند. Krubot یک "Narrative Runtime" است که بر روی KrubiK ساخته شده و مسئول اجرای این معماری در پلتفرمهای خاص (مثل Telegram، Bale، Rubika) است. KrubiK مغز متفکر است؛ Krubot بازوی اجرایی.
بله، KrubiK/Krubot بهگونهای طراحی شدهاند که بتوانند بهراحتی در پروژههای موجود Laravel ادغام شوند. شما میتوانید بهتدریج بخشهایی از منطق بات خود را به معماری Story-Driven منتقل کنید.
ما از مشارکت شما استقبال میکنیم! میتوانید از طریق لینکهای شبکههای اجتماعی ما در فوتر صفحه به کانالها و گروههای گفتوگوی ما بپیوندید. همچنین مشارکت در GitHub نیز بسیار ارزشمند است.
ما فقط یک پلتفرم نیستیم؛ ما یک جامعه از توسعهدهندگان طغیانگر و جادوگر هستیم که به دنبال ساختن جهانهای بهتر با کد هستند.