PageSourceSearch

https://discordjs-guide.netlify.app/assets/collectors.html.6417f3e0.js

js discordjs-guide.netlify.app collected 2026-10-03 10:40:18 UTC 43,592 bytes, 89 lines download raw bytes

1import{r as p,o as i,c as u,a as s,b as a,w as c,F as r,d as n,f as e}from"./app.1a0d0096.js";const k={},d=s("h1",{id:"collectors",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#collectors","aria-hidden":"true"},"#"),n(" Collectors")],-1),m=s("h2",{id:"message-collectors",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#message-collectors","aria-hidden":"true"},"#"),n(" Message collectors")],-1),h=n("Collectors"),b=n(' are useful to enable your bot to obtain *additional* input after the first command was sent. An example would be initiating a quiz, where the bot will "await" a correct response from somebody.'),g=e(`<h3 id="basic-message-collector" tabindex="-1"><a class="header-anchor" href="#basic-message-collector" aria-hidden="true">#</a> Basic message collector</h3><p>For now, let&#39;s take the example that they have provided us:</p><div class="language-javascript ext-js line-numbers-mode"><pre class="language-javascript"><code><span class="token comment">// \`m\` is a message object that will be passed through the filter function</span>
2<span class="token keyword">const</span> <span class="token function-variable function">collectorFilter</span> <span class="token operator">=</span> <span class="token parameter">m</span> <span class="token operator">=&gt;</span> m<span class="token punctuation">.</span>content<span class="token punctuation">.</span><span class="token function">includes</span><span class="token punctuation">(</span><span class="token string">&#39;discord&#39;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
3<span class="token keyword">const</span> collector <span class="token operator">=</span> interaction<span class="token punctuation">.</span>channel<span class="token punctuation">.</span><span class="token function">createMessageCollector</span><span class="token punctuation">(</span><span class="token punctuation">{</span> <span class="token literal-property property">filter</span><span class="token operator">:</span> collectorFilter<span class="token punctuation">,</span> <span class="token literal-property property">time</span><span class="token operator">:</span> <span class="token number">15_000</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
4
5collector<span class="token punctuation">.</span><span class="token function">on</span><span class="token punctuation">(</span><span class="token string">&#39;collect&#39;</span><span class="token punctuation">,</span> <span class="token parameter">m</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
6	console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">\`</span><span class="token string">Collected </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">\${</span>m<span class="token punctuation">.</span>content<span class="token interpolation-punctuation punctuation">}</span></span><span class="token template-punctuation string">\`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span>
7<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
8
9collector<span class="token punctuation">.</span><span class="token function">on</span><span class="token punctuation">(</span><span class="token string">&#39;end&#39;</span><span class="token punctuation">,</span> <span class="token parameter">collected</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
10	console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">\`</span><span class="token string">Collected </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">\${</span>collected<span class="token punctuation">.</span>
10size<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string"> items</span><span class="token template-punctuation string">\`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span>
11<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
12</code></pre><div class="line-numbers"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br></div></div>`,3),f=n("You can provide a "),y=s("code",null,"filter",-1),_=n(" key to the object parameter of "),w=s("code",null,"createMessageCollector()",-1),v=n(". The value to this key should be a function that returns a boolean value to indicate if this message should be collected or not. To check for multiple conditions in your filter you can connect them using "),x={href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#logical_operators",target:"_blank",rel:"noopener noreferrer"},j=n("logical operators"),q=n(". If you don't provide a filter all messages in the channel the collector was started on will be collected."),C=n("Note that the above example uses "),T={href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions#function_body",target:"_blank",rel:"noopener noreferrer"},I=n("implicit return"),z=n(" for the filter function and passes it to the options object using the "),F={href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#property_definitions",target:"_blank",rel:"noopener noreferrer"},M=n("object property shorthand"),S=n(" notation."),R=e('<p>If a message passes through the filter, it will trigger the <code>collect</code> event for the <code>collector</code> you&#39;ve created. This message is then passed into the event listener as <code>collected</code> and the provided function is executed. In the above example, you simply log the message. Once the collector finishes collecting based on the provided end conditions the <code>end</code> event emits.</p><p>You can control when a collector ends by supplying additional option keys when creating a collector:</p><ul><li><code>time</code>: Amount of time in milliseconds the collector should run for</li><li><code>max</code>: Number of messages to successfully pass the filter</li><li><code>maxProcessed</code>: Number of messages encountered (no matter the filter result)</li></ul><p>The benefit of using an event-based collector over <code>.awaitMessages()</code> (its promise-based counterpart) is that you can do something directly after each message is collected, rather than just after the collector ended. You can also stop the collector manually by calling <code>collector.stop()</code>.</p><h3 id="await-messages" tabindex="-1"><a class="header-anchor" href="#await-messages" aria-hidden="true">#</a> Await messages</h3>',5),A=n("Using "),U=n(" can be easier if you understand Promises, and it allows you to have cleaner code overall. It is essentially identical to "),$=n(", except promisified. However, the drawback of using this method is that you cannot do things before the Promise is resolved or rejected, either by an error or completion. However, it should do for most purposes, such as awaiting the correct response in a quiz. Instead of taking their example, let's set up a basic quiz command using the "),N=s("code",null,".awaitMessages()",-1),P=n(" feature."),L=e(`<p>First, you&#39;ll need some questions and answers to choose from, so here&#39;s a basic set:</p><div class="language-json ext-json line-numbers-mode"><pre class="language-json"><code><span class="token punctuation">[</span>
13	<span class="token punctuation">{</span>
14		<span class="token property">&quot;question&quot;</span><span class="token operator">:</span> <span class="token string">&quot;
14What color is the sky?&quot;</span><span class="token punctuation">,</span>
15		<span class="token property">&quot;answers&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token string">&quot;blue&quot;</span><span class="token punctuation">]</span>
16	<span class="token punctuation">}</span><span class="token punctuation">,</span>
17	<span class="token punctuation">{</span>
18		<span class="token property">&quot;question&quot;</span><span class="token operator">:</span> <span class="token string">&quot;How many letters are there in the alphabet?&quot;</span><span class="token punctuation">,</span>
19		<span class="token property">&quot;answers&quot;</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token string">&quot;26&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;twenty-six&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;twenty six&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;twentysix&quot;</span><span class="token punctuation">]</span>
20	<span class="token punctuation">}</span>
21<span class="token punctuation">]</span>
22</code></pre><div class="line-numbers"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br></div></div><p>The provided set allows for responder error with an array of answers permitted. Ideally, it would be best to place this in a JSON file, which you can call <code>quiz.json</code> for simplicity.</p><div class="language-javascript ext-js line-numbers-mode"><pre class="language-javascript"><code><span class="token keyword">const</span> quiz <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">&#39;./quiz.json&#39;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
23<span class="token comment">// ...</span>
24<span class="token keyword">const</span> item <span class="token operator">=</span> quiz<span class="token punctuation">[</span>Math<span class="token punctuation">.</span><span class="token function">floor</span><span class="token punctuation">(</span>Math<span class="token punctuation">.</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">*</span> quiz<span class="token punctuation">.</span>length<span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
25<span class="token keyword">const</span> <span class="token function-variable function">collectorFilter</span> <span class="token operator">=</span> <span class="token parameter">response</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
26	<span class="token keyword">return</span> item<span class="token punctuation">.</span>answers<span class="token punctuation">.</span><span class="token function">some</span><span class="token punctuation">(</span><span class="token parameter">answer</span> <span class="token operator">=&gt;</span> answer<span class="token punctuation">.</span><span class="token function">toLowerCase</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">===</span> response<span class="token punctuation">.</span>content<span class="token punctuation">.</span><span class="token function">toLowerCase</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
27<span class="token punctuation">}</span><span class="token punctuation">;</span>
28
29interaction<span class="token punctuation">.</span><span class="token function">reply</span><span class="token punctuation">(</span><span class="token punctuation">{</span> <span class="token literal-property property">content</span><span class="token operator">:</span> item<span class="token punctuation">.</span>question<span class="token punctuation">,</span> <span class="token literal-property property">withResponse</span><span class="token operator">:</span> <span class="token boolean">true</span> <span class="token punctuation">}</span><span class="token punctuation">)</span>
30	<span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span><span class="token parameter">response</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
31		response<span class="token punctuation">.</span>resource<span class="token punctuation">.</span>message<span class="token punctuation">.</span>channel<span class="token punctuation">.</span><span class="token function">awaitMessages</span><span class="token punctuation">(</span><span class="token punctuation">{</span> <span class="token literal-property property">filter</span><span class="token operator">:</span> collectorFilter<span class="token punctuation">,</span> <span class="token literal-property property">max</span><span class="token operator">:</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token literal-property property">time</span><span class="token operator">:</span> <span class="token number">30_000</span><span class="token punctuation">,</span> <span class="token literal-property property">errors</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token string">&#39;time&#39;</span><span class="token punctuation">]</span> <span class="token punctuation">}</span><span class="token punctuation">)</span>
32			<span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span><span class="token parameter">collected</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
33				interaction<span class="token punctuation">.</span><span class="token function">followUp</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">\`</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">\${</span>collected<span class="token punctuation">.</span><span class="token function">first</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>
33author<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string"> got the correct answer!</span><span class="token template-punctuation string">\`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span>
34			<span class="token punctuation">}</span><span class="token punctuation">)</span>
35			<span class="token punctuation">.</span><span class="token function">catch</span><span class="token punctuation">(</span><span class="token parameter">collected</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
36				interaction<span class="token punctuation">.</span><span class="token function">followUp</span><span class="token punctuation">(</span><span class="token string">&#39;Looks like nobody got the answer this time.&#39;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
37			<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
38	<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
39</code></pre><div class="line-numbers"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br></div></div>`,4),O={class:"custom-container tip"},B=s("p",{class:"custom-container-title"},"TIP",-1),D=n("If you don't understand how "),J=s("code",null,".some()",-1),W=n(" works, you can read about it in more detail "),Y={href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some",target:"_blank",rel:"noopener noreferrer"},V=n("here"),E=n("."),H=s("p",null,[n("In this filter, you iterate through the answers to find what you want. You would like to ignore the case because simple typos can happen, so you convert each answer to its lowercase form and check if it's equal to the response in lowercase form as well. In the options section, you only want to allow one answer to pass through, hence the "),s("code",null,"max: 1"),n(" setting.")],-1),G=s("p",null,[n("The filter looks for messages that match one of the answers in the array of possible answers to pass through the collector. The options (the second parameter) specifies that only a maximum of one message can go through the filter successfully before the Promise successfully resolves. The errors section specifies that time will cause it to error out, which will cause the Promise to reject if one correct answer is not received within the time limit of one minute. As you can see, there is no "),s("code",null,"collect"),n(" event, so you are limited in that regard.")],-1),K=s("h2",{id:"reaction-collectors",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#reaction-collectors","aria-hidden":"true"},"#"),n(" Reaction collectors")],-1),Q=s("h3",{id:"basic-reaction-collector",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#basic-reaction-collector","aria-hidden":"true"},"#"),n(" Basic reaction collector")],-1),X=n("These work quite similarly to message collectors, except that you apply them on a message rather than a channel. This example uses the "),Z=n(" method. The filter will check for the \u{1F44D} emoji\u2013in the default skin tone specifically, so be wary of that. It will also check that the person who reacted shares the same id as the author of the original message that the collector was assigned to."),nn=e(`<div class="language-javascript ext-js line-numbers-mode"><pre class="language-javascript"><code><span class="token keyword">const</span> <span class="token function-variable function">collectorFilter</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">reaction<span class="token punctuation">,</span> user</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
40	<span class="token keyword">return</span> reaction<span class="token punctuation">.</span>emoji<span class="token punctuation">.</span>name <span class="token operator">===</span> <span class="token string">&#39;\u{1F44D}&#39;</span> <span class="token operator">&amp;&amp;</span> user<span class="token punctuation">.</span>id <span class="token operator">===</span> message<span class="token punctuation">.</span>
40author<span class="token punctuation">.</span>id<span class="token punctuation">;</span>
41<span class="token punctuation">}</span><span class="token punctuation">;</span>
42
43<span class="token keyword">const</span> collector <span class="token operator">=</span> message<span class="token punctuation">.</span><span class="token function">createReactionCollector</span><span class="token punctuation">(</span><span class="token punctuation">{</span> <span class="token literal-property property">filter</span><span class="token operator">:</span> collectorFilter<span class="token punctuation">,</span> <span class="token literal-property property">time</span><span class="token operator">:</span> <span class="token number">15_000</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
44
45collector<span class="token punctuation">.</span><span class="token function">on</span><span class="token punctuation">(</span><span class="token string">&#39;collect&#39;</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token parameter">reaction<span class="token punctuation">,</span> user</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
46	console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">\`</span><span class="token string">Collected </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">\${</span>reaction<span class="token punctuation">.</span>emoji<span class="token punctuation">.</span>name<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string"> from </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">\${</span>user<span class="token punctuation">.</span>tag<span class="token interpolation-punctuation punctuation">}</span></span><span class="token template-punctuation string">\`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span>
47<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
48
49collector<span class="token punctuation">.</span><span class="token function">on</span><span class="token punctuation">(</span><span class="token string">&#39;end&#39;</span><span class="token punctuation">,</span> <span class="token parameter">collected</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
50	console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">\`</span><span class="token string">Collected </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">\${</span>collected<span class="token punctuation">.</span>size<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string"> items</span><span class="token template-punctuation string">\`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span>
51<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
52</code></pre><div class="line-numbers"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br></div></div><h3 id="await-reactions" tabindex="-1"><a class="header-anchor" href="#await-reactions" aria-hidden="true">
52#</a> Await reactions</h3>`,2),sn=n(" works almost the same as a reaction collector, except it is Promise-based. The same differences apply as with channel collectors."),an=e(`<div class="language-javascript ext-js line-numbers-mode"><pre class="language-javascript"><code><span class="token keyword">const</span> <span class="token function-variable function">collectorFilter</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">reaction<span class="token punctuation">,</span> user</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
53	<span class="token keyword">return</span> reaction<span class="token punctuation">.</span>emoji<span class="token punctuation">.</span>name <span class="token operator">===</span> <span class="token string">&#39;\u{1F44D}&#39;</span> <span class="token operator">&amp;&amp;</span> user<span class="token punctuation">.</span>id <span class="token operator">===</span> message<span class="token punctuation">.</span>author<span class="token punctuation">.</span>id<span class="token punctuation">;</span>
54<span class="token punctuation">}</span><span class="token punctuation">;</span>
55
56message<span class="token punctuation">.</span><span class="token function">awaitReactions</span><span class="token punctuation">(</span><span class="token punctuation">{</span> <span class="token literal-property property">filter</span><span class="token operator">:</span> collectorFilter<span class="token punctuation">,</span> <span class="token literal-property property">max</span><span class="token operator">:</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token literal-property property">time</span><span class="token operator">:</span> <span class="token number">60_000</span><span class="token punctuation">,</span> <span class="token literal-property property">errors</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token string">&#39;time&#39;</span><span class="token punctuation">]</span> <span class="token punctuation">}</span><span class="token punctuation">)</span>
57	<span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span><span class="token parameter">collected</span> <span class="token operator">=&gt;</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>collected<span class="token punctuation">.</span>size<span class="token punctuation">)</span><span class="token punctuation">)</span>
58	<span class="token punctuation">.</span><span class="token function">catch</span><span class="token punctuation">(</span><span class="token parameter">collected</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
59		console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">\`</span><span class="token string">After a minute, only </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">\${</span>collected<span class="token punctuation">.</span>size<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string"> out of 4 reacted.</span><span class="token template-punctuation string">\`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span>
60	<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
61</code></pre><div class="line-numbers"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br></div></div><h2 id="interaction-collectors" tabindex="-1"><a class="header-anchor" href="#interaction-collectors" aria-hidden="true">
61#</a> Interaction collectors</h2><p>The third type of collector allows you to collect interactions; such as when users activate a slash command or click on a button in a message.</p><h3 id="basic-message-component-collector" tabindex="-1"><a class="header-anchor" href="#basic-message-component-collector" aria-hidden="true">#</a> Basic message component collector</h3><p>Collecting interactions from message components works similarly to reaction collectors. In the following example, you will check that the interaction came from a button, and that the user clicking the button is the same user that initiated the command.</p><p>One important difference to note with interaction collectors is that Discord expects a response to <em>all</em> interactions within 3 seconds - even ones that you don&#39;t want to collect. For this reason, you may wish to <code>.deferUpdate()</code> all interactions in your filter, or not use a filter at all and handle this behavior in the <code>collect</code> event.</p><div class="language-javascript ext-js line-numbers-mode"><pre class="language-javascript"><code><span class="token keyword">const</span> <span class="token punctuation">{</span> ComponentType <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">&#39;discord.js&#39;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
62
63<span class="token keyword">const</span> collector <span class="token operator">=</span> message<span class="token punctuation">.</span><span class="token function">createMessageComponentCollector</span><span class="token punctuation">(</span><span class="token punctuation">{</span> <span class="token literal-property property">componentType</span><span class="token operator">:</span> ComponentType<span class="token punctuation">.</span>Button<span class="token punctuation">,</span> <span class="token literal-property property">time</span><span class="token operator">:</span> <span class="token number">15_000</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
64
65collector<span class="token punctuation">.</span><span class="token function">on</span><span class="token punctuation">(</span><span class="token string">&#39;collect&#39;</span><span class="token punctuation">,</span> <span class="token parameter">i</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
66	<span class="token keyword">if</span> <span class="token punctuation">(</span>i<span class="token punctuation">.</span>user<span class="token punctuation">.</span>id <span class="token operator">===</span> interaction<span class="token punctuation">.</span>user<span class="token punctuation">.</span>id<span class="token punctuation">)</span> <span class="token punctuation">{</span>
67		i<span class="token punctuation">.</span><span class="token function">reply</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">\`</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">\${</span>i<span class="token punctuation">.</span>user<span class="token punctuation">.</span>id<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string"> clicked on the </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">\${</span>i<span class="token punctuation">.</span>customId<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string"> button.</span><span class="token template-punctuation string">\`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span>
68	<span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>
69		i<span class="token punctuation">.</span><span class="token function">reply</span><span class="token punctuation">(</span><span class="token punctuation">{</span> <span class="token literal-property property">content</span><span class="token operator">:</span> <span class="token template-string"><span class="token template-punctuation string">\`</span><span class="token string">These buttons aren&#39;t for you!</span><span class="token template-punctuation string">\`</span></span><span class="token punctuation">,</span> <span class="token literal-property property">flags</span><span class="token operator">:</span> MessageFlags<span class="token punctuation">.</span>Ephemeral <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
70	<span class="token punctuation">}</span>
71<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
72
73collector<span class="token punctuation">.</span><span class="token function">on</span><span class="token punctuation">(</span><span class="token string">&#39;end&#39;</span><span class="token punctuation">,</span> <span class="token parameter">collected</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
74	console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">\`</span><span class="token string">Collected </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">\${</span>collected<span class="token punctuation">.</span>
74size<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string"> interactions.</span><span class="token template-punctuation string">\`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span>
75<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
76</code></pre><div class="line-numbers"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br></div></div><h3 id="await-message-component" tabindex="-1"><a class="header-anchor" href="#await-message-component" aria-hidden="true">#</a> Await message component</h3><p>As before, this works similarly to the message component collector, except it is Promise-based.</p><p>Unlike other Promise-based collectors, this method will only ever collect one interaction that passes the filter. If no interactions are collected before the time runs out, the Promise will reject. This behavior aligns with Discord&#39;s requirement that actions should immediately receive a response. In this example, you will use <code>.deferUpdate()</code> on all interactions in the filter.</p><div class="language-javascript ext-js line-numbers-mode"><pre class="language-javascript"><code><span class="token keyword">const</span> <span class="token punctuation">{</span> ComponentType <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">&#39;discord.js&#39;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
77
78<span class="token keyword">const</span> <span class="token function-variable function">collectorFilter</span> <span class="token operator">=</span> <span class="token parameter">i</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
79	i<span class="token punctuation">.</span><span class="token function">deferUpdate</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
80	<span class="token keyword">return</span> i<span class="token punctuation">.</span>user<span class="token punctuation">.</span>id <span class="token operator">===</span> interaction<span class="token punctuation">.</span>user<span class="token punctuation">.</span>id<span class="token punctuation">;</span>
81<span class="token punctuation">}</span><span class="token punctuation">;</span>
82
83message<span class="token punctuation">.</span><span class="token function">awaitMessageComponent</span><span class="token punctuation">(</span><span class="token punctuation">{</span> <span class="token literal-property property">filter</span><span class="token operator">:</span> collectorFilter<span class="token punctuation">,</span> <span class="token literal-property property">componentType</span><span class="token operator">:</span> ComponentType<span class="token punctuation">.</span>StringSelect<span class="token punctuation">,</span> <span class="token literal-property property">time</span><span class="token operator">:</span> <span class="token number">60_000</span> <span class="token punctuation">}</span><span class="token punctuation">)</span>
84	<span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span><span class="token parameter">interaction</span> <span class="token operator">=&gt;</span> interaction<span class="token punctuation">.</span><span class="token function">editReply</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">\`</span><span class="token string">You selected </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">\${</span>interaction<span class="token punctuation">.</span>values<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">&#39;, &#39;</span><span class="token punctuation">)</span><span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">!</span><span class="token template-punctuation string">\`</span></span><span class="token punctuation">)</span><span class="token punctuation">)</span>
85	<span class="token punctuation">.</span><span class="token function">catch</span><span class="token punctuation">(</span><span class="token parameter">err</span> <span class="token operator">=&gt;</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">&#39;No interactions were collected.&#39;</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
86</code></pre><div class="line-numbers"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br></div></div><h3 id="await-modal-submit" tabindex="-1"><a class="header-anchor" href="#await-modal-submit" aria-hidden="true">
86#</a> Await modal submit</h3>`,12),tn=n("If you want to wait for the submission of a modal within the context of another command or button execution, you may find the promisified collector "),en=n(" useful."),on=e(`<p>As Discord does not inform you if the user dismisses the modal, supplying a maximum <code>time</code> to wait for is crucial:</p><div class="language-javascript ext-js line-numbers-mode"><pre class="language-javascript"><code>initialInteraction<span class="token punctuation">.</span><span class="token function">awaitModalSubmit</span><span class="token punctuation">(</span><span class="token punctuation">{</span> <span class="token literal-property property">time</span><span class="token operator">:</span> <span class="token number">60_000</span><span class="token punctuation">,</span> filter <span class="token punctuation">}</span><span class="token punctuation">)</span>
87	<span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span><span class="token parameter">interaction</span> <span class="token operator">=&gt;</span> interaction<span class="token punctuation">.</span><span class="token function">editReply</span><span class="token punctuation">(</span><span class="token string">&#39;Thank you for your submission!&#39;</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
88	<span class="token punctuation">.</span><span class="token function">catch</span><span class="token punctuation">(</span><span class="token parameter">err</span> <span class="token operator">=&gt;</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">&#39;No modal submit interaction was collected&#39;</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
89</code></pre><div class="line-numbers"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div>`,2),pn=n("For more information on working with modals, see the "),cn=n("modals section of this guide"),ln=n(".");function un(rn,kn){const t=p("DocsLink"),o=p("OutboundLink"),l=p("RouterLink");return i(),u(r,null,[d,m,s("p",null,[a(t,{path:"Collector:Class"},{default:c(()=>[h]),_:1}),b]),g,s("p",null,[f,y,_,w,v,s("a",x,[j,a(o)]),q]),s("p",null,[C,s("a",T,[I,a(o)]),z,s("a",F,[M,a(o)]),S]),R,s("p",null,[A,a(t,{path:"TextChannel:Class#awaitMessages",type:"method"}),U,a(t,{path:"TextChannel:Class#createMessageCollector",type:"method"}),$,N,P]),L,s("div",O,[B,s("p",null,[D,J,W,s("a",Y,[V,a(o)]),E])]),H,G,K,Q,s("p",null,[X,a(t,{path:"Message:Class#createReactionCollector",type:"method"}),Z]),nn,s("p",null,[a(t,{path:"Message:Class#awaitReactions",type:"method"}),sn]),an,s("p",null,[tn,a(t,{path:"CommandInteraction:Class#awaitModalSubmit",type:"method"}),en]),on,s("p",null,[pn,a(l,{to:"/interactions/modals.html"},{default:c(()=>[cn]),_:1}),ln])],64)}k.render=un;export{k as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.