@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
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">'discord.js'</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">'discord.js-embed-menu'</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">'message'</span><span style="color: #000000">, </span><span style="color: #001080">message</span><span style="color: #000000"> </span><span style="color: #0000FF">=></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">'!menu'</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'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'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, () => { 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">'main'</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">'Main menu'</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">'Please chose an action'</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">"📝 Sub menu"</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">"Goes to another menu."</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">"✉️ Direct message"</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">"Sends a direct message."</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">"❌ Close"</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">"Close the menu."</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">'📝'</span><span style="color: #001080">:</span><span style="color: #000000"> </span><span style="color: #A31515">'sub-menu'</span><span style="color: #000000">,</span>
<span style="color: #000000"> </span><span style="color: #A31515">'✉️'</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">=></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">'❌'</span><span style="color: #001080">:</span><span style="color: #000000"> </span><span style="color: #A31515">'delete'</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">'sub-menu'</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">'Sub menu'</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">'This is another page.'</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">"⬅️ Back"</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">"Go backwards."</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">"❌ Close"</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">"Close the menu."</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">'⬅️'</span><span style="color: #001080">:</span><span style="color: #000000"> </span><span style="color: #A31515">'main'</span><span style="color: #000000">,</span>
<span style="color: #000000"> </span><span style="color: #A31515">'❌'</span><span style="color: #001080">:</span><span style="color: #000000"> </span><span style="color: #A31515">'delete'</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'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 "page-changing" event fires just before a new page is sent.</span>
<span style="color: #008000"> * The "page-changed" 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">'page-changing'</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">=></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 "</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">" (</span><span style="color: #0000FF">${</span><span style="color: #001080">oldPageIndex</span><span style="color: #0000FF">}</span><span style="color: #A31515">) to "</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">" (</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">'page-changed'</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">=></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 "</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">" (</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">"Get your bot's oauth token at https://discord.com/developers/applications"</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'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'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>