mirror of
https://github.com/sern-handler/website
synced 2026-06-24 08:42:31 +00:00
72 lines
86 KiB
XML
72 lines
86 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<feed xmlns="http://www.w3.org/2005/Atom">
|
||
<id>https://sern-handler.js.org/blog</id>
|
||
<title>sern - Handlers. Redefined. Blog</title>
|
||
<updated>2022-12-13T00:00:00.000Z</updated>
|
||
<generator>https://github.com/jpmonette/feed</generator>
|
||
<link rel="alternate" href="https://sern-handler.js.org/blog"/>
|
||
<subtitle>sern - Handlers. Redefined. Blog</subtitle>
|
||
<icon>https://sern-handler.js.org/img/favicon.ico</icon>
|
||
<entry>
|
||
<title type="html"><![CDATA[Release 2.0.0]]></title>
|
||
<id>2.0.0</id>
|
||
<link href="https://sern-handler.js.org/blog/2.0.0"/>
|
||
<updated>2022-12-13T00:00:00.000Z</updated>
|
||
<summary type="html"><![CDATA[2.0 Release]]></summary>
|
||
<content type="html"><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="20-release">2.0 Release<a class="hash-link" href="#20-release" title="Direct link to heading"></a></h2><p>Join our <a href="https://sern.dev/discord" target="_blank" rel="noopener noreferrer">discord</a>! <br>
|
||
Wow! We're finally increasing our semantic versioning by +<code>1.7.9.</code> <br>
|
||
What does this mean?</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="plugin-support-for-event-modules">Plugin Support for Event Modules<a class="hash-link" href="#plugin-support-for-event-modules" title="Direct link to heading"></a></h3><p>You can now use plugins for event modules. Previous version would throw an error if the
|
||
<code>plugins</code> field was populated.</p><div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#403f53;--prism-background-color:#FBFBFB"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#403f53"><span class="token keyword" style="color:rgb(12, 150, 155)">export</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(153, 76, 195);font-style:italic">commandPlTest</span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(12, 150, 155)">:</span><span class="token plain"> SernEmitterPlugin </span><span class="token punctuation" style="color:rgb(153, 76, 195)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> type</span><span class="token operator" style="color:rgb(12, 150, 155)">:</span><span class="token plain"> PluginType</span><span class="token punctuation" style="color:rgb(153, 76, 195)">.</span><span class="token plain">Command</span><span class="token punctuation" style="color:rgb(153, 76, 195)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(153, 76, 195);font-style:italic">execute</span><span class="token operator" style="color:rgb(12, 150, 155)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token punctuation" style="color:rgb(153, 76, 195)">{</span><span class="token plain"> mod</span><span class="token punctuation" style="color:rgb(153, 76, 195)">}</span><span class="token punctuation" style="color:rgb(153, 76, 195)">,</span><span class="token plain"> controller</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(12, 150, 155)">=></span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">if</span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token plain">mod</span><span class="token punctuation" style="color:rgb(153, 76, 195)">.</span><span class="token plain">name </span><span class="token operator" style="color:rgb(12, 150, 155)">===</span><span class="token plain"> </span><span class="token string" style="color:rgb(72, 118, 214)">'module.register'</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token builtin" style="color:rgb(72, 118, 214)">console</span><span class="token punctuation" style="color:rgb(153, 76, 195)">.</span><span class="token function" style="color:rgb(153, 76, 195);font-style:italic">log</span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token string" style="color:rgb(72, 118, 214)">'Event Module created correctly'</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">return</span><span class="token plain"> controller</span><span class="token punctuation" style="color:rgb(153, 76, 195)">.</span><span class="token function" style="color:rgb(153, 76, 195);font-style:italic">next</span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token builtin" style="color:rgb(72, 118, 214)">console</span><span class="token punctuation" style="color:rgb(153, 76, 195)">.</span><span class="token function" style="color:rgb(153, 76, 195);font-style:italic">log</span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token string" style="color:rgb(72, 118, 214)">'event name is wrong'</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">return</span><span class="token plain"> controller</span><span class="token punctuation" style="color:rgb(153, 76, 195)">.</span><span class="token function" style="color:rgb(153, 76, 195);font-style:italic">stop</span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"></span><span class="token punctuation" style="color:rgb(153, 76, 195)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Applying this plugin to some <code>eventModule</code>: </p><div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#403f53;--prism-background-color:#FBFBFB"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#403f53"><span class="token keyword" style="color:rgb(12, 150, 155)">export</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">default</span><span class="token plain"> </span><span class="token function" style="color:rgb(153, 76, 195);font-style:italic">eventModule</span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token punctuation" style="color:rgb(153, 76, 195)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> name</span><span class="token operator" style="color:rgb(12, 150, 155)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(72, 118, 214)">'error'</span><span class="token punctuation" style="color:rgb(153, 76, 195)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> type</span><span class="token operator" style="color:rgb(12, 150, 155)">:</span><span class="token plain"> EventType</span><span class="token punctuation" style="color:rgb(153, 76, 195)">.</span><span class="token plain">Sern</span><span class="token punctuation" style="color:rgb(153, 76, 195)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> plugins</span><span class="token operator" style="color:rgb(12, 150, 155)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">[</span><span class="token function" style="color:rgb(153, 76, 195);font-style:italic">commandPlTest</span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><span class="token punctuation" style="color:rgb(153, 76, 195)">]</span><span class="token punctuation" style="color:rgb(153, 76, 195)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token function" style="color:rgb(153, 76, 195);font-style:italic">execute</span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token plain">m</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token builtin" style="color:rgb(72, 118, 214)">console</span><span class="token punctuation" style="color:rgb(153, 76, 195)">.</span><span class="token function" style="color:rgb(153, 76, 195);font-style:italic">log</span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token plain">m</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">}</span><span class="token punctuation" style="color:rgb(153, 76, 195)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"></span><span class="token punctuation" style="color:rgb(153, 76, 195)">}</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="dependency-injection-and-decoupling">Dependency Injection and Decoupling<a class="hash-link" href="#dependency-injection-and-decoupling" title="Direct link to heading"></a></h2><p>The powerful npm package <code>iti</code> decouples sern even more.
|
||
Decoupling data structures with the Inversion of Control pattern separates data from logic, which will help speed production
|
||
and make sern even more customizable than before.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="how-do-i-start">How do I start?<a class="hash-link" href="#how-do-i-start" title="Direct link to heading"></a></h3><div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#403f53;--prism-background-color:#FBFBFB"><div class="codeBlockTitle_Ktv7">src/index.ts</div><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#403f53"><span class="token comment" style="color:rgb(152, 159, 177);font-style:italic">//With typescript, you can customize / augment your typings.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"></span><span class="token keyword" style="color:rgb(12, 150, 155)">interface</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(17, 17, 17)">MyDependencies</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(17, 17, 17)">Dependencies</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token string-property property" style="color:rgb(12, 150, 155)">'@sern/client'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(12, 150, 155)">:</span><span class="token plain"> Singleton</span><span class="token operator" style="color:rgb(12, 150, 155)"><</span><span class="token plain">Client</span><span class="token operator" style="color:rgb(12, 150, 155)">></span><span class="token punctuation" style="color:rgb(153, 76, 195)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token string-property property" style="color:rgb(12, 150, 155)">'@sern/logger'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(12, 150, 155)">:</span><span class="token plain"> Singleton</span><span class="token operator" style="color:rgb(12, 150, 155)"><</span><span class="token plain">DefaultLogging</span><span class="token operator" style="color:rgb(12, 150, 155)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"></span><span class="token punctuation" style="color:rgb(153, 76, 195)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"></span><span class="token keyword" style="color:rgb(12, 150, 155)">export</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">const</span><span class="token plain"> useContainer </span><span class="token operator" style="color:rgb(12, 150, 155)">=</span><span class="token plain"> Sern</span><span class="token punctuation" style="color:rgb(153, 76, 195)">.</span><span class="token generic-function function" style="color:rgb(153, 76, 195);font-style:italic">makeDependencies</span><span class="token generic-function generic class-name operator" style="color:rgb(12, 150, 155)"><</span><span class="token generic-function generic class-name" style="color:rgb(17, 17, 17)">MyDependencies</span><span class="token generic-function generic class-name operator" style="color:rgb(12, 150, 155)">></span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token punctuation" style="color:rgb(153, 76, 195)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"></span><span class="token comment" style="color:rgb(152, 159, 177);font-style:italic">// exclude: new Set(['@sern/logger']), don't autofill optional dependencies</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(153, 76, 195);font-style:italic">build</span><span class="token operator" style="color:rgb(12, 150, 155)">:</span><span class="token plain"> root </span><span class="token operator" style="color:rgb(12, 150, 155)">=></span><span class="token plain"> root</span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">.</span><span class="token function" style="color:rgb(153, 76, 195);font-style:italic">add</span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token punctuation" style="color:rgb(153, 76, 195)">{</span><span class="token plain"> </span><span class="token string-property property" style="color:rgb(12, 150, 155)">'@sern/client'</span><span class="token operator" style="color:rgb(12, 150, 155)">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(153, 76, 195);font-style:italic">single</span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token plain">client</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">}</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">.</span><span class="token function" style="color:rgb(153, 76, 195);font-style:italic">add</span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token punctuation" style="color:rgb(153, 76, 195)">{</span><span class="token plain"> </span><span class="token string-property property" style="color:rgb(12, 150, 155)">'@sern/logger'</span><span class="token operator" style="color:rgb(12, 150, 155)">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(153, 76, 195);font-style:italic">single</span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token keyword" style="color:rgb(12, 150, 155)">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(17, 17, 17)">DefaultLogging</span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">}</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"></span><span class="token punctuation" style="color:rgb(153, 76, 195)">}</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><span class="token punctuation" style="color:rgb(153, 76, 195)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain">Sern</span><span class="token punctuation" style="color:rgb(153, 76, 195)">.</span><span class="token function" style="color:rgb(153, 76, 195);font-style:italic">init</span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token punctuation" style="color:rgb(153, 76, 195)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> defaultPrefix</span><span class="token operator" style="color:rgb(12, 150, 155)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(72, 118, 214)">'!'</span><span class="token punctuation" style="color:rgb(153, 76, 195)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(152, 159, 177);font-style:italic">// removing defaultPrefix will shut down text commands</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> commands</span><span class="token operator" style="color:rgb(12, 150, 155)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(72, 118, 214)">'src/commands'</span><span class="token punctuation" style="color:rgb(153, 76, 195)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token comment" style="color:rgb(152, 159, 177);font-style:italic">// events: 'src/events' (optional),</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> containerConfig </span><span class="token operator" style="color:rgb(12, 150, 155)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> get</span><span class="token operator" style="color:rgb(12, 150, 155)">:</span><span class="token plain"> useContainer </span><span class="token comment" style="color:rgb(152, 159, 177);font-style:italic">//pass in your dependency getter here</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"></span><span class="token punctuation" style="color:rgb(153, 76, 195)">}</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><span class="token punctuation" style="color:rgb(153, 76, 195)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Using the <code>Sern#makeDependencies</code> function, inject your dependencies.
|
||
We'll use specific dependencies that are created with the <code>@sern/keyword</code>
|
||
key.
|
||
Using typescript to display all <code>keywords</code> and what they represent:</p><div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#403f53;--prism-background-color:#FBFBFB"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#403f53"><span class="token keyword" style="color:rgb(12, 150, 155)">export</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">interface</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(17, 17, 17)">Dependencies</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token string-property property" style="color:rgb(12, 150, 155)">'@sern/client'</span><span class="token operator" style="color:rgb(12, 150, 155)">:</span><span class="token plain"> Singleton</span><span class="token operator" style="color:rgb(12, 150, 155)"><</span><span class="token plain">EventEmitter</span><span class="token operator" style="color:rgb(12, 150, 155)">></span><span class="token punctuation" style="color:rgb(153, 76, 195)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(152, 159, 177);font-style:italic">//Discord Client</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token string" style="color:rgb(72, 118, 214)">'@sern/logger'</span><span class="token operator" style="color:rgb(12, 150, 155)">?</span><span class="token operator" style="color:rgb(12, 150, 155)">:</span><span class="token plain"> Singleton</span><span class="token operator" style="color:rgb(12, 150, 155)"><</span><span class="token plain">Logging</span><span class="token operator" style="color:rgb(12, 150, 155)">></span><span class="token punctuation" style="color:rgb(153, 76, 195)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(152, 159, 177);font-style:italic">//Logger</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token string-property property" style="color:rgb(12, 150, 155)">'@sern/emitter'</span><span class="token operator" style="color:rgb(12, 150, 155)">:</span><span class="token plain"> Singleton</span><span class="token operator" style="color:rgb(12, 150, 155)"><</span><span class="token plain">SernEmitter</span><span class="token operator" style="color:rgb(12, 150, 155)">></span><span class="token punctuation" style="color:rgb(153, 76, 195)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(152, 159, 177);font-style:italic">//SernEmitter</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token string-property property" style="color:rgb(12, 150, 155)">'@sern/store'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(12, 150, 155)">:</span><span class="token plain"> Singleton</span><span class="token operator" style="color:rgb(12, 150, 155)"><</span><span class="token plain">ModuleStore</span><span class="token operator" style="color:rgb(12, 150, 155)">></span><span class="token punctuation" style="color:rgb(153, 76, 195)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(152, 159, 177);font-style:italic">//Stores all Command Modules</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token string-property property" style="color:rgb(12, 150, 155)">'@sern/modules'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(12, 150, 155)">:</span><span class="token plain"> Singleton</span><span class="token operator" style="color:rgb(12, 150, 155)"><</span><span class="token plain">ModuleManager</span><span class="token operator" style="color:rgb(12, 150, 155)">></span><span class="token punctuation" style="color:rgb(153, 76, 195)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(152, 159, 177);font-style:italic">//Manages Modules</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token string-property property" style="color:rgb(12, 150, 155)">'@sern/errors'</span><span class="token operator" style="color:rgb(12, 150, 155)">:</span><span class="token plain"> Singleton</span><span class="token operator" style="color:rgb(12, 150, 155)"><</span><span class="token plain">ErrorHandling</span><span class="token operator" style="color:rgb(12, 150, 155)">></span><span class="token punctuation" style="color:rgb(153, 76, 195)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(152, 159, 177);font-style:italic">//A Lifetime / Crash Handler</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"></span><span class="token punctuation" style="color:rgb(153, 76, 195)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><div class="theme-admonition theme-admonition-danger alert alert--danger admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"></path></svg></span>danger</div><div class="admonitionContent_S0QG"><p>Sern#addExternal has been deprecated and removed in favor of Sern#makeDependencies</p></div></div><p>At the moment, one optional dependency, <code>@sern/logger</code>, exists. If not added explicitly,
|
||
we'll <strong>autofill</strong> with a <a href="https://sern.dev/docs/api/classes/defaultlogging" target="_blank" rel="noopener noreferrer">DefaultLogger</a>.</p><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_S0QG"><p>If you don't want a logger, add it to the
|
||
<code>exclude</code> field while composing dependencies.</p></div></div><p>Use your generated dependency getter <code>useContainer</code> (use whatever name you want), access them
|
||
from anywhere.</p><div class="theme-admonition theme-admonition-note alert alert--secondary admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_S0QG"><p>the function <a href="https://sern.dev/docs/api/modules#usecontainerraw" target="_blank" rel="noopener noreferrer">useContainerRaw</a> is provided for direct access to dependencies and the internal
|
||
data structure. Use this wisely as no guarantees are made and crashes can happen.</p></div></div><p>The <code>build</code> field follows <a href="https://itijs.org/docs/quick-start#usage" target="_blank" rel="noopener noreferrer">createContainer</a> function call.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="new-commandtypes">New CommandTypes<a class="hash-link" href="#new-commandtypes" title="Direct link to heading"></a></h2><p>2.0 includes all the new role select menus. <code>CommandType.MenuSelect</code> has been renamed into
|
||
<code>CommandType.StringSelect</code>. The remaining SelectMenus are
|
||
<code>CommandType.RoleSelect</code>, <code>CommandType.ChannelSelect</code>, <code>CommandType.UserSelect</code>, <code>CommandType.MentionableSelect</code></p><div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#403f53;--prism-background-color:#FBFBFB"><div class="codeBlockTitle_Ktv7">commands/roleselect.ts</div><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#403f53"><span class="token keyword" style="color:rgb(12, 150, 155)">export</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">default</span><span class="token plain"> </span><span class="token function" style="color:rgb(153, 76, 195);font-style:italic">commandModule</span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token punctuation" style="color:rgb(153, 76, 195)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> type</span><span class="token operator" style="color:rgb(12, 150, 155)">:</span><span class="token plain"> CommandType</span><span class="token punctuation" style="color:rgb(153, 76, 195)">.</span><span class="token plain">RoleSelect</span><span class="token punctuation" style="color:rgb(153, 76, 195)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token function" style="color:rgb(153, 76, 195);font-style:italic">execute</span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token plain">ctx</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> ctx</span><span class="token punctuation" style="color:rgb(153, 76, 195)">.</span><span class="token function" style="color:rgb(153, 76, 195);font-style:italic">reply</span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token string" style="color:rgb(72, 118, 214)">'role select'</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">}</span><span class="token punctuation" style="color:rgb(153, 76, 195)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"></span><span class="token punctuation" style="color:rgb(153, 76, 195)">}</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>In addition, commandModules with ContextMenus have been renamed.</p><div class="language-diff codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#403f53;--prism-background-color:#FBFBFB"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-diff codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#403f53"><span class="token deleted-sign deleted prefix deleted" style="color:rgba(239, 83, 80, 0.56);font-style:italic">-</span><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"> CommandType.MenuUser, CommandType.MenuMsg </span><br></span><span class="token-line" style="color:#403f53"><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(72, 118, 214);font-style:italic">+</span><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"> CommandType.CtxUser, CommandType.CtxMsg</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="typings-simplification">Typings Simplification<a class="hash-link" href="#typings-simplification" title="Direct link to heading"></a></h2><p>Pre 2.0: </p><img loading="lazy" src="https://cdn.discordapp.com/attachments/820348341358952550/1038577974829666386/image.png" class="img_ev3q"><br> <br> <br>Post 2.0:<br><img loading="lazy" src="https://cdn.discordapp.com/attachments/820348341358952550/1052623728489550015/image.png" class="img_ev3q"><p>CommandPlugin<T<!-- -->><!-- --> and EventPlugin<T<!-- -->><!-- --> typings have also been static'ified, transformed from types to interfaces</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="breaking-changes">Breaking Changes<a class="hash-link" href="#breaking-changes" title="Direct link to heading"></a></h2><img loading="lazy" src="https://img.srizan.ml/Discord_z8Sn1UBfEe.png" class="img_ev3q"><br>All deprecation warnings from previous versions have taken effect, and are removed in 2.0.<div class="language-diff codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#403f53;--prism-background-color:#FBFBFB"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-diff codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#403f53"><span class="token deleted-sign deleted prefix deleted" style="color:rgba(239, 83, 80, 0.56);font-style:italic">-</span><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"> type Module = EventModule | CommandModule</span><br></span><span class="token-line" style="color:#403f53"><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(72, 118, 214);font-style:italic">+</span><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"> type AnyModule = EventModule | CommandModule</span><br></span><span class="token-line" style="color:#403f53"><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"></span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgba(239, 83, 80, 0.56);font-style:italic">-</span><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic">export type SpreadParams<T extends (...args: never) => unknown> = (</span><br></span><span class="token-line" style="color:#403f53"><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgba(239, 83, 80, 0.56);font-style:italic">-</span><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"> args: Parameters<T>[number],</span><br></span><span class="token-line" style="color:#403f53"><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgba(239, 83, 80, 0.56);font-style:italic">-</span><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"> ) => unknown;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Override type has been removed due to redundancy</p><div class="language-diff codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#403f53;--prism-background-color:#FBFBFB"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-diff codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#403f53"><span class="token deleted-sign deleted prefix deleted" style="color:rgba(239, 83, 80, 0.56);font-style:italic">-</span><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"> discord.js : 14.5</span><br></span><span class="token-line" style="color:#403f53"><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(72, 118, 214);font-style:italic">+</span><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"> discord.js : 14.7</span><br></span><span class="token-line" style="color:#403f53"><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"></span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgba(239, 83, 80, 0.56);font-style:italic">-</span><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic">typescript: 4.7</span><br></span><span class="token-line" style="color:#403f53"><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(72, 118, 214);font-style:italic">+</span><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"> typescript: 4.9</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><div class="language-diff codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#403f53;--prism-background-color:#FBFBFB"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-diff codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#403f53"><span class="token inserted-sign inserted prefix inserted" style="color:rgb(72, 118, 214);font-style:italic">+</span><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"> interface Wrapper {</span><br></span><span class="token-line" style="color:#403f53"><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(72, 118, 214);font-style:italic">+</span><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"> readonly defaultPrefix?: string;</span><br></span><span class="token-line" style="color:#403f53"><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(72, 118, 214);font-style:italic">+</span><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"> readonly commands: string;</span><br></span><span class="token-line" style="color:#403f53"><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(72, 118, 214);font-style:italic">+</span><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"> readonly events?: string;</span><br></span><span class="token-line" style="color:#403f53"><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(72, 118, 214);font-style:italic">+</span><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"> readonly containerConfig : {</span><br></span><span class="token-line" style="color:#403f53"><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(72, 118, 214);font-style:italic">+</span><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"> get: (...keys: (keyof Dependencies)[]) => unknown[];</span><br></span><span class="token-line" style="color:#403f53"><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(72, 118, 214);font-style:italic">+</span><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"> }</span><br></span><span class="token-line" style="color:#403f53"><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(72, 118, 214);font-style:italic">+</span><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic">}</span><br></span><span class="token-line" style="color:#403f53"><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"></span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgba(239, 83, 80, 0.56);font-style:italic">-</span><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"> interface Wrapper {</span><br></span><span class="token-line" style="color:#403f53"><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgba(239, 83, 80, 0.56);font-style:italic">-</span><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"> readonly client: Client;</span><br></span><span class="token-line" style="color:#403f53"><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgba(239, 83, 80, 0.56);font-style:italic">-</span><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"> readonly sernEmitter?: SernEmitter;</span><br></span><span class="token-line" style="color:#403f53"><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgba(239, 83, 80, 0.56);font-style:italic">-</span><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"> readonly defaultPrefix?: string;</span><br></span><span class="token-line" style="color:#403f53"><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgba(239, 83, 80, 0.56);font-style:italic">-</span><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"> readonly commands: string;</span><br></span><span class="token-line" style="color:#403f53"><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgba(239, 83, 80, 0.56);font-style:italic">-</span><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"> readonly events?:</span><br></span><span class="token-line" style="color:#403f53"><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgba(239, 83, 80, 0.56);font-style:italic">-</span><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"> | string</span><br></span><span class="token-line" style="color:#403f53"><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgba(239, 83, 80, 0.56);font-style:italic">-</span><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"> | { mod: EventModule; absPath: string }[]</span><br></span><span class="token-line" style="color:#403f53"><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgba(239, 83, 80, 0.56);font-style:italic">-</span><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"> | (() => { mod: EventModule; absPath: string }[]);</span><br></span><span class="token-line" style="color:#403f53"><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgba(239, 83, 80, 0.56);font-style:italic">-</span><span class="token deleted-sign deleted line" style="color:rgba(239, 83, 80, 0.56);font-style:italic">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><div class="language-diff codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#403f53;--prism-background-color:#FBFBFB"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-diff codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#403f53"><span class="token inserted-sign inserted prefix inserted" style="color:rgb(72, 118, 214);font-style:italic">+</span><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"> DefaultLogger</span><br></span><span class="token-line" style="color:#403f53"><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(72, 118, 214);font-style:italic">+</span><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"> DefaultModuleManager</span><br></span><span class="token-line" style="color:#403f53"><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(72, 118, 214);font-style:italic">+</span><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"> SernEmitter</span><br></span><span class="token-line" style="color:#403f53"><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(72, 118, 214);font-style:italic">+</span><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"> DefaultErrorHandling</span><br></span><span class="token-line" style="color:#403f53"><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(72, 118, 214);font-style:italic">+</span><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"> type Singleton<T> = () => T</span><br></span><span class="token-line" style="color:#403f53"><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(72, 118, 214);font-style:italic">+</span><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"> type Transient<T> = () => () => T; </span><br></span><span class="token-line" style="color:#403f53"><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(72, 118, 214);font-style:italic">+</span><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"> type LogPayload<T = unknown> = { message: T }</span><br></span><span class="token-line" style="color:#403f53"><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(72, 118, 214);font-style:italic">+</span><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"> export const single = <T>() => T</span><br></span><span class="token-line" style="color:#403f53"><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(72, 118, 214);font-style:italic">+</span><span class="token inserted-sign inserted line" style="color:rgb(72, 118, 214);font-style:italic"> export const many = <T>() => () => T</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Including the previous section, some names to symbols and data structures were altered to
|
||
be better represented. view <a href="/404.html">changelog</a></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="context-refactoring">Context refactoring<a class="hash-link" href="#context-refactoring" title="Direct link to heading"></a></h2><p>The context data structure has been internally altered to represent its dynamics better.</p>]]></content>
|
||
<author>
|
||
<name>jacoobes</name>
|
||
<uri>https://github.com/jacoobes</uri>
|
||
</author>
|
||
<category label="release" term="release"/>
|
||
</entry>
|
||
<entry>
|
||
<title type="html"><![CDATA[How to get started with sern!]]></title>
|
||
<id>getting-started</id>
|
||
<link href="https://sern-handler.js.org/blog/getting-started"/>
|
||
<updated>2022-09-30T00:00:00.000Z</updated>
|
||
<summary type="html"><![CDATA[Hello everyone!]]></summary>
|
||
<content type="html"><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="hello-everyone">Hello everyone!<a class="hash-link" href="#hello-everyone" title="Direct link to heading"></a></h2><p>I'm Sr Izan, your fellow user and contributor.</p><p>Today I'm going to show you how to get started with sern and all its cool features.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="step-1-install-the-cli">Step 1: Install the CLI.<a class="hash-link" href="#step-1-install-the-cli" title="Direct link to heading"></a></h3><p>Install the CLI:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#403f53;--prism-background-color:#FBFBFB"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#403f53"><span class="token plain">npm i -g @sern/cli</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>and then run</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#403f53;--prism-background-color:#FBFBFB"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#403f53"><span class="token plain">sern init</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_S0QG"><p>You can also run <code>sern init -y</code> if you want to use the default options.</p></div></div><p>The CLI is written in Typescript and open-sourced on <a href="https://github.com/sern-handler/cli" target="_blank" rel="noopener noreferrer">Github</a>. (thanks <a href="https://github.com/EvolutionX-10" target="_blank" rel="noopener noreferrer">evo</a>!)</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="step-2-have-some-way-to-store-secrets">Step 2: Have some way to store secrets.<a class="hash-link" href="#step-2-have-some-way-to-store-secrets" title="Direct link to heading"></a></h3><p>Normally you'd need a way to store secrets, and the best way to do that is by installing another package: <code>dotenv</code></p><p>just <code>npm i dotenv</code> in the project folder and add <code>require('dotenv').config()</code> to your import section. Then, when you login, <code>process.env.TOKEN</code> (or however you have it named on your <code>.env</code> file) should do the trick.</p><div class="theme-admonition theme-admonition-caution alert alert--warning admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>caution</div><div class="admonitionContent_S0QG"><p>If you're using ESM, configure dotenv with <code>import 'dotenv/config'</code> instead of <code>require('dotenv').config()</code>.</p></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="and-thats-it">And... that's it?<a class="hash-link" href="#and-thats-it" title="Direct link to heading"></a></h3><p>Yes, that's it. Here's a little FAQ to get you started. You can also join the <a href="https://sern-handler.js.org/discord" target="_blank" rel="noopener noreferrer">Discord</a> for any problems.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="extra-video-tutorial">Extra: Video tutorial!<a class="hash-link" href="#extra-video-tutorial" title="Direct link to heading"></a></h3><video width="400" controls=""><source src="https://srizan.s-ul.eu/wtJBVsZU" type="video/mp4"></video><h2 class="anchor anchorWithStickyNavbar_LWe7" id="faq">FAQ<a class="hash-link" href="#faq" title="Direct link to heading"></a></h2><p><strong>Q</strong>: How do I publish a slash command?<br>
|
||
<strong>A</strong>: Install the publish extension. Little video: </p><video width="400" controls=""><source src="https://srizan.s-ul.eu/uHzPhfcS" type="video/mp4"></video><p><strong>Q</strong>: Any snippet VSCode extension?<br>
|
||
<strong>A</strong>: Yeah, just search <code>sern Snippets</code> made by a verified publisher called Sr Izan (haha yeah me funny!) </p><p><strong>Q</strong>: HEEEELLLPPPP!!!!<br>
|
||
<strong>A</strong>: Hey, don't panic! We're here to help so, join the <a href="https://sern-handler.js.org/discord" target="_blank" rel="noopener noreferrer">Discord</a>. We're trying to get to 100 members!</p>]]></content>
|
||
<author>
|
||
<name>Sr Izan</name>
|
||
<uri>https://github.com/SrIzan10</uri>
|
||
</author>
|
||
<category label="guides" term="guides"/>
|
||
</entry>
|
||
<entry>
|
||
<title type="html"><![CDATA[Release 1.2.0]]></title>
|
||
<id>1.2.0</id>
|
||
<link href="https://sern-handler.js.org/blog/1.2.0"/>
|
||
<updated>2022-09-28T00:00:00.000Z</updated>
|
||
<summary type="html"><![CDATA[Class-based modules]]></summary>
|
||
<content type="html"><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="class-based-modules">Class-based modules<a class="hash-link" href="#class-based-modules" title="Direct link to heading"></a></h2><p>Today we're announcing the ability to create class based modules!
|
||
To get started, install</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#403f53;--prism-background-color:#FBFBFB"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#403f53"><span class="token plain">npm install @sern/handler@latest</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Quick List of changes!</p><ul><li><a href="#class-based-modules">Class based modules</a></li><li><a href="#deprecation-warnings">Deprecation Warnings</a></li><li><a href="#dependencies-update">Dependencies update</a></li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="class-based-modules-1">Class based modules<a class="hash-link" href="#class-based-modules-1" title="Direct link to heading"></a></h3><p>Incorporate class based modules into your project instead of the traditional <code>commandModule</code> or <code>eventModule</code>
|
||
Extend the new <a href="/blog/docs/api/classes/CommandExecutable">CommandExecutable</a> or <a href="/blog/docs/api/classes/EventExecutable">EventExecutable</a></p><div class="language-ts codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#403f53;--prism-background-color:#FBFBFB"><div class="codeBlockTitle_Ktv7">commands/meaning-of-life.ts</div><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ts codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#403f53"><span class="token keyword" style="color:rgb(12, 150, 155)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">{</span><span class="token plain"> CommandType</span><span class="token punctuation" style="color:rgb(153, 76, 195)">,</span><span class="token plain"> CommandExecutable</span><span class="token punctuation" style="color:rgb(153, 76, 195)">,</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">type</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(17, 17, 17)">Args</span><span class="token punctuation" style="color:rgb(153, 76, 195)">,</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">type</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(17, 17, 17)">Context</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(72, 118, 214)">'@sern/handler'</span><span class="token punctuation" style="color:rgb(153, 76, 195)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"></span><span class="token keyword" style="color:rgb(12, 150, 155)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">{</span><span class="token plain"> publish </span><span class="token punctuation" style="color:rgb(153, 76, 195)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(72, 118, 214)">'../plugins/publish.js'</span><span class="token punctuation" style="color:rgb(153, 76, 195)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"></span><span class="token keyword" style="color:rgb(12, 150, 155)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">{</span><span class="token plain"> serendipityOnly </span><span class="token punctuation" style="color:rgb(153, 76, 195)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(72, 118, 214)">'../plugins/serendipityOnly.js'</span><span class="token punctuation" style="color:rgb(153, 76, 195)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"></span><span class="token keyword" style="color:rgb(12, 150, 155)">export</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">default</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">class</span><span class="token plain"> </span><span class="token class-name keyword" style="color:rgb(12, 150, 155)">extends</span><span class="token plain"> CommandExecutable</span><span class="token operator" style="color:rgb(12, 150, 155)"><</span><span class="token plain">CommandType</span><span class="token punctuation" style="color:rgb(153, 76, 195)">.</span><span class="token plain">Both</span><span class="token operator" style="color:rgb(12, 150, 155)">></span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> type </span><span class="token operator" style="color:rgb(12, 150, 155)">=</span><span class="token plain"> CommandType</span><span class="token punctuation" style="color:rgb(153, 76, 195)">.</span><span class="token plain">Both </span><span class="token keyword" style="color:rgb(12, 150, 155)">as</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">const</span><span class="token punctuation" style="color:rgb(153, 76, 195)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> description </span><span class="token operator" style="color:rgb(12, 150, 155)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(72, 118, 214)">'What is the meaning of life?'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> override onEvent </span><span class="token operator" style="color:rgb(12, 150, 155)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token function" style="color:rgb(153, 76, 195);font-style:italic">serendipityOnly</span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">]</span><span class="token punctuation" style="color:rgb(153, 76, 195)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> override plugins </span><span class="token operator" style="color:rgb(12, 150, 155)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token function" style="color:rgb(153, 76, 195);font-style:italic">publish</span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><span class="token punctuation" style="color:rgb(153, 76, 195)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">]</span><span class="token punctuation" style="color:rgb(153, 76, 195)">;</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:#403f53"><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(153, 76, 195);font-style:italic">execute</span><span class="token plain"> </span><span class="token operator" style="color:rgb(12, 150, 155)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">async</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token plain">ctx</span><span class="token operator" style="color:rgb(12, 150, 155)">:</span><span class="token plain"> Context</span><span class="token punctuation" style="color:rgb(153, 76, 195)">,</span><span class="token plain"> args</span><span class="token operator" style="color:rgb(12, 150, 155)">:</span><span class="token plain"> Args</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(12, 150, 155)">=></span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">await</span><span class="token plain"> ctx</span><span class="token punctuation" style="color:rgb(153, 76, 195)">.</span><span class="token function" style="color:rgb(153, 76, 195);font-style:italic">reply</span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token string" style="color:rgb(72, 118, 214)">'42'</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">}</span><span class="token punctuation" style="color:rgb(153, 76, 195)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"></span><span class="token punctuation" style="color:rgb(153, 76, 195)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><div class="theme-admonition theme-admonition-caution alert alert--warning admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>caution</div><div class="admonitionContent_S0QG"><p>execute must not be a method of the class. It should be as above, a property on the class!</p></div></div><div class="language-ts codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#403f53;--prism-background-color:#FBFBFB"><div class="codeBlockTitle_Ktv7">events/guildMemberAdd.ts</div><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ts codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#403f53"><span class="token keyword" style="color:rgb(12, 150, 155)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">{</span><span class="token plain"> CommandType</span><span class="token punctuation" style="color:rgb(153, 76, 195)">,</span><span class="token plain"> EventExecutable</span><span class="token punctuation" style="color:rgb(153, 76, 195)">,</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">type</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(17, 17, 17)">EventType</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(72, 118, 214)">'@sern/handler'</span><span class="token punctuation" style="color:rgb(153, 76, 195)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"></span><span class="token keyword" style="color:rgb(12, 150, 155)">import</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">type</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">{</span><span class="token plain"> GuildMember </span><span class="token punctuation" style="color:rgb(153, 76, 195)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(72, 118, 214)">'discord.js'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"></span><span class="token keyword" style="color:rgb(12, 150, 155)">export</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">default</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">class</span><span class="token plain"> </span><span class="token class-name keyword" style="color:rgb(12, 150, 155)">extends</span><span class="token plain"> EventExecutable</span><span class="token operator" style="color:rgb(12, 150, 155)"><</span><span class="token plain">EventType</span><span class="token punctuation" style="color:rgb(153, 76, 195)">.</span><span class="token plain">Discord</span><span class="token operator" style="color:rgb(12, 150, 155)">></span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> type </span><span class="token operator" style="color:rgb(12, 150, 155)">=</span><span class="token plain"> EventType</span><span class="token punctuation" style="color:rgb(153, 76, 195)">.</span><span class="token plain">Discord </span><span class="token keyword" style="color:rgb(12, 150, 155)">as</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">const</span><span class="token punctuation" style="color:rgb(153, 76, 195)">;</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:#403f53"><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(153, 76, 195);font-style:italic">execute</span><span class="token plain"> </span><span class="token operator" style="color:rgb(12, 150, 155)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token plain">member</span><span class="token operator" style="color:rgb(12, 150, 155)">:</span><span class="token plain"> GuildMember</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(12, 150, 155)">=></span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token builtin" style="color:rgb(72, 118, 214)">console</span><span class="token punctuation" style="color:rgb(153, 76, 195)">.</span><span class="token function" style="color:rgb(153, 76, 195);font-style:italic">log</span><span class="token punctuation" style="color:rgb(153, 76, 195)">(</span><span class="token plain">member</span><span class="token punctuation" style="color:rgb(153, 76, 195)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(153, 76, 195)">}</span><span class="token punctuation" style="color:rgb(153, 76, 195)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"></span><span class="token punctuation" style="color:rgb(153, 76, 195)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Now, you might ask <strong>why</strong> this feature was added. <br> Simply put, to give flexibility to the developers.
|
||
I believe that you should build your own structures however you might like and customize to your liking.
|
||
In addition, <strong>decorators now unofficially work with modules!</strong>
|
||
Feel free to use TypeScript experimental decorators to augment and customize your classes. </p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="deprecation-warnings">Deprecation Warnings<a class="hash-link" href="#deprecation-warnings" title="Direct link to heading"></a></h3><p>The next update will bring sern v2 with some important features. Here are some things to watch out for.</p><ul><li><a href="/blog/docs/api/interfaces/Wrapper">Wrapper#client</a> will be deprecated</li><li><a href="/blog/docs/api/interfaces/Wrapper">Wrapper#sernEmitter</a> will be deprecated<ul><li>a SernEmitter will be automatically created once Sern#init is called</li></ul></li><li>The option to pass in a function or array for <a href="/blog/docs/api/interfaces/Wrapper">Wrapper#events</a> will be deprecated. Only strings are accepted.</li><li><a href="/blog/docs/api/classes/SernEmitter">Sern#addExternal</a> will be deprecated in favor of a better way.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dependencies-update">Dependencies Update<a class="hash-link" href="#dependencies-update" title="Direct link to heading"></a></h3><ul><li>TypeScript has been updated to 4.8.3</li><li>Discord.js has been upgraded to 14.5</li></ul>]]></content>
|
||
<author>
|
||
<name>jacoobes</name>
|
||
<uri>https://github.com/jacoobes</uri>
|
||
</author>
|
||
<category label="release" term="release"/>
|
||
</entry>
|
||
</feed> |