UNPKG

@novelbrasil/discord.js-embed-menu

Version:

Easily create Discord.js embed menus with reactions and unlimited customisable pages.

304 lines (297 loc) 27.4 kB
<!doctype html> <html class="default no-js"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>discord.js-embed-menu</title> <meta name="description" content="Documentation for discord.js-embed-menu"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="assets/css/main.css"> <script async src="assets/js/search.js" id="search-script"></script> </head> <body> <header> <div class="tsd-page-toolbar"> <div class="container"> <div class="table-wrap"> <div class="table-cell" id="tsd-search" data-index="assets/js/search.json" data-base="."> <div class="field"> <label for="tsd-search-field" class="tsd-widget search no-caption">Search</label> <input id="tsd-search-field" type="text" /> </div> <ul class="results"> <li class="state loading">Preparing search index...</li> <li class="state failure">The search index is not available</li> </ul> <a href="index.html" class="title">discord.js-embed-menu</a> </div> <div class="table-cell" id="tsd-widgets"> <div id="tsd-filter"> <a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a> <div class="tsd-filter-group"> <div class="tsd-select" id="tsd-filter-visibility"> <span class="tsd-select-label">All</span> <ul class="tsd-select-list"> <li data-value="public">Public</li> <li data-value="protected">Public/Protected</li> <li data-value="private" class="selected">All</li> </ul> </div> <input type="checkbox" id="tsd-filter-inherited" checked /> <label class="tsd-widget" for="tsd-filter-inherited">Inherited</label> <input type="checkbox" id="tsd-filter-externals" checked /> <label class="tsd-widget" for="tsd-filter-externals">Externals</label> </div> </div> <a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a> </div> </div> </div> </div> <div class="tsd-page-title"> <div class="container"> <h1>discord.js-embed-menu</h1> </div> </div> </header> <div class="container container-main"> <div class="row"> <div class="col-8 col-content"> <div class="tsd-panel tsd-typography"> <div align="center"> <p> <a href="https://github.com/eilex/discord.js-embed-menu"><img src="https://img.shields.io/npm/v/discord.js-embed-menu" alt="NPM version" /></a> <a href="https://discord.js.org"><img src="https://img.shields.io/npm/dependency-version/discord.js-embed-menu/discord.js" alt="NPM (prod) dependency version" /></a> <a href="https://nodei.co/npm/discord.js-embed-menu"><img src="https://img.shields.io/npm/dt/discord.js-embed-menu" alt="NPM downloads" /></a> <a href="https://nodei.co/npm/discord.js-embed-menu"><img src="https://img.shields.io/npm/dw/discord.js-embed-menu" alt="NPM downloads week" /></a> </p> <p> <a href="https://nodei.co/npm/discord.js-embed-menu/"><img src="https://nodei.co/npm/discord.js-embed-menu.png?downloads=true&stars=true" alt="npm installnfo" /></a> </p> </div> <a href="#table-of-contents" id="table-of-contents" style="color: inherit; text-decoration: none;"> <h2>Table of contents</h2> </a> <ul> <li><a href="#about">About</a></li> <li><a href="#installation">Installation</a></li> <li><a href="#example-usage">Example usage</a></li> <li><a href="#special-destinations">Special destinations</a></li> <li><a href="#contributing">Contributing</a></li> <li><a href="#links">Links</a></li> </ul> <a href="#about" id="about" style="color: inherit; text-decoration: none;"> <h2>About</h2> </a> <p>discord.js-embed-menu is a <a href="https://nodejs.org">Node.js</a> module based on <a href="https://github.com/jowsey/discord.js-menu">discord.js-menu</a> that allows you to easily create reaction embeds menu using <a href="https://discord.js.org/#/">discord.js</a>.</p> <ul> <li>Channel and direct message menu</li> <li>Remove other users reactions</li> <li>Pagination system</li> <li>Mention user</li> <li>Timeout and auto delete</li> </ul> <a href="#installation" id="installation" style="color: inherit; text-decoration: none;"> <h2>Installation</h2> </a> <p><strong>Node.js 14.0.0 or newer is required.</strong> </p> <pre><code class="language-shell"><span style="color: #000000">npm i discord.js-embed-menu --save</span> </code></pre> <a href="#example-usage" id="example-usage" style="color: inherit; text-decoration: none;"> <h2>Example usage</h2> </a> <pre><code class="language-js"><span style="color: #008000">/* Import all the usual stuff. */</span> <span style="color: #AF00DB">import</span><span style="color: #000000"> { </span><span style="color: #001080">Client</span><span style="color: #000000">, </span><span style="color: #001080">MessageEmbed</span><span style="color: #000000"> } </span><span style="color: #AF00DB">from</span><span style="color: #000000"> </span><span style="color: #A31515">&#039;discord.js&#039;</span><span style="color: #000000">;</span> <span style="color: #AF00DB">import</span><span style="color: #000000"> { </span><span style="color: #001080">DiscordEmbedMenu</span><span style="color: #000000"> } </span><span style="color: #AF00DB">from</span><span style="color: #000000"> </span><span style="color: #A31515">&#039;discord.js-embed-menu&#039;</span><span style="color: #000000">;</span> <span style="color: #0000FF">const</span><span style="color: #000000"> </span><span style="color: #0070C1">client</span><span style="color: #000000"> = </span><span style="color: #0000FF">new</span><span style="color: #000000"> </span><span style="color: #795E26">Client</span><span style="color: #000000">();</span> <span style="color: #008000">/* Run this code every time a new message is sent. */</span> <span style="color: #001080">client</span><span style="color: #000000">.</span><span style="color: #795E26">on</span><span style="color: #000000">(</span><span style="color: #A31515">&#039;message&#039;</span><span style="color: #000000">, </span><span style="color: #001080">message</span><span style="color: #000000"> </span><span style="color: #0000FF">=&gt;</span><span style="color: #000000"> {</span> <span style="color: #000000"> </span><span style="color: #AF00DB">if</span><span style="color: #000000"> (</span><span style="color: #001080">message</span><span style="color: #000000">.</span><span style="color: #001080">content</span><span style="color: #000000"> === </span><span style="color: #A31515">&#039;!menu&#039;</span><span style="color: #000000">) {</span> <span style="color: #000000"> </span><span style="color: #008000">/*</span> <span style="color: #008000"> * The menu class takes 3 mandatory parameters and 5 optional parameters. </span> <span style="color: #008000"> * 1) A channel to send the menu to, it can be null so it will send DMs to the user.</span> <span style="color: #008000"> * 2) A user to give control over the navigation or send DM if channel is null.</span> <span style="color: #008000"> * 3) An array of Page objects or DiscordEmbedMenuPage, each being a unique page of the menu.</span> <span style="color: #008000"> * 4) How long, in milliseconds, you want the menu to wait for new reactions, it can be null so it will wait for ever (not recommended).</span> <span style="color: #008000"> * 5) If it shall or not delete the message on menu timeout.</span> <span style="color: #008000"> * 6) If it shall mention menu&#039;s user on discord channels.</span> <span style="color: #008000"> * 7) If it shall keep last user reaction when you call stop.</span> <span style="color: #008000"> * 8) The message to be displayed when it&#039;s loading the menu page.</span> <span style="color: #008000"> */</span> <span style="color: #000000"> </span><span style="color: #0000FF">let</span><span style="color: #000000"> </span><span style="color: #001080">menu</span><span style="color: #000000"> = </span><span style="color: #0000FF">new</span><span style="color: #000000"> </span><span style="color: #795E26">DiscordEmbedMenu</span><span style="color: #000000">(</span><span style="color: #001080">message</span><span style="color: #000000">.</span><span style="color: #001080">channel</span><span style="color: #000000">, </span><span style="color: #001080">message</span><span style="color: #000000">.</span><span style="color: #001080">author</span><span style="color: #000000">, [</span> <span style="color: #000000"> {</span> <span style="color: #000000"> </span><span style="color: #008000">/*</span> <span style="color: #008000"> * A page object consists of three items:</span> <span style="color: #008000"> * 1) A name. This is used as a unique destination name for reactions.</span> <span style="color: #008000"> * 2) Some content. This is a rich embed. You can use {object: formatting} or .functionFormatting() for embeds. Whichever you prefer.</span> <span style="color: #008000"> * 3) A set of reactions, linked to either a page destination or a function.* (See example pages)</span> <span style="color: #008000"> * </span> <span style="color: #008000"> * Reactions can be emojis or custom emote IDs, and reaction destinations can be either the names</span> <span style="color: #008000"> * of pages, () =&gt; { functions }, or special destination names. See below for a list of these.</span> <span style="color: #008000"> */</span> <span style="color: #000000"> </span><span style="color: #008000">/* You can call pages whatever you like. The first in the array is always loaded first. */</span> <span style="color: #000000"> </span><span style="color: #001080">name:</span><span style="color: #000000"> </span><span style="color: #A31515">&#039;main&#039;</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #001080">content:</span><span style="color: #000000"> </span><span style="color: #0000FF">new</span><span style="color: #000000"> </span><span style="color: #795E26">MessageEmbed</span><span style="color: #000000">({</span> <span style="color: #000000"> </span><span style="color: #001080">title:</span><span style="color: #000000"> </span><span style="color: #A31515">&#039;Main menu&#039;</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #001080">description:</span><span style="color: #000000"> </span><span style="color: #A31515">&#039;Please chose an action&#039;</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #001080">fields:</span><span style="color: #000000"> [</span> <span style="color: #000000"> {</span> <span style="color: #000000"> </span><span style="color: #001080">name:</span><span style="color: #000000"> </span><span style="color: #A31515">&quot;📝 Sub menu&quot;</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #001080">value:</span><span style="color: #000000"> </span><span style="color: #A31515">&quot;Goes to another menu.&quot;</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #001080">inline:</span><span style="color: #000000"> </span><span style="color: #0000FF">false</span> <span style="color: #000000"> },</span> <span style="color: #000000"> {</span> <span style="color: #000000"> </span><span style="color: #001080">name:</span><span style="color: #000000"> </span><span style="color: #A31515">&quot;✉️ Direct message&quot;</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #001080">value:</span><span style="color: #000000"> </span><span style="color: #A31515">&quot;Sends a direct message.&quot;</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #001080">inline:</span><span style="color: #000000"> </span><span style="color: #0000FF">false</span> <span style="color: #000000"> },</span> <span style="color: #000000"> {</span> <span style="color: #000000"> </span><span style="color: #001080">name:</span><span style="color: #000000"> </span><span style="color: #A31515">&quot;❌ Close&quot;</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #001080">value:</span><span style="color: #000000"> </span><span style="color: #A31515">&quot;Close the menu.&quot;</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #001080">inline:</span><span style="color: #000000"> </span><span style="color: #0000FF">false</span> <span style="color: #000000"> }</span> <span style="color: #000000"> ]</span> <span style="color: #000000"> }),</span> <span style="color: #000000"> </span><span style="color: #001080">reactions:</span><span style="color: #000000"> {</span> <span style="color: #000000"> </span><span style="color: #A31515">&#039;📝&#039;</span><span style="color: #001080">:</span><span style="color: #000000"> </span><span style="color: #A31515">&#039;sub-menu&#039;</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #A31515">&#039;✉️&#039;</span><span style="color: #001080">:</span><span style="color: #000000"> </span><span style="color: #0000FF">async</span><span style="color: #000000"> (</span><span style="color: #001080">menu</span><span style="color: #000000">) </span><span style="color: #0000FF">=&gt;</span><span style="color: #000000"> {</span> <span style="color: #000000"> </span><span style="color: #001080">menu</span><span style="color: #000000">.</span><span style="color: #001080">user</span><span style="color: #000000">.</span><span style="color: #795E26">send</span><span style="color: #000000">(</span><span style="color: #A31515">`Hello dear </span><span style="color: #0000FF">${</span><span style="color: #001080">menu</span><span style="color: #000000FF">.</span><span style="color: #001080">user</span><span style="color: #000000FF">.</span><span style="color: #001080">username</span><span style="color: #0000FF">}</span><span style="color: #A31515">.`</span><span style="color: #000000">);</span> <span style="color: #000000"> },</span> <span style="color: #000000"> </span><span style="color: #A31515">&#039;&#039;</span><span style="color: #001080">:</span><span style="color: #000000"> </span><span style="color: #A31515">&#039;delete&#039;</span> <span style="color: #000000"> }</span> <span style="color: #000000"> },</span> <span style="color: #000000"> {</span> <span style="color: #000000"> </span><span style="color: #001080">name:</span><span style="color: #000000"> </span><span style="color: #A31515">&#039;sub-menu&#039;</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #001080">content:</span><span style="color: #000000"> </span><span style="color: #0000FF">new</span><span style="color: #000000"> </span><span style="color: #795E26">MessageEmbed</span><span style="color: #000000">({</span> <span style="color: #000000"> </span><span style="color: #001080">title:</span><span style="color: #000000"> </span><span style="color: #A31515">&#039;Sub menu&#039;</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #001080">description:</span><span style="color: #000000"> </span><span style="color: #A31515">&#039;This is another page.&#039;</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #001080">fields:</span><span style="color: #000000"> [</span> <span style="color: #000000"> {</span> <span style="color: #000000"> </span><span style="color: #001080">name:</span><span style="color: #000000"> </span><span style="color: #A31515">&quot;⬅️ Back&quot;</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #001080">value:</span><span style="color: #000000"> </span><span style="color: #A31515">&quot;Go backwards.&quot;</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #001080">inline:</span><span style="color: #000000"> </span><span style="color: #0000FF">false</span> <span style="color: #000000"> },</span> <span style="color: #000000"> {</span> <span style="color: #000000"> </span><span style="color: #001080">name:</span><span style="color: #000000"> </span><span style="color: #A31515">&quot;❌ Close&quot;</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #001080">value:</span><span style="color: #000000"> </span><span style="color: #A31515">&quot;Close the menu.&quot;</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #001080">inline:</span><span style="color: #000000"> </span><span style="color: #0000FF">false</span> <span style="color: #000000"> }</span> <span style="color: #000000"> ]</span> <span style="color: #000000"> }),</span> <span style="color: #000000"> </span><span style="color: #001080">reactions:</span><span style="color: #000000"> {</span> <span style="color: #000000"> </span><span style="color: #A31515">&#039;⬅️&#039;</span><span style="color: #001080">:</span><span style="color: #000000"> </span><span style="color: #A31515">&#039;main&#039;</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #A31515">&#039;&#039;</span><span style="color: #001080">:</span><span style="color: #000000"> </span><span style="color: #A31515">&#039;delete&#039;</span> <span style="color: #000000"> }</span> <span style="color: #000000"> }</span> <span style="color: #000000"> ]);</span> <span style="color: #000000"> </span><span style="color: #008000">/* Run Menu.start() when you&#039;re ready to send the menu. */</span> <span style="color: #000000"> </span><span style="color: #001080">menu</span><span style="color: #000000">.</span><span style="color: #795E26">start</span><span style="color: #000000">();</span> <span style="color: #000000"> </span><span style="color: #008000">/* The menu also has two events you can use.</span> <span style="color: #008000"> * The &quot;page-changing&quot; event fires just before a new page is sent.</span> <span style="color: #008000"> * The &quot;page-changed&quot; event fires after the new page is sent.</span> <span style="color: #008000"> */</span> <span style="color: #000000"> </span><span style="color: #001080">menu</span><span style="color: #000000">.</span><span style="color: #795E26">on</span><span style="color: #000000">(</span><span style="color: #A31515">&#039;page-changing&#039;</span><span style="color: #000000">, (</span><span style="color: #001080">oldPageIndex</span><span style="color: #000000">, </span><span style="color: #001080">oldPage</span><span style="color: #000000">, </span><span style="color: #001080">newPageIndex</span><span style="color: #000000">, </span><span style="color: #001080">newPage</span><span style="color: #000000">) </span><span style="color: #0000FF">=&gt;</span><span style="color: #000000"> {</span> <span style="color: #000000"> </span><span style="color: #001080">console</span><span style="color: #000000">.</span><span style="color: #795E26">log</span><span style="color: #000000">(</span><span style="color: #A31515">`Menu is going from &quot;</span><span style="color: #0000FF">${</span><span style="color: #001080">oldPage</span><span style="color: #000000FF">.</span><span style="color: #001080">content</span><span style="color: #000000FF">.</span><span style="color: #001080">title</span><span style="color: #0000FF">}</span><span style="color: #A31515">&quot; (</span><span style="color: #0000FF">${</span><span style="color: #001080">oldPageIndex</span><span style="color: #0000FF">}</span><span style="color: #A31515">) to &quot;</span><span style="color: #0000FF">${</span><span style="color: #001080">newPage</span><span style="color: #000000FF">.</span><span style="color: #001080">content</span><span style="color: #000000FF">.</span><span style="color: #001080">title</span><span style="color: #0000FF">}</span><span style="color: #A31515">&quot; (</span><span style="color: #0000FF">${</span><span style="color: #001080">newPageIndex</span><span style="color: #0000FF">}</span><span style="color: #A31515">)`</span><span style="color: #000000">);</span> <span style="color: #000000"> });</span> <span style="color: #000000"> </span><span style="color: #001080">menu</span><span style="color: #000000">.</span><span style="color: #795E26">on</span><span style="color: #000000">(</span><span style="color: #A31515">&#039;page-changed&#039;</span><span style="color: #000000">, (</span><span style="color: #001080">pageIndex</span><span style="color: #000000">, </span><span style="color: #001080">page</span><span style="color: #000000">) </span><span style="color: #0000FF">=&gt;</span><span style="color: #000000"> {</span> <span style="color: #000000"> </span><span style="color: #001080">console</span><span style="color: #000000">.</span><span style="color: #795E26">log</span><span style="color: #000000">(</span><span style="color: #A31515">`Menu is now on &quot;</span><span style="color: #0000FF">${</span><span style="color: #001080">page</span><span style="color: #000000FF">.</span><span style="color: #001080">content</span><span style="color: #000000FF">.</span><span style="color: #001080">title</span><span style="color: #0000FF">}</span><span style="color: #A31515">&quot; (</span><span style="color: #0000FF">${</span><span style="color: #001080">pageIndex</span><span style="color: #0000FF">}</span><span style="color: #A31515">)`</span><span style="color: #000000">);</span> <span style="color: #000000"> });</span> <span style="color: #000000"> }</span> <span style="color: #000000">});</span> <span style="color: #001080">client</span><span style="color: #000000">.</span><span style="color: #795E26">login</span><span style="color: #000000">(</span><span style="color: #A31515">&quot;Get your bot&#039;s oauth token at https://discord.com/developers/applications&quot;</span><span style="color: #000000">);</span> </code></pre> <a href="#special-destinations" id="special-destinations" style="color: inherit; text-decoration: none;"> <h2>Special Destinations</h2> </a> <p>Discord.js-embed-menu comes with 6 pre-defined destinations with specific uses.</p> <table> <thead> <tr> <th>Destination</th> <th>Function</th> </tr> </thead> <tbody><tr> <td>first</td> <td>Goes to the first page in the array.</td> </tr> <tr> <td>last</td> <td>Goes to the last page in the array.</td> </tr> <tr> <td>previous</td> <td>Goes to the previous page in the array.</td> </tr> <tr> <td>next</td> <td>Goes to the next page in the array.</td> </tr> <tr> <td>stop</td> <td>Removes reactions from the embed and stops updating the menu.</td> </tr> <tr> <td>delete</td> <td>Stops the menu and deletes the message.</td> </tr> </tbody></table> <p>Calling a page one of these wouldn&#39;t work, it prioritizes special destinations.</p> <a href="#contributing" id="contributing" style="color: inherit; text-decoration: none;"> <h2>Contributing</h2> </a> <p>Before creating an issue, please ensure that it hasn&#39;t already been reported/suggested.</p> <a href="#links" id="links" style="color: inherit; text-decoration: none;"> <h2>Links</h2> </a> <ul> <li><a href="https://github.com/discordjs/discord.js">discord.js</a></li> <li><a href="https://github.com/jowsey/discord.js-menu">discord.js-menu</a></li> </ul> </div> </div> <div class="col-4 col-menu menu-sticky-wrap menu-highlight"> <nav class="tsd-navigation primary"> <ul> <li class=" "> <a href="modules.html">Exports</a> </li> </ul> </nav> <nav class="tsd-navigation secondary menu-sticky"> <ul class="before-current"> <li class=" tsd-kind-class"> <a href="classes/discordembedmenu.html" class="tsd-kind-icon">Discord<wbr>Embed<wbr>Menu</a> </li> <li class=" tsd-kind-class"> <a href="classes/discordembedmenupage.html" class="tsd-kind-icon">Discord<wbr>Embed<wbr>Menu<wbr>Page</a> </li> </ul> </nav> </div> </div> </div> <footer class="with-border-bottom"> <div class="container"> <h2>Legend</h2> <div class="tsd-legend-group"> <ul class="tsd-legend"> <li class="tsd-kind-constructor tsd-parent-kind-class"><span class="tsd-kind-icon">Constructor</span></li> <li class="tsd-kind-property tsd-parent-kind-class"><span class="tsd-kind-icon">Property</span></li> <li class="tsd-kind-method tsd-parent-kind-class"><span class="tsd-kind-icon">Method</span></li> </ul> <ul class="tsd-legend"> <li class="tsd-kind-property tsd-parent-kind-class tsd-is-private"><span class="tsd-kind-icon">Private property</span></li> <li class="tsd-kind-method tsd-parent-kind-class tsd-is-private"><span class="tsd-kind-icon">Private method</span></li> </ul> </div> </div> </footer> <div class="container tsd-generator"> <p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p> </div> <div class="overlay"></div> <script src="assets/js/main.js"></script> </body> </html>