[{"data":1,"prerenderedAt":747},["ShallowReactive",2],{"navigation_docs_fr":3,"-fr-getting-started-module-structure":151,"-fr-getting-started-module-structure-surround":742},[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":26,"body":153,"description":735,"extension":736,"links":737,"meta":738,"navigation":739,"path":27,"seo":740,"stem":28,"__hash__":741},"docs_fr\u002Ffr\u002F1.getting-started\u002F4.module-structure.md",{"type":154,"value":155,"toc":727},"minimark",[156,165,234,239,256,294,298,305,340,345,349,355,379,383,386,453,533,543,547,558,675,684,688,700,723],[157,158,159,160,164],"p",{},"Un module Glyria est un package NPM standard qui suit une structure de dossiers spécifique. Lorsqu’il est déclaré dans ",[161,162,163],"code",{},"glyria.config.ts",", Glyria découvre et charge automatiquement ses commandes et événements.",[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","@glyria\u002Fyour-module\u002F\n  src\u002F\n    commands\u002F\n    events\u002F\n    index.ts\n  dist\u002F\n    commands\u002F\n    events\u002F\n    index.js\n  package.json\n","txt","",[161,173,174,182,188,194,200,206,212,217,222,228],{"__ignoreMap":171},[175,176,179],"span",{"class":177,"line":178},"line",1,[175,180,181],{},"@glyria\u002Fyour-module\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],{},"    index.ts\n",[175,207,209],{"class":177,"line":208},6,[175,210,211],{},"  dist\u002F\n",[175,213,215],{"class":177,"line":214},7,[175,216,193],{},[175,218,220],{"class":177,"line":219},8,[175,221,199],{},[175,223,225],{"class":177,"line":224},9,[175,226,227],{},"    index.js\n",[175,229,231],{"class":177,"line":230},10,[175,232,233],{},"  package.json\n",[235,236,238],"h2",{"id":237},"dist-vs-src","dist\u002F vs src\u002F",[157,240,241,242,245,246,249,250,252,253,255],{},"Glyria privilégie toujours ",[161,243,244],{},"dist\u002F"," par rapport à ",[161,247,248],{},"src\u002F",". Si ",[161,251,244],{}," existe, il est utilisé — sinon Glyria utilise ",[161,254,248],{}," comme fallback.",[257,258,259,272],"table",{},[260,261,262],"thead",{},[263,264,265,269],"tr",{},[266,267,268],"th",{},"Dossier",[266,270,271],{},"Utilisé lorsque",[273,274,275,285],"tbody",{},[263,276,277,282],{},[278,279,280],"td",{},[161,281,244],{},[278,283,284],{},"Le package est buildé (production)",[263,286,287,291],{},[278,288,289],{},[161,290,248],{},[278,292,293],{},"Le package n’est pas encore buildé (dev local)",[235,295,297],{"id":296},"commands","commands\u002F",[157,299,300,301,304],{},"Les commandes slash exposées par le module. Glyria analyse récursivement ce dossier et charge chaque fichier, exactement comme votre propre ",[161,302,303],{},"src\u002Fcommands\u002F",".",[166,306,308],{"className":168,"code":307,"language":170,"meta":171,"style":171},"dist\u002F\n  commands\u002F\n    ban.js\n    kick.js\n    config\u002F\n      logs.js\n",[161,309,310,315,320,325,330,335],{"__ignoreMap":171},[175,311,312],{"class":177,"line":178},[175,313,314],{},"dist\u002F\n",[175,316,317],{"class":177,"line":184},[175,318,319],{},"  commands\u002F\n",[175,321,322],{"class":177,"line":190},[175,323,324],{},"    ban.js\n",[175,326,327],{"class":177,"line":196},[175,328,329],{},"    kick.js\n",[175,331,332],{"class":177,"line":202},[175,333,334],{},"    config\u002F\n",[175,336,337],{"class":177,"line":208},[175,338,339],{},"      logs.js\n",[341,342,344],"tip",{"title":343},"Sous-dossiers","Les sous-dossiers servent uniquement à l’organisation — chaque fichier, peu importe sa profondeur, est chargé comme une commande.",[235,346,348],{"id":347},"events","events\u002F",[157,350,351,352,304],{},"Les listeners d’événements Discord exposés par le module. Chargés en même temps que vos propres ",[161,353,354],{},"src\u002Fevents\u002F",[166,356,358],{"className":168,"code":357,"language":170,"meta":171,"style":171},"dist\u002F\n  events\u002F\n    guildMemberAdd.js\n    messageCreate.js\n",[161,359,360,364,369,374],{"__ignoreMap":171},[175,361,362],{"class":177,"line":178},[175,363,314],{},[175,365,366],{"class":177,"line":184},[175,367,368],{},"  events\u002F\n",[175,370,371],{"class":177,"line":190},[175,372,373],{},"    guildMemberAdd.js\n",[175,375,376],{"class":177,"line":196},[175,377,378],{},"    messageCreate.js\n",[235,380,382],{"id":381},"indexts","index.ts",[157,384,385],{},"Le point d’entrée principal du module. Tous les exports de ce fichier sont automatiquement disponibles dans le projet de l’utilisateur sous le namespace du module — aucun import requis.",[166,387,391],{"className":388,"code":389,"language":390,"meta":171,"style":171},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F @glyria\u002Ftimers — src\u002Findex.ts\nexport const createJob = () => { ... }\nexport const deleteJob = () => { ... }\n","ts",[161,392,393,399,432],{"__ignoreMap":171},[175,394,395],{"class":177,"line":178},[175,396,398],{"class":397},"sHwdD","\u002F\u002F @glyria\u002Ftimers — src\u002Findex.ts\n",[175,400,401,405,409,413,417,420,423,426,429],{"class":177,"line":184},[175,402,404],{"class":403},"s7zQu","export",[175,406,408],{"class":407},"spNyl"," const",[175,410,412],{"class":411},"sTEyZ"," createJob ",[175,414,416],{"class":415},"sMK4o","=",[175,418,419],{"class":415}," ()",[175,421,422],{"class":407}," =>",[175,424,425],{"class":415}," {",[175,427,428],{"class":415}," ...",[175,430,431],{"class":415}," }\n",[175,433,434,436,438,441,443,445,447,449,451],{"class":177,"line":190},[175,435,404],{"class":403},[175,437,408],{"class":407},[175,439,440],{"class":411}," deleteJob ",[175,442,416],{"class":415},[175,444,419],{"class":415},[175,446,422],{"class":407},[175,448,425],{"class":415},[175,450,428],{"class":415},[175,452,431],{"class":415},[166,454,456],{"className":388,"code":455,"language":390,"meta":171,"style":171},"\u002F\u002F Dans le projet de l'utilisateur — aucun import requis\nconst job = Timers.createJob(() => {\n    console.log(\"runs every minute\")\n}, \"* * * * *\")\n",[161,457,458,463,493,518],{"__ignoreMap":171},[175,459,460],{"class":177,"line":178},[175,461,462],{"class":397},"\u002F\u002F Dans le projet de l'utilisateur — aucun import requis\n",[175,464,465,468,471,473,476,478,482,485,488,490],{"class":177,"line":184},[175,466,467],{"class":407},"const",[175,469,470],{"class":411}," job ",[175,472,416],{"class":415},[175,474,475],{"class":411}," Timers",[175,477,304],{"class":415},[175,479,481],{"class":480},"s2Zo4","createJob",[175,483,484],{"class":411},"(",[175,486,487],{"class":415},"()",[175,489,422],{"class":407},[175,491,492],{"class":415}," {\n",[175,494,495,498,500,503,506,509,513,515],{"class":177,"line":190},[175,496,497],{"class":411},"    console",[175,499,304],{"class":415},[175,501,502],{"class":480},"log",[175,504,484],{"class":505},"swJcz",[175,507,508],{"class":415},"\"",[175,510,512],{"class":511},"sfazB","runs every minute",[175,514,508],{"class":415},[175,516,517],{"class":505},")\n",[175,519,520,523,526,529,531],{"class":177,"line":196},[175,521,522],{"class":415},"},",[175,524,525],{"class":415}," \"",[175,527,528],{"class":511},"* * * * *",[175,530,508],{"class":415},[175,532,517],{"class":411},[157,534,535,536,539,540,304],{},"Le namespace est dérivé du nom du package en PascalCase — ",[161,537,538],{},"@glyria\u002Ftimers"," → ",[161,541,542],{},"Timers",[235,544,546],{"id":545},"packagejson","package.json",[157,548,549,550,553,554,557],{},"Le champ ",[161,551,552],{},"main"," doit pointer vers le point d’entrée buildé de votre module. Il est recommandé de déclarer ",[161,555,556],{},"@glyria\u002Fbot"," comme peer dependency afin d’éviter d’embarquer plusieurs instances du framework dans le projet de l’utilisateur.",[166,559,563],{"className":560,"code":561,"language":562,"meta":171,"style":171},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"name\": \"@glyria\u002Fyour-module\",\n  \"main\": \".\u002Fdist\u002Findex.js\",\n  \"types\": \".\u002Fdist\u002Findex.d.ts\",\n  \"peerDependencies\": {\n    \"@glyria\u002Fbot\": \"*\"\n  }\n}\n","json",[161,564,565,570,593,612,632,645,665,670],{"__ignoreMap":171},[175,566,567],{"class":177,"line":178},[175,568,569],{"class":415},"{\n",[175,571,572,575,578,580,583,585,588,590],{"class":177,"line":184},[175,573,574],{"class":415},"  \"",[175,576,577],{"class":407},"name",[175,579,508],{"class":415},[175,581,582],{"class":415},":",[175,584,525],{"class":415},[175,586,587],{"class":511},"@glyria\u002Fyour-module",[175,589,508],{"class":415},[175,591,592],{"class":415},",\n",[175,594,595,597,599,601,603,605,608,610],{"class":177,"line":190},[175,596,574],{"class":415},[175,598,552],{"class":407},[175,600,508],{"class":415},[175,602,582],{"class":415},[175,604,525],{"class":415},[175,606,607],{"class":511},".\u002Fdist\u002Findex.js",[175,609,508],{"class":415},[175,611,592],{"class":415},[175,613,614,616,619,621,623,625,628,630],{"class":177,"line":196},[175,615,574],{"class":415},[175,617,618],{"class":407},"types",[175,620,508],{"class":415},[175,622,582],{"class":415},[175,624,525],{"class":415},[175,626,627],{"class":511},".\u002Fdist\u002Findex.d.ts",[175,629,508],{"class":415},[175,631,592],{"class":415},[175,633,634,636,639,641,643],{"class":177,"line":202},[175,635,574],{"class":415},[175,637,638],{"class":407},"peerDependencies",[175,640,508],{"class":415},[175,642,582],{"class":415},[175,644,492],{"class":415},[175,646,647,650,653,655,657,659,662],{"class":177,"line":208},[175,648,649],{"class":415},"    \"",[175,651,556],{"class":652},"sBMFI",[175,654,508],{"class":415},[175,656,582],{"class":415},[175,658,525],{"class":415},[175,660,661],{"class":511},"*",[175,663,664],{"class":415},"\"\n",[175,666,667],{"class":177,"line":214},[175,668,669],{"class":415},"  }\n",[175,671,672],{"class":177,"line":219},[175,673,674],{"class":415},"}\n",[341,676,677,678,680,681,683],{"title":638},"Utiliser ",[161,679,638],{}," permet au module de réutiliser l’instance de ",[161,682,556],{}," déjà installée dans le projet de l’utilisateur, au lieu d’embarquer sa propre copie.",[235,685,687],{"id":686},"exemple-minimal","Exemple minimal",[157,689,690,691,693,694,696,697,699],{},"Un module n’a pas besoin d’avoir à la fois ",[161,692,297],{}," et ",[161,695,348],{},". Si un dossier n’existe pas, Glyria l’ignore silencieusement. Un module qui expose uniquement des fonctions utilitaires via son ",[161,698,382],{}," est totalement valide.",[166,701,703],{"className":168,"code":702,"language":170,"meta":171,"style":171},"@glyria\u002Ftimers\u002F\n  dist\u002F\n    index.js    ← uniquement des exports, aucune commande ni événement\n  package.json\n",[161,704,705,710,714,719],{"__ignoreMap":171},[175,706,707],{"class":177,"line":178},[175,708,709],{},"@glyria\u002Ftimers\u002F\n",[175,711,712],{"class":177,"line":184},[175,713,211],{},[175,715,716],{"class":177,"line":190},[175,717,718],{},"    index.js    ← uniquement des exports, aucune commande ni événement\n",[175,720,721],{"class":177,"line":196},[175,722,233],{},[724,725,726],"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 .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}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":171,"searchDepth":184,"depth":184,"links":728},[729,730,731,732,733,734],{"id":237,"depth":184,"text":238},{"id":296,"depth":184,"text":297},{"id":347,"depth":184,"text":348},{"id":381,"depth":184,"text":382},{"id":545,"depth":184,"text":546},{"id":686,"depth":184,"text":687},"Vue d’ensemble de la structure de dossiers attendue pour un module Glyria.","md",null,{},{"icon":24},{"title":26,"description":735},"RjQQg1ra3lRoLKlUalv7pAxed9-wAiBr0FLG_iJAng4",[743,745],{"title":21,"path":22,"stem":23,"description":744,"icon":24,"children":-1},"Vue d’ensemble de la structure de dossiers générée par glyria.js.",{"title":30,"path":31,"stem":32,"description":746,"icon":33,"children":-1},"Utilisez les utilitaires de glyria.js partout sans écrire une seule instruction d’import.",1779887240527]