[{"data":1,"prerenderedAt":740},["ShallowReactive",2],{"navigation_docs_fr":3,"-fr-getting-started-project-structure":151,"-fr-getting-started-project-structure-surround":735},[4,34,69,94,122],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Bien démarrer",false,"\u002Ffr\u002Fgetting-started","fr\u002F1.getting-started",[10,15,20,25,29],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Ffr\u002Fgetting-started\u002Fintroduction","fr\u002F1.getting-started\u002F1.introduction","i-lucide-sparkles",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Ffr\u002Fgetting-started\u002Fsetup","fr\u002F1.getting-started\u002F2.setup","i-lucide-rocket",{"title":21,"path":22,"stem":23,"icon":24},"Structure du projet","\u002Ffr\u002Fgetting-started\u002Fproject-structure","fr\u002F1.getting-started\u002F3.project-structure","i-lucide-folder-tree",{"title":26,"path":27,"stem":28,"icon":24},"Structure d’un module","\u002Ffr\u002Fgetting-started\u002Fmodule-structure","fr\u002F1.getting-started\u002F4.module-structure",{"title":30,"path":31,"stem":32,"icon":33},"Auto-imports","\u002Ffr\u002Fgetting-started\u002Fauto-imports","fr\u002F1.getting-started\u002F5.auto-imports","i-lucide-wand",{"title":35,"icon":6,"path":36,"stem":37,"children":38,"page":6},"Guide","\u002Ffr\u002Fguide","fr\u002F2.guide",[39,44,49,54,59,64],{"title":40,"path":41,"stem":42,"icon":43},"Commandes","\u002Ffr\u002Fguide\u002Fcommands","fr\u002F2.guide\u002F1.commands","i-lucide-terminal",{"title":45,"path":46,"stem":47,"icon":48},"Events","\u002Ffr\u002Fguide\u002Fevents","fr\u002F2.guide\u002F2.events","i-lucide-radio",{"title":50,"path":51,"stem":52,"icon":53},"Embeds V2","\u002Ffr\u002Fguide\u002Fembed-v2","fr\u002F2.guide\u002F3.embed-v2","i-lucide-layout",{"title":55,"path":56,"stem":57,"icon":58},"GlyriaBus","\u002Ffr\u002Fguide\u002Fglyria-bus","fr\u002F2.guide\u002F4.glyria-bus","i-lucide-bus",{"title":60,"path":61,"stem":62,"icon":63},"Replyable Context","\u002Ffr\u002Fguide\u002Freplyable-context","fr\u002F2.guide\u002F5.replyable-context","i-lucide-message-square",{"title":65,"path":66,"stem":67,"icon":68},"Modules","\u002Ffr\u002Fguide\u002Fmodules","fr\u002F2.guide\u002F6.modules","i-lucide-package",{"title":70,"icon":6,"path":71,"stem":72,"children":73,"page":6},"Exemples","\u002Ffr\u002Fexamples","fr\u002F3.examples",[74,79,82,86,89],{"title":75,"path":76,"stem":77,"icon":78},"Client","\u002Ffr\u002Fexamples\u002Fclient","fr\u002F3.examples\u002F1.client","i-lucide-bot",{"title":40,"path":80,"stem":81,"icon":43},"\u002Ffr\u002Fexamples\u002Fcommands","fr\u002F3.examples\u002F2.commands",{"title":45,"path":83,"stem":84,"icon":85},"\u002Ffr\u002Fexamples\u002Fevents","fr\u002F3.examples\u002F3.events","i-lucide-zap",{"title":50,"path":87,"stem":88,"icon":53},"\u002Ffr\u002Fexamples\u002Fembeds","fr\u002F3.examples\u002F4.embeds",{"title":90,"path":91,"stem":92,"icon":93},"Module","\u002Ffr\u002Fexamples\u002Fmodule","fr\u002F3.examples\u002F5.module","i-lucide-code",{"title":95,"icon":6,"path":96,"stem":97,"children":98,"page":6},"CLI","\u002Ffr\u002Fcli","fr\u002F4.cli",[99,104,109,113,117],{"title":100,"path":101,"stem":102,"icon":103},"glyria init","\u002Ffr\u002Fcli\u002Finit","fr\u002F4.cli\u002F1.init","i-lucide-folder-plus",{"title":105,"path":106,"stem":107,"icon":108},"glyria generate","\u002Ffr\u002Fcli\u002Fgenerate","fr\u002F4.cli\u002F2.generate","i-lucide-refresh-cw",{"title":110,"path":111,"stem":112,"icon":85},"glyria dev","\u002Ffr\u002Fcli\u002Fdev","fr\u002F4.cli\u002F3.dev",{"title":114,"path":115,"stem":116,"icon":68},"glyria build","\u002Ffr\u002Fcli\u002Fbuild","fr\u002F4.cli\u002F4.build",{"title":118,"path":119,"stem":120,"icon":121},"glyria start","\u002Ffr\u002Fcli\u002Fstart","fr\u002F4.cli\u002F5.start","i-lucide-play",{"title":123,"icon":6,"path":124,"stem":125,"children":126,"page":6},"API Reference","\u002Ffr\u002Fapi-reference","fr\u002F5.api-reference",[127,131,135,139,143,146],{"title":128,"path":129,"stem":130,"icon":78},"GlyriaClient","\u002Ffr\u002Fapi-reference\u002Fglyria-client","fr\u002F5.api-reference\u002F1.glyria-client",{"title":132,"path":133,"stem":134,"icon":43},"GlyriaCommand","\u002Ffr\u002Fapi-reference\u002Fglyria-command","fr\u002F5.api-reference\u002F2.glyria-command",{"title":136,"path":137,"stem":138,"icon":48},"GlyriaEvent","\u002Ffr\u002Fapi-reference\u002Fglyria-event","fr\u002F5.api-reference\u002F3.glyria-event",{"title":140,"path":141,"stem":142,"icon":53},"EmbedV2Builder","\u002Ffr\u002Fapi-reference\u002Fembed-v2","fr\u002F5.api-reference\u002F4.embed-v2",{"title":55,"path":144,"stem":145,"icon":58},"\u002Ffr\u002Fapi-reference\u002Fglyria-bus","fr\u002F5.api-reference\u002F5.glyria-bus",{"title":147,"path":148,"stem":149,"icon":150},"defineGlyriaConfig","\u002Ffr\u002Fapi-reference\u002Fdefine-glyria-config","fr\u002F5.api-reference\u002F6.define-glyria-config","i-lucide-settings",{"id":152,"title":21,"body":153,"description":728,"extension":729,"links":730,"meta":731,"navigation":732,"path":22,"seo":733,"stem":23,"__hash__":734},"docs_fr\u002Ffr\u002F1.getting-started\u002F3.project-structure.md",{"type":154,"value":155,"toc":715},"minimark",[156,165,260,265,268,273,276,316,325,329,332,336,343,421,425,428,511,522,526,529,597,601,604,615,619,622,640,644,647,698,702,711],[157,158,159,160,164],"p",{},"Après avoir exécuté ",[161,162,163],"code",{},"npx glyria init",", votre projet ressemblera à ceci :",[166,167,172],"pre",{"className":168,"code":169,"language":170,"meta":171,"style":171},"language-txt shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","your-bot\u002F\n  src\u002F\n    commands\u002F\n    events\u002F\n    composables\u002F\n    utils\u002F\n    index.ts\n  .glyria\u002F\n    imports.d.ts\n  .env\n  .gitignore\n  tsconfig.json\n  glyria.config.ts\n  package.json\n","txt","",[161,173,174,182,188,194,200,206,212,218,224,230,236,242,248,254],{"__ignoreMap":171},[175,176,179],"span",{"class":177,"line":178},"line",1,[175,180,181],{},"your-bot\u002F\n",[175,183,185],{"class":177,"line":184},2,[175,186,187],{},"  src\u002F\n",[175,189,191],{"class":177,"line":190},3,[175,192,193],{},"    commands\u002F\n",[175,195,197],{"class":177,"line":196},4,[175,198,199],{},"    events\u002F\n",[175,201,203],{"class":177,"line":202},5,[175,204,205],{},"    composables\u002F\n",[175,207,209],{"class":177,"line":208},6,[175,210,211],{},"    utils\u002F\n",[175,213,215],{"class":177,"line":214},7,[175,216,217],{},"    index.ts\n",[175,219,221],{"class":177,"line":220},8,[175,222,223],{},"  .glyria\u002F\n",[175,225,227],{"class":177,"line":226},9,[175,228,229],{},"    imports.d.ts\n",[175,231,233],{"class":177,"line":232},10,[175,234,235],{},"  .env\n",[175,237,239],{"class":177,"line":238},11,[175,240,241],{},"  .gitignore\n",[175,243,245],{"class":177,"line":244},12,[175,246,247],{},"  tsconfig.json\n",[175,249,251],{"class":177,"line":250},13,[175,252,253],{},"  glyria.config.ts\n",[175,255,257],{"class":177,"line":256},14,[175,258,259],{},"  package.json\n",[261,262,264],"h2",{"id":263},"src","src\u002F",[157,266,267],{},"Le dossier principal contenant le code source de votre bot.",[269,270,272],"h3",{"id":271},"srccommands","src\u002Fcommands\u002F",[157,274,275],{},"Toutes vos commandes slash se trouvent ici. glyria.js analyse récursivement ce dossier au démarrage et enregistre automatiquement chaque fichier.",[166,277,279],{"className":168,"code":278,"language":170,"meta":171,"style":171},"src\u002Fcommands\u002F\n  ping.ts\n  moderation\u002F\n    ban.ts\n    kick.ts\n  config\u002F\n    logs.ts\n",[161,280,281,286,291,296,301,306,311],{"__ignoreMap":171},[175,282,283],{"class":177,"line":178},[175,284,285],{},"src\u002Fcommands\u002F\n",[175,287,288],{"class":177,"line":184},[175,289,290],{},"  ping.ts\n",[175,292,293],{"class":177,"line":190},[175,294,295],{},"  moderation\u002F\n",[175,297,298],{"class":177,"line":196},[175,299,300],{},"    ban.ts\n",[175,302,303],{"class":177,"line":202},[175,304,305],{},"    kick.ts\n",[175,307,308],{"class":177,"line":208},[175,309,310],{},"  config\u002F\n",[175,312,313],{"class":177,"line":214},[175,314,315],{},"    logs.ts\n",[317,318,320,321,324],"tip",{"title":319},"Sous-dossiers comme catégories","Les sous-dossiers servent uniquement à l’organisation — chaque fichier ",[161,322,323],{},".ts",", peu importe sa profondeur, est chargé comme une commande.",[269,326,328],{"id":327},"srcevents","src\u002Fevents\u002F",[157,330,331],{},"Les listeners d’événements Discord. Chaque fichier gère un ou plusieurs événements discord.js.",[269,333,335],{"id":334},"srccomposables","src\u002Fcomposables\u002F",[157,337,338,339,342],{},"La logique métier et les utilitaires avec état. Les fichiers placés ici sont automatiquement disponibles globalement grâce aux auto-imports — aucun import manuel nécessaire. La convention est de préfixer les fonctions avec ",[161,340,341],{},"use",".",[166,344,348],{"className":345,"code":346,"language":347,"meta":171,"style":171},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F src\u002Fcomposables\u002FuseModeration.ts\nexport const useModeration = () => {\n  \u002F\u002F logique de ban, logique de kick, etc.\n}\n\n\u002F\u002F src\u002Fcommands\u002Fban.ts — aucun import requis\nconst moderation = useModeration()\n","ts",[161,349,350,356,383,388,393,399,404],{"__ignoreMap":171},[175,351,352],{"class":177,"line":178},[175,353,355],{"class":354},"sHwdD","\u002F\u002F src\u002Fcomposables\u002FuseModeration.ts\n",[175,357,358,362,366,370,374,377,380],{"class":177,"line":184},[175,359,361],{"class":360},"s7zQu","export",[175,363,365],{"class":364},"spNyl"," const",[175,367,369],{"class":368},"sTEyZ"," useModeration ",[175,371,373],{"class":372},"sMK4o","=",[175,375,376],{"class":372}," ()",[175,378,379],{"class":364}," =>",[175,381,382],{"class":372}," {\n",[175,384,385],{"class":177,"line":190},[175,386,387],{"class":354},"  \u002F\u002F logique de ban, logique de kick, etc.\n",[175,389,390],{"class":177,"line":196},[175,391,392],{"class":372},"}\n",[175,394,395],{"class":177,"line":202},[175,396,398],{"emptyLinePlaceholder":397},true,"\n",[175,400,401],{"class":177,"line":208},[175,402,403],{"class":354},"\u002F\u002F src\u002Fcommands\u002Fban.ts — aucun import requis\n",[175,405,406,409,412,414,418],{"class":177,"line":214},[175,407,408],{"class":364},"const",[175,410,411],{"class":368}," moderation ",[175,413,373],{"class":372},[175,415,417],{"class":416},"s2Zo4"," useModeration",[175,419,420],{"class":368},"()\n",[269,422,424],{"id":423},"srcutils","src\u002Futils\u002F",[157,426,427],{},"Fonctions pures sans dépendances ni effets de bord. Les fichiers placés ici sont également auto-importés globalement.",[166,429,431],{"className":345,"code":430,"language":347,"meta":171,"style":171},"\u002F\u002F src\u002Futils\u002FformatDate.ts\nexport const formatDate = (date: Date) => {\n  \u002F\u002F ...\n}\n\n\u002F\u002F src\u002Fcommands\u002Fping.ts — aucun import requis\nconst formatted = formatDate(new Date())\n",[161,432,433,438,470,475,479,483,488],{"__ignoreMap":171},[175,434,435],{"class":177,"line":178},[175,436,437],{"class":354},"\u002F\u002F src\u002Futils\u002FformatDate.ts\n",[175,439,440,442,444,447,449,452,456,459,463,466,468],{"class":177,"line":184},[175,441,361],{"class":360},[175,443,365],{"class":364},[175,445,446],{"class":368}," formatDate ",[175,448,373],{"class":372},[175,450,451],{"class":372}," (",[175,453,455],{"class":454},"sHdIc","date",[175,457,458],{"class":372},":",[175,460,462],{"class":461},"sBMFI"," Date",[175,464,465],{"class":372},")",[175,467,379],{"class":364},[175,469,382],{"class":372},[175,471,472],{"class":177,"line":190},[175,473,474],{"class":354},"  \u002F\u002F ...\n",[175,476,477],{"class":177,"line":196},[175,478,392],{"class":372},[175,480,481],{"class":177,"line":202},[175,482,398],{"emptyLinePlaceholder":397},[175,484,485],{"class":177,"line":208},[175,486,487],{"class":354},"\u002F\u002F src\u002Fcommands\u002Fping.ts — aucun import requis\n",[175,489,490,492,495,497,500,503,506,508],{"class":177,"line":214},[175,491,408],{"class":364},[175,493,494],{"class":368}," formatted ",[175,496,373],{"class":372},[175,498,499],{"class":416}," formatDate",[175,501,502],{"class":368},"(",[175,504,505],{"class":372},"new",[175,507,462],{"class":416},[175,509,510],{"class":368},"())\n",[317,512,514,517,518,521],{"title":513},"composables\u002F vs utils\u002F",[161,515,516],{},"utils\u002F"," est destiné aux fonctions pures sans dépendances — formatage, parsing, calculs, etc. ",[161,519,520],{},"composables\u002F"," est destiné à la logique qui interagit avec la base de données, Discord ou d’autres services.",[269,523,525],{"id":524},"srcindexts","src\u002Findex.ts",[157,527,528],{},"Le point d’entrée de votre bot. Minimaliste par conception :",[166,530,532],{"className":345,"code":531,"language":347,"meta":171,"style":171},"const client = new GlyriaClient({\n  intents: [GatewayIntentBits.Guilds]\n})\n\nawait client.login()\n",[161,533,534,554,570,578,582],{"__ignoreMap":171},[175,535,536,538,541,543,546,549,551],{"class":177,"line":178},[175,537,408],{"class":364},[175,539,540],{"class":368}," client ",[175,542,373],{"class":372},[175,544,545],{"class":372}," new",[175,547,548],{"class":416}," GlyriaClient",[175,550,502],{"class":368},[175,552,553],{"class":372},"{\n",[175,555,556,560,562,565,567],{"class":177,"line":184},[175,557,559],{"class":558},"swJcz","  intents",[175,561,458],{"class":372},[175,563,564],{"class":368}," [GatewayIntentBits",[175,566,342],{"class":372},[175,568,569],{"class":368},"Guilds]\n",[175,571,572,575],{"class":177,"line":190},[175,573,574],{"class":372},"}",[175,576,577],{"class":368},")\n",[175,579,580],{"class":177,"line":196},[175,581,398],{"emptyLinePlaceholder":397},[175,583,584,587,590,592,595],{"class":177,"line":202},[175,585,586],{"class":360},"await",[175,588,589],{"class":368}," client",[175,591,342],{"class":372},[175,593,594],{"class":416},"login",[175,596,420],{"class":368},[261,598,600],{"id":599},"glyria",".glyria\u002F",[157,602,603],{},"Généré automatiquement par glyria.js. Contient les fichiers de déclaration TypeScript pour les auto-imports.",[605,606,608,609,611,612,614],"warning",{"title":607},"Ne pas modifier","Ce dossier est régénéré à chaque exécution de ",[161,610,105],{}," ou ",[161,613,110],{},". Toute modification manuelle sera écrasée.",[261,616,618],{"id":617},"env",".env",[157,620,621],{},"Variables d’environnement de votre bot. glyria.js charge automatiquement ce fichier au démarrage.",[166,623,627],{"className":624,"code":625,"language":626,"meta":171,"style":171},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","TOKEN=your_bot_token_here\n","bash",[161,628,629],{"__ignoreMap":171},[175,630,631,634,636],{"class":177,"line":178},[175,632,633],{"class":368},"TOKEN",[175,635,373],{"class":372},[175,637,639],{"class":638},"sfazB","your_bot_token_here\n",[261,641,643],{"id":642},"glyriaconfigts","glyria.config.ts",[157,645,646],{},"Configuration globale de votre bot — thème, paramètres par défaut des embeds, et plus encore.",[166,648,650],{"className":345,"code":649,"language":347,"meta":171,"style":171},"export default defineGlyriaConfig({\n  modules: [\"@glyria\u002Ftimers\"]\n  ...\n})\n",[161,651,652,666,687,692],{"__ignoreMap":171},[175,653,654,656,659,662,664],{"class":177,"line":178},[175,655,361],{"class":360},[175,657,658],{"class":360}," default",[175,660,661],{"class":416}," defineGlyriaConfig",[175,663,502],{"class":368},[175,665,553],{"class":372},[175,667,668,671,673,676,679,682,684],{"class":177,"line":184},[175,669,670],{"class":558},"  modules",[175,672,458],{"class":372},[175,674,675],{"class":368}," [",[175,677,678],{"class":372},"\"",[175,680,681],{"class":638},"@glyria\u002Ftimers",[175,683,678],{"class":372},[175,685,686],{"class":368},"]\n",[175,688,689],{"class":177,"line":190},[175,690,691],{"class":372},"  ...\n",[175,693,694,696],{"class":177,"line":196},[175,695,574],{"class":372},[175,697,577],{"class":368},[261,699,701],{"id":700},"tsconfigjson","tsconfig.json",[157,703,704,705,707,708,710],{},"Préconfiguré par ",[161,706,163],{},". Inclut le dossier ",[161,709,600],{}," pour la résolution des types liés aux auto-imports.",[712,713,714],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":171,"searchDepth":184,"depth":184,"links":716},[717,724,725,726,727],{"id":263,"depth":184,"text":264,"children":718},[719,720,721,722,723],{"id":271,"depth":190,"text":272},{"id":327,"depth":190,"text":328},{"id":334,"depth":190,"text":335},{"id":423,"depth":190,"text":424},{"id":524,"depth":190,"text":525},{"id":599,"depth":184,"text":600},{"id":617,"depth":184,"text":618},{"id":642,"depth":184,"text":643},{"id":700,"depth":184,"text":701},"Vue d’ensemble de la structure de dossiers générée par glyria.js.","md",null,{},{"icon":24},{"title":21,"description":728},"aeC1Xm6C65U6qXaWFyxpTWHZggsPhcnj0nua7-obFxQ",[736,738],{"title":16,"path":17,"stem":18,"description":737,"icon":19,"children":-1},"Installez glyria.js et générez votre premier bot Discord en quelques secondes.",{"title":26,"path":27,"stem":28,"description":739,"icon":24,"children":-1},"Vue d’ensemble de la structure de dossiers attendue pour un module Glyria.",1779887240527]