mirror of
https://github.com/sern-handler/website
synced 2026-06-14 03:42:20 +00:00
100 lines
120 KiB
XML
100 lines
120 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
||
<channel>
|
||
<title>sern - Handlers. Redefined. Blog</title>
|
||
<link>https://sern.dev/blog</link>
|
||
<description>sern - Handlers. Redefined. Blog</description>
|
||
<lastBuildDate>Tue, 04 Jul 2023 00:00:00 GMT</lastBuildDate>
|
||
<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
|
||
<generator>https://github.com/jpmonette/feed</generator>
|
||
<language>en</language>
|
||
<item>
|
||
<title><![CDATA[New logo!]]></title>
|
||
<link>https://sern.dev/blog/newlogo</link>
|
||
<guid>https://sern.dev/blog/newlogo</guid>
|
||
<pubDate>Tue, 04 Jul 2023 00:00:00 GMT</pubDate>
|
||
<description><![CDATA[Hey everyone! Today we have very special news for you all: We're changing our logo!]]></description>
|
||
<content:encoded><![CDATA[<p>Hey everyone! Today we have very special news for you all: We're changing our logo!</p><h1>Why?</h1><p>You see, on today's standards, having a simple logo is essential. Our logo aligns perfectly with these design principles but it can always be improved.<br>
|
||
<!-- -->We were chilling, you know, cooking sern handler v3, sern gui, <code>npm create @sern/bot</code> and serncord when we thought about changing the logo to a sleek design with less colors.<br>
|
||
<!-- -->And here we are!</p><h1>Who did our new branding?</h1><p><a href="https://github.com/Murtatrxx" target="_blank" rel="noopener noreferrer">Ropox</a>!<br>
|
||
<!-- -->Bro's the GOAT. This website is maintained by him, the domain costs are funded by him and also he started brainstorming how the logo would be on paper:<br>
|
||
<img loading="lazy" src="/assets/images/paperprototypes-cd697eaefd7ac467f2385dd119f6d78c.jpg" width="3024" height="4032" class="img_ev3q">
|
||
And there it all clicked:<br>
|
||
<img loading="lazy" src="/assets/images/paperlogo-41a5e76b2d3249b59105ee88f01f202b.png" width="830" height="455" class="img_ev3q">
|
||
seren tried by the way!
|
||
<img loading="lazy" src="/assets/images/serentried-2bcee1b2fda9864408e52072821d995f.png" width="908" height="509" class="img_ev3q"></p><h1>Anyways, here it is:</h1><p><img loading="lazy" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA+gAAAPoCAYAAABNo9TkAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABYxSURBVHgB7d1NjlxXGYDhc+MgiJi0JRbQO8BZQcwKaK8gyQpwhjgD2wPbYkSyAswKaFaAvQL3EooxstxDEElfqtxGDBmB33vP80itKvW4VFVvfednDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD6qZQBM6u3Fi3UAAP8Xx/C4HmM9HJ9dHz+AD6fnN2N5/en4+9Xdy6fXAxDowLwEOgA0HKPkcPxQfrWO9c93xj9eCXZmJdCBaQl0AMh6eYr1X1w+uhwwEYEOTEugA0DbabK+jPXJ8dnru5e/PQzYuU8GAABA0PGX9PObsRyn6eMvxx/WnwzYORN0YFom6ACwLf+eqN+9fPTHATsk0IFpCXQA2KZjpF8uY/nGsnf2xhJ3AABgU9axXNyM9c27i+dfDtgRgQ4AAGzQcnban/724sXvB+yEJe7AtCxxB4B9WMZ6tYzlgSXvbJ0JOgAAsGnrWO6dTnp/d/HifMCGCXQAAGDzTleyiXS2TqADAAC7INLZOoEOAADshkhnywQ6AACwK7eRvv7p3cXjswEbItABAIDdOR0cdzN+9njAhgh0AABgrx6+vXj+cMBGCHQAAGDPHtuPzlYIdAAAYMeWs3WMPwzYAIEOAADs2jHQ77+7eP7lgDiBDgAA7N46lidOdadOoAMAALt3unrtZvz0NwPCBDoAADCLh6bolAl0AABgEsuZKTplAh0AAJiJe9HJEugAAMBElrO/Xby4PyBIoAMAAFO5M1bL3EkS6AAAwFRu70V3WBw9Ah0AAJjMcvbj8tkXA2IEOgAAMJ1lvbk/IEagAwAAE1ouBsQIdAAAYEbn9qFTI9ABAIAp2YdOjUAHAACmtKzjfECIQAcAACa13hsQItABAIAprcMEnRaBDgAATGkR6MQIdAAAAAgQ6AAAwKzOB4QIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+G+WASHnn3+7DgBgSoc3z3w3Bab2yQAAAAA+OoEOAAAAAQIdAAAAAgQ6AAAABAh0AAAAGB+fQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAA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" width="1000" height="1000" class="img_ev3q"></p><p>Pretty nice!</p><p>By the way, we have animations and variations on the way, so make sure to stay updated in the <a href="https://sern.dev/discord" target="_blank" rel="noopener noreferrer">discord server</a>!</p><h1>Finally, from the entire sern team, thank you for sticking around ❤️</h1>]]></content:encoded>
|
||
<category>branding</category>
|
||
</item>
|
||
<item>
|
||
<title><![CDATA[Release 3.0.0]]></title>
|
||
<link>https://sern.dev/blog/3.0.0</link>
|
||
<guid>https://sern.dev/blog/3.0.0</guid>
|
||
<pubDate>Sun, 18 Jun 2023 00:00:00 GMT</pubDate>
|
||
<description><![CDATA[3.0 Release]]></description>
|
||
<content:encoded><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="30-release">3.0 Release<a href="#30-release" class="hash-link" aria-label="Direct link to 3.0 Release" title="Direct link to 3.0 Release"></a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="join-our-discord-">Join our <a href="https://sern.dev/discord" target="_blank" rel="noopener noreferrer">discord</a> <br><a href="#join-our-discord-" class="hash-link" aria-label="Direct link to join-our-discord-" title="Direct link to join-our-discord-"></a></h3><h3 class="anchor anchorWithStickyNavbar_LWe7" id="features">Features<a href="#features" class="hash-link" aria-label="Direct link to Features" title="Direct link to Features"></a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="dependency-management">Dependency Management<a href="#dependency-management" class="hash-link" aria-label="Direct link to Dependency Management" title="Direct link to Dependency Management"></a></h4><ul><li><code>Service</code> API (recommended to use this over useContainer hooks)<ul><li>Dependencies type must be globally augmented in order for Services api to function properly</li></ul></li><li>new methods on ModuleManager<ul><li>getPublishableCommands()</li></ul></li><li>Init Hooks <ul><li>implement starting behavior for dependencies</li><li>To enforce and type check this, use the <code>Initializable</code> type when making your Dependencies type!</li></ul></li><li>Emitter interface<ul><li>More generic interface to define any event emitter</li><li>You can now swap out the SernEmitter with whatever emitter now. </li></ul></li></ul><div class="language-ts codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#403f53;--prism-background-color:#FBFBFB"><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)">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(17, 17, 17)">DatabaseService</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">implements</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(17, 17, 17)">Init</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 comment" style="color:rgb(152, 159, 177);font-style:italic">//some hypothetical database</span><span class="token plain"></span><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> _pgsql </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">database</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"> </span><span class="token keyword" style="color:rgb(12, 150, 155)">async</span><span class="token plain"> </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><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"> _pgsql</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">load</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" style="display:inline-block"></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)">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(153, 76, 195);font-style:italic">makeDependencies</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-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><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><br></span><span class="token-line" style="color:#403f53"><span class="token plain"> db</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)">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(17, 17, 17)">DatabaseService</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 comment" style="color:rgb(152, 159, 177);font-style:italic">//will be init'ed automatically</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><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 viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ul><li>new SernEmitter event <code>modulesLoaded</code> , which allows users to customize behavior after all modules are loaded!</li></ul><div class="language-ts codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#403f53;--prism-background-color:#FBFBFB"><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 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 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)">'modulesLoaded'</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"> </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"> </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 string" style="color:rgb(72, 118, 214)">'All modules loaded'</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 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" 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 viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="quality-of-life">Quality of Life<a href="#quality-of-life" class="hash-link" aria-label="Direct link to Quality of Life" title="Direct link to Quality of Life"></a></h4><ul><li><p>faster module loading</p><ul><li>I utilize async generators for reading files now. A lot faster than the first iteration.</li></ul></li><li><p>better error handling</p></li><li><p>Less boilerplate</p><ul><li>Services api cleans up v2 boilerplate</li></ul></li><li><p>class modules devex got upgraded and work better than before</p></li><li><p>automatically ignore any files not ending in (mts, cts, mjs, cjs, ts, js)</p><ul><li>ignore commands and events with <code>!</code> prefix on filename or directory (ie: <code>!filename.ts</code> or <code>!directory</code> will be ignored by sern)</li></ul></li><li><p><code>Service</code> API (recommended to use this over useContainer hooks)</p><ul><li>Dependencies type must be globally augmented in order for Services api to function properly</li></ul></li><li><p>Less boilerplate</p></li><li><p>new methods on ModuleManager</p></li><li><p>automatically ignore any files not ending in (mts, cts, mjs, cjs, ts, js)</p><ul><li>ignore commands / events with <code>!</code> prefix on filename or directory (ie: <code>!filename.ts</code> or <code>!directory</code>)</li></ul></li><li><p>new SernEmitter event <code>modulesLoaded</code> , which allows users to customize behavior after all modules are loaded!</p></li><li><p>Init Hooks </p><ul><li>implement starting behavior for dependencies</li></ul></li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="experimental">Experimental<a href="#experimental" class="hash-link" aria-label="Direct link to Experimental" title="Direct link to Experimental"></a></h3><ul><li>Experimental things may be subject to removal, need feedback and are not guaranteed stable</li><li>dev / prod mode <ul><li>sern will behave differently depending on mode set</li></ul></li><li>init sern from <code>file</code> option<ul><li>reads from local sern.config.json</li></ul></li></ul><div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#403f53;--prism-background-color:#FBFBFB"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#403f53"><span class="token maybe-class-name">Sern</span><span class="token punctuation" style="color:rgb(153, 76, 195)">.</span><span class="token method function property-access" 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 string" style="color:rgb(72, 118, 214)">'file'</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></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 viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="breaking-changes">Breaking changes<a href="#breaking-changes" class="hash-link" aria-label="Direct link to Breaking changes" title="Direct link to Breaking changes"></a></h3><ul><li>Sern.makeDependencies -> makeDependencies<ul><li>it is asynchronous and top level function now. Make sure to await it before initing for proper synchronization.</li></ul></li><li>module store and manager internally changed, so those using them may recieve breaking changes</li><li>BaseOptions type removed</li></ul><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"> Sern.makeDependencies({ build: () => {} })</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"> await makeDependencies({ build: () => {} })</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 viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="deprecations">Deprecations<a href="#deprecations" class="hash-link" aria-label="Direct link to Deprecations" title="Direct link to Deprecations"></a></h3><ul><li>Removed all previous marked deprecations in v3</li><li>ModuleStore will be removed as a dependency in v4. The only way to access modules should be through ModuleManager</li><li>Default Dependencies will be made internal in the v4. Users should only have access to its interface / contract</li></ul>]]></content:encoded>
|
||
<category>release</category>
|
||
</item>
|
||
<item>
|
||
<title><![CDATA[Release 2.5.0]]></title>
|
||
<link>https://sern.dev/blog/2.5.0</link>
|
||
<guid>https://sern.dev/blog/2.5.0</guid>
|
||
<pubDate>Thu, 12 Jan 2023 00:00:00 GMT</pubDate>
|
||
<description><![CDATA[2.5 Release]]></description>
|
||
<content:encoded><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="25-release">2.5 Release<a href="#25-release" class="hash-link" aria-label="Direct link to 2.5 Release" title="Direct link to 2.5 Release"></a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="join-our-discord-">Join our <a href="https://sern.dev/discord" target="_blank" rel="noopener noreferrer">discord</a> <br><a href="#join-our-discord-" class="hash-link" aria-label="Direct link to join-our-discord-" title="Direct link to join-our-discord-"></a></h3><ul><li>Thank you for using sern in your projects. It's only going to get better!</li><li>I apologize for the sudden small breaking change. After this update, there won't be any for a while.
|
||
Wow! We're increasing our semantic versioning by <code>+0.3.9</code> <br>
|
||
What does this mean?</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="breaking-changes">Breaking changes<a href="#breaking-changes" class="hash-link" aria-label="Direct link to Breaking changes" title="Direct link to Breaking changes"></a></h3><ul><li><a href="/docs/api/modules#controller">controller</a> parameter for plugins has been removed<ul><li>You'll need to import it instead</li><li>This <strong>breaks</strong> old <a href="/docs/api/interfaces/CommandPlugin">CommandPlugin</a>, but <strong>not</strong> old <a href="/docs/api/interfaces/EventPlugin">EventPlugin</a></li></ul></li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="deprecations">Deprecations<a href="#deprecations" class="hash-link" aria-label="Direct link to Deprecations" title="Direct link to Deprecations"></a></h3><ul><li><a href="/docs/api/interfaces/CommandPlugin">CommandPlugin</a> and <a href="/docs/api/interfaces/EventPlugin">EventPlugin</a> have been renamed <a href="/docs/api/interfaces/InitPlugin">InitPlugin</a> and <a href="/docs/api/interfaces/ControlPlugin">ControlPlugin</a></li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="reason">Reason<a href="#reason" class="hash-link" aria-label="Direct link to Reason" title="Direct link to Reason"></a></h3><ul><li>The naming of plugins was getting too complex. For example, plugin naming evolved into CommandModuleCommandPlugin, CommandModuleEventPlugin and more.</li><li>I realize that this affects all plugins. I have updated all <a href="https://github.com/sern-handler/awesome-plugins/pull/68" target="_blank" rel="noopener noreferrer">plugins</a> to match these changes</li><li>The old way of declaring plugins has been deprecated in favor of newer functions that facilitate and ease typings<ul><li><a href="/docs/api/modules#commandcontrolplugin">CommandControlPlugin</a></li><li><a href="/docs/api/modules#commandinitplugin">CommandInitPlugin</a></li><li><a href="/docs/api/modules#eventcontrolplugin">EventControlPlugin</a></li><li><a href="/docs/api/modules#eventinitplugin">EventInitPlugin</a></li><li><a href="/docs/api/modules#discordeventcontrolplugin">DiscordEventControlPlugin</a>
|
||
This will probably be the last breaking change in a while. Thanks for using sern!</li></ul></li></ul>]]></content:encoded>
|
||
<category>release</category>
|
||
</item>
|
||
<item>
|
||
<title><![CDATA[Release 2.0.0]]></title>
|
||
<link>https://sern.dev/blog/2.0.0</link>
|
||
<guid>https://sern.dev/blog/2.0.0</guid>
|
||
<pubDate>Tue, 13 Dec 2022 00:00:00 GMT</pubDate>
|
||
<description><![CDATA[2.0 Release]]></description>
|
||
<content:encoded><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="20-release">2.0 Release<a href="#20-release" class="hash-link" aria-label="Direct link to 2.0 Release" title="Direct link to 2.0 Release"></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 href="#plugin-support-for-event-modules" class="hash-link" aria-label="Direct link to Plugin Support for Event Modules" title="Direct link to Plugin Support for Event Modules"></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 viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" 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 href="#dependency-injection-and-decoupling" class="hash-link" aria-label="Direct link to Dependency Injection and Decoupling" title="Direct link to Dependency Injection and Decoupling"></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 href="#how-do-i-start" class="hash-link" aria-label="Direct link to How do I start?" title="Direct link to How do I start?"></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 viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" 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 href="#new-commandtypes" class="hash-link" aria-label="Direct link to New CommandTypes" title="Direct link to New CommandTypes"></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 viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" 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 href="#typings-simplification" class="hash-link" aria-label="Direct link to Typings Simplification" title="Direct link to Typings Simplification"></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 href="#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes"></a></h2><img loading="lazy" src="https://img.srizan.dev/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 viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" 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 href="#context-refactoring" class="hash-link" aria-label="Direct link to Context refactoring" title="Direct link to Context refactoring"></a></h2><p>The context data structure has been internally altered to represent its dynamics better.</p>]]></content:encoded>
|
||
<category>release</category>
|
||
</item>
|
||
<item>
|
||
<title><![CDATA[How to get started with sern!]]></title>
|
||
<link>https://sern.dev/blog/getting-started</link>
|
||
<guid>https://sern.dev/blog/getting-started</guid>
|
||
<pubDate>Fri, 30 Sep 2022 00:00:00 GMT</pubDate>
|
||
<description><![CDATA[Hello everyone!]]></description>
|
||
<content:encoded><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="hello-everyone">Hello everyone!<a href="#hello-everyone" class="hash-link" aria-label="Direct link to Hello everyone!" title="Direct link to Hello everyone!"></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 href="#step-1-install-the-cli" class="hash-link" aria-label="Direct link to Step 1: Install the CLI." title="Direct link to Step 1: Install the CLI."></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 viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" 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 href="#step-2-have-some-way-to-store-secrets" class="hash-link" aria-label="Direct link to Step 2: Have some way to store secrets." title="Direct link to Step 2: Have some way to store secrets."></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 href="#and-thats-it" class="hash-link" aria-label="Direct link to And... that's it?" title="Direct link to And... that's it?"></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.dev/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 href="#extra-video-tutorial" class="hash-link" aria-label="Direct link to Extra: Video tutorial!" title="Direct link to Extra: Video tutorial!"></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 href="#faq" class="hash-link" aria-label="Direct link to FAQ" title="Direct link to FAQ"></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.dev/discord" target="_blank" rel="noopener noreferrer">Discord</a>. We're trying to get to 100 members!</p>]]></content:encoded>
|
||
<category>guides</category>
|
||
</item>
|
||
<item>
|
||
<title><![CDATA[Release 1.2.0]]></title>
|
||
<link>https://sern.dev/blog/1.2.0</link>
|
||
<guid>https://sern.dev/blog/1.2.0</guid>
|
||
<pubDate>Wed, 28 Sep 2022 00:00:00 GMT</pubDate>
|
||
<description><![CDATA[Class-based modules]]></description>
|
||
<content:encoded><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="class-based-modules">Class-based modules<a href="#class-based-modules" class="hash-link" aria-label="Direct link to Class-based modules" title="Direct link to Class-based modules"></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 viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" 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 href="#class-based-modules-1" class="hash-link" aria-label="Direct link to Class based modules" title="Direct link to Class based modules"></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 viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" 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 viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" 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 href="#deprecation-warnings" class="hash-link" aria-label="Direct link to Deprecation Warnings" title="Direct link to Deprecation Warnings"></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 href="#dependencies-update" class="hash-link" aria-label="Direct link to Dependencies Update" title="Direct link to Dependencies Update"></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:encoded>
|
||
<category>release</category>
|
||
</item>
|
||
</channel>
|
||
</rss> |