-
Notifications
You must be signed in to change notification settings - Fork 0
/
awaiting-events.html
244 lines (242 loc) · 29.1 KB
/
awaiting-events.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="utf-8">
<meta property="og:title" content="Waiting for events - D++ - The lightweight C++ Discord API Library">
<meta property="og:description" content="A lightweight C++ Discord API library supporting the entire Discord API, including Slash Commands, Voice/Audio, Sharding, Clustering and more!">
<meta name="description" content="Waiting for events - D++ - A lightweight C++ Discord API library supporting the entire Discord API, including Slash Commands, Voice/Audio, Sharding, Clustering and more!">
<meta property="og:image" content="https://dpp.dev/DPP-Logo.png">
<meta property="og:url" content="https://dpp.dev/">
<meta property="og:type" content="website">
<meta property="twitter:title" content="Waiting for events - D++ - The lightweight C++ Discord API Library">
<title>Waiting for events - D++ - The lightweight C++ Discord API Library</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
<link href="style.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<script>
setTimeout(function() {
$("#main-menu").html($("#main-menu").html() + "<li><select name='vsv' onchange='window.location.href=this.options[this.selectedIndex].value'><option value='/'>master</option><option value='/10.0.34/'>10.0.34</option><option value='/10.0.33/'>10.0.33</option><option value='/10.0.32/'>10.0.32</option><option value='/10.0.31/'>10.0.31</option><option value='/10.0.30/'>10.0.30</option><option value='/10.0.29/'>10.0.29</option><option value='/10.0.28/'>10.0.28</option><option value='/10.0.27/'>10.0.27</option><option value='/10.0.26/'>10.0.26</option><option value='/10.0.25/'>10.0.25</option><option value='/10.0.24/'>10.0.24</option><option value='/10.0.23/'>10.0.23</option><option value='/10.0.22/'>10.0.22</option><option value='/10.0.21/'>10.0.21</option><option value='/10.0.20/'>10.0.20</option><option value='/10.0.19/'>10.0.19</option><option value='/10.0.18/'>10.0.18</option><option value='/10.0.17/'>10.0.17</option><option value='/10.0.16/'>10.0.16</option><option value='/10.0.15/'>10.0.15</option><option value='/10.0.14/'>10.0.14</option><option value='/10.0.13/'>10.0.13</option><option value='/10.0.12/'>10.0.12</option><option value='/10.0.11/'>10.0.11</option><option value='/10.0.10/'>10.0.10</option><option value='/10.0.9/'>10.0.9</option><option value='/10.0.8/'>10.0.8</option><option value='/10.0.7/'>10.0.7</option><option value='/10.0.6/'>10.0.6</option><option value='/10.0.5/'>10.0.5</option><option value='/10.0.4/'>10.0.4</option><option value='/10.0.3/'>10.0.3</option><option value='/10.0.2/'>10.0.2</option><option value='/10.0.1/'>10.0.1</option><option value='/10.0.0/'>10.0.0</option><option value='/9.0.19/'>9.0.19</option><option value='/9.0.18/'>9.0.18</option><option value='/9.0.17/'>9.0.17</option><option value='/9.0.16/'>9.0.16</option><option value='/9.0.15/'>9.0.15</option><option value='/9.0.14/'>9.0.14</option><option value='/9.0.13/'>9.0.13</option><option value='/9.0.12/'>9.0.12</option><option value='/9.0.11/'>9.0.11</option><option value='/9.0.10/'>9.0.10</option><option value='/9.0.9/'>9.0.9</option><option value='/9.0.8/'>9.0.8</option><option value='/9.0.7/'>9.0.7</option><option value='/9.0.6/'>9.0.6</option><option value='/9.0.5/'>9.0.5</option><option value='/9.0.4/'>9.0.4</option><option value='/9.0.3/'>9.0.3</option><option value='/9.0.2/'>9.0.2</option><option value='/9.0.1/'>9.0.1</option><option value='/9.0.0/'>9.0.0</option><option value='/1.0.2/'>1.0.2</option><option value='/1.0.1/'>1.0.1</option><option value='/1.0.0/'>1.0.0</option></select></li>");
}, 500);
</script>
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td id="projectlogo"><img alt="Logo" src="DPP-Logo.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">D++ (DPP)
</div>
<div id="projectbrief">C++ Discord API Bot Library</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<label for="MSearchField" style="display: none">Search</label>
<!-- Generated by Doxygen 1.9.3 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
$(document).ready(function(){initNavTree('awaiting-events.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">Waiting for events </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p ><dl class="section warning"><dt>Warning</dt><dd>D++ Coroutines are a very new feature and are currently only supported by D++ on g++ 13, clang/LLVM 14, and MSVC 19.37 or above. Additionally, D++ must be built with the CMake option DPP_CORO, and your program must both define the macro DPP_CORO and use C++20 or above. </dd></dl>
</p>
<p >D++ makes it possible to await events: simple use <code>co_await</code> on any of the event routers, such as <a class="el" href="classdpp_1_1cluster.html#a1a632b3c2c8d3ff3a47372ffa770acf5">on_message_create</a>, and your coroutine will be suspended until the next event fired by this event router. You can also <code>co_await</code> the return of an event router's <a class="el" href="classdpp_1_1event__router__t.html#a16c2527f66c8b74e5c0678ace4fa549e">when()</a> method while passing it a predicate function object, it will only resume your coroutine when the predicate returns true. Be aware that your coroutine is attached to the event router only when you call <code>co_await</code> and not before, and will be detached as it is resumed.</p>
<dl class="section note"><dt>Note</dt><dd>When the event router resumes your coroutine, it will give you <b>a reference to the event object</b>. This will likely mean it will be destroyed after your next co_await, make sure to save it in a local variable if you need it for longer.</dd></dl>
<div class="fragment"><div class="line"><span class="preprocessor">#include <dpp/dpp.h></span></div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span> main() {</div>
<div class="line"> <a class="code hl_class" href="classdpp_1_1cluster.html">dpp::cluster</a> bot{<span class="stringliteral">"token"</span>};</div>
<div class="line"> </div>
<div class="line"> bot.<a class="code hl_variable" href="classdpp_1_1cluster.html#ab840686c7cd2e15f4a66ab64f62e106b">on_log</a>(<a class="code hl_function" href="namespacedpp_1_1utility.html#a8c2cc04bb80ffd287b376d5977899277">dpp::utility::cout_logger</a>());</div>
<div class="line"> </div>
<div class="line"> bot.on_slashcommand([](<span class="keyword">const</span> <a class="code hl_struct" href="structdpp_1_1slashcommand__t.html">dpp::slashcommand_t</a>& event) -> <a class="code hl_class" href="classdpp_1_1task.html">dpp::task<void></a> {</div>
<div class="line"> <span class="keywordflow">if</span> (event.<a class="code hl_variable" href="structdpp_1_1interaction__create__t.html#a8b0c69c156a1e532507a918c13414f14">command</a>.<a class="code hl_function" href="classdpp_1_1interaction.html#aabbb8d58d708128098516ed443d5c140">get_command_name</a>() == <span class="stringliteral">"test"</span>) {</div>
<div class="line"> <span class="comment">// Make a message and add a button with its custom ID set to the command interaction's ID so we can identify it</span></div>
<div class="line"> dpp::message m{<span class="stringliteral">"Test"</span>};</div>
<div class="line"> std::string <span class="keywordtype">id</span>{event.command.id.str()};</div>
<div class="line"> m.add_component(</div>
<div class="line"> <a class="code hl_class" href="classdpp_1_1component.html">dpp::component</a>{}.<a class="code hl_function" href="classdpp_1_1component.html#a3707437be16cc7dfd5edcf321f8e842d">add_component</a>(</div>
<div class="line"> <a class="code hl_class" href="classdpp_1_1component.html">dpp::component</a>{}</div>
<div class="line"> .<a class="code hl_function" href="classdpp_1_1component.html#a281e39d6b8c65b1fd301d195a835e703">set_type</a>(<a class="code hl_enumvalue" href="namespacedpp.html#afce43206033521b990e3a72bb87481b7a98228836af5d0c180cfc05eb1f0bfde9">dpp::cot_button</a>)</div>
<div class="line"> .<a class="code hl_function" href="classdpp_1_1component.html#a33f254b5ac5a043870cb30efc99fb580">set_label</a>(<span class="stringliteral">"Click me!"</span>)</div>
<div class="line"> .<a class="code hl_function" href="classdpp_1_1component.html#a5b5e20746e11d017569ccc46efd56688">set_id</a>(<span class="keywordtype">id</span>)</div>
<div class="line"> )</div>
<div class="line"> );</div>
<div class="line"> <span class="keyword">co_await</span> event.<a class="code hl_function" href="structdpp_1_1interaction__create__t.html#aef38626cd24d2212b00ab866509b4d59">co_reply</a>(m);</div>
<div class="line"> </div>
<div class="line"> <a class="code hl_struct" href="structdpp_1_1button__click__t.html">dpp::button_click_t</a> click_event = <span class="keyword">co_await</span> event.<a class="code hl_variable" href="structdpp_1_1event__dispatch__t.html#a9ef98cebb9c0a5ab75a4362d1b40fb71">from</a>-><a class="code hl_variable" href="classdpp_1_1discord__client.html#afed78d2e1b09e006ede8b4690895a866">creator</a>-><a class="code hl_variable" href="classdpp_1_1cluster.html#af9409347218d270da0aeb22b0a27c38d">on_button_click</a>.when(</div>
<div class="line"> <span class="comment">// Note!! Due to a bug in g++11 and g++12, id must be captured as a reference here or the compiler will destroy it twice. This is fixed in g++13</span></div>
<div class="line"> [&<span class="keywordtype">id</span>] (<a class="code hl_struct" href="structdpp_1_1button__click__t.html">dpp::button_click_t</a> <span class="keyword">const</span> &b) {</div>
<div class="line"> return b.custom_id == id;</div>
<div class="line"> }</div>
<div class="line"> );</div>
<div class="line"> <span class="comment">// Acknowledge the click and edit the original response, removing the button</span></div>
<div class="line"> click_event.reply();</div>
<div class="line"> event.<a class="code hl_function" href="structdpp_1_1interaction__create__t.html#a10553ebb8d10ba58595f825e0a89eb1b">edit_original_response</a>(<a class="code hl_struct" href="structdpp_1_1message.html">dpp::message</a>{<span class="stringliteral">"You clicked the button!"</span>});</div>
<div class="line"> }</div>
<div class="line"> });</div>
<div class="line"> </div>
<div class="line"> bot.on_ready([&bot](<span class="keyword">const</span> <a class="code hl_struct" href="structdpp_1_1ready__t.html">dpp::ready_t</a>& event) {</div>
<div class="line"> <span class="keywordflow">if</span> (dpp::run_once<struct register_bot_commands>()) {</div>
<div class="line"> <a class="code hl_class" href="classdpp_1_1slashcommand.html">dpp::slashcommand</a> command{<span class="stringliteral">"test"</span>, <span class="stringliteral">"Test awaiting for an event"</span>, bot.me.<a class="code hl_variable" href="classdpp_1_1managed.html#a40bf0c6cc03909910512808fa6caa112">id</a>};</div>
<div class="line"> </div>
<div class="line"> bot.global_command_create(command);</div>
<div class="line"> }</div>
<div class="line"> });</div>
<div class="line"> </div>
<div class="line"> bot.start(<a class="code hl_enumvalue" href="namespacedpp.html#af447e04d0490cd4a9de085e4a758faa4a155f7db65696b4c09b5fcc41787e4726">dpp::st_wait</a>);</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">return</span> 0;</div>
<div class="line">}</div>
<div class="ttc" id="aclassdpp_1_1cluster_html"><div class="ttname"><a href="classdpp_1_1cluster.html">dpp::cluster</a></div><div class="ttdoc">The cluster class represents a group of shards and a command queue for sending and receiving commands...</div><div class="ttdef"><b>Definition:</b> cluster.h:80</div></div>
<div class="ttc" id="aclassdpp_1_1cluster_html_ab840686c7cd2e15f4a66ab64f62e106b"><div class="ttname"><a href="classdpp_1_1cluster.html#ab840686c7cd2e15f4a66ab64f62e106b">dpp::cluster::on_log</a></div><div class="ttdeci">event_router_t< log_t > on_log</div><div class="ttdoc">Called when a log message is to be written to the log. You can attach any logging system here you wis...</div><div class="ttdef"><b>Definition:</b> cluster.h:560</div></div>
<div class="ttc" id="aclassdpp_1_1cluster_html_af9409347218d270da0aeb22b0a27c38d"><div class="ttname"><a href="classdpp_1_1cluster.html#af9409347218d270da0aeb22b0a27c38d">dpp::cluster::on_button_click</a></div><div class="ttdeci">event_router_t< button_click_t > on_button_click</div><div class="ttdoc">Called when a button is clicked attached to a message. Button clicks are triggered by discord when bu...</div><div class="ttdef"><b>Definition:</b> cluster.h:604</div></div>
<div class="ttc" id="aclassdpp_1_1component_html"><div class="ttname"><a href="classdpp_1_1component.html">dpp::component</a></div><div class="ttdoc">Represents the component object. A component is a clickable button or drop down list within a discord...</div><div class="ttdef"><b>Definition:</b> message.h:348</div></div>
<div class="ttc" id="aclassdpp_1_1component_html_a281e39d6b8c65b1fd301d195a835e703"><div class="ttname"><a href="classdpp_1_1component.html#a281e39d6b8c65b1fd301d195a835e703">dpp::component::set_type</a></div><div class="ttdeci">component & set_type(component_type ct)</div><div class="ttdoc">Set the type of the component. Button components (type dpp::cot_button) should always be contained wi...</div></div>
<div class="ttc" id="aclassdpp_1_1component_html_a33f254b5ac5a043870cb30efc99fb580"><div class="ttname"><a href="classdpp_1_1component.html#a33f254b5ac5a043870cb30efc99fb580">dpp::component::set_label</a></div><div class="ttdeci">component & set_label(std::string_view label)</div><div class="ttdoc">Set the label of the component, e.g. button text. For action rows, this field is ignored....</div></div>
<div class="ttc" id="aclassdpp_1_1component_html_a3707437be16cc7dfd5edcf321f8e842d"><div class="ttname"><a href="classdpp_1_1component.html#a3707437be16cc7dfd5edcf321f8e842d">dpp::component::add_component</a></div><div class="ttdeci">component & add_component(const component &c)</div><div class="ttdoc">Add a sub-component, only valid for action rows. Adding subcomponents to a component will automatical...</div></div>
<div class="ttc" id="aclassdpp_1_1component_html_a5b5e20746e11d017569ccc46efd56688"><div class="ttname"><a href="classdpp_1_1component.html#a5b5e20746e11d017569ccc46efd56688">dpp::component::set_id</a></div><div class="ttdeci">component & set_id(std::string_view id)</div><div class="ttdoc">Set the id of the component. For action rows, this field is ignored. Setting the id will auto-set the...</div></div>
<div class="ttc" id="aclassdpp_1_1discord__client_html_afed78d2e1b09e006ede8b4690895a866"><div class="ttname"><a href="classdpp_1_1discord__client.html#afed78d2e1b09e006ede8b4690895a866">dpp::discord_client::creator</a></div><div class="ttdeci">class dpp::cluster * creator</div><div class="ttdoc">Owning cluster.</div><div class="ttdef"><b>Definition:</b> discordclient.h:283</div></div>
<div class="ttc" id="aclassdpp_1_1interaction_html_aabbb8d58d708128098516ed443d5c140"><div class="ttname"><a href="classdpp_1_1interaction.html#aabbb8d58d708128098516ed443d5c140">dpp::interaction::get_command_name</a></div><div class="ttdeci">std::string get_command_name() const</div><div class="ttdoc">Get the command name for a command interaction.</div></div>
<div class="ttc" id="aclassdpp_1_1managed_html_a40bf0c6cc03909910512808fa6caa112"><div class="ttname"><a href="classdpp_1_1managed.html#a40bf0c6cc03909910512808fa6caa112">dpp::managed::id</a></div><div class="ttdeci">snowflake id</div><div class="ttdoc">Unique ID of object set by Discord. This value contains a timestamp, worker ID, internal server ID,...</div><div class="ttdef"><b>Definition:</b> managed.h:39</div></div>
<div class="ttc" id="aclassdpp_1_1slashcommand_html"><div class="ttname"><a href="classdpp_1_1slashcommand.html">dpp::slashcommand</a></div><div class="ttdoc">Represents an application command, created by your bot either globally, or on a guild.</div><div class="ttdef"><b>Definition:</b> appcommand.h:1397</div></div>
<div class="ttc" id="aclassdpp_1_1task_html"><div class="ttname"><a href="classdpp_1_1task.html">dpp::task</a></div><div class="ttdoc">A coroutine task. It starts immediately on construction and can be co_await-ed, making it perfect for...</div><div class="ttdef"><b>Definition:</b> task.h:95</div></div>
<div class="ttc" id="anamespacedpp_1_1utility_html_a8c2cc04bb80ffd287b376d5977899277"><div class="ttname"><a href="namespacedpp_1_1utility.html#a8c2cc04bb80ffd287b376d5977899277">dpp::utility::cout_logger</a></div><div class="ttdeci">std::function< void(const dpp::log_t &)> DPP_EXPORT cout_logger()</div><div class="ttdoc">Get a default logger that outputs to std::cout. e.g.</div></div>
<div class="ttc" id="anamespacedpp_html_af447e04d0490cd4a9de085e4a758faa4a155f7db65696b4c09b5fcc41787e4726"><div class="ttname"><a href="namespacedpp.html#af447e04d0490cd4a9de085e4a758faa4a155f7db65696b4c09b5fcc41787e4726">dpp::st_wait</a></div><div class="ttdeci">@ st_wait</div><div class="ttdoc">Wait forever on a condition variable. The cluster will spawn threads for each shard and start() will ...</div><div class="ttdef"><b>Definition:</b> cluster.h:63</div></div>
<div class="ttc" id="anamespacedpp_html_afce43206033521b990e3a72bb87481b7a98228836af5d0c180cfc05eb1f0bfde9"><div class="ttname"><a href="namespacedpp.html#afce43206033521b990e3a72bb87481b7a98228836af5d0c180cfc05eb1f0bfde9">dpp::cot_button</a></div><div class="ttdeci">@ cot_button</div><div class="ttdoc">Clickable button.</div><div class="ttdef"><b>Definition:</b> message.h:48</div></div>
<div class="ttc" id="astructdpp_1_1button__click__t_html"><div class="ttname"><a href="structdpp_1_1button__click__t.html">dpp::button_click_t</a></div><div class="ttdoc">Click on button.</div><div class="ttdef"><b>Definition:</b> dispatcher.h:703</div></div>
<div class="ttc" id="astructdpp_1_1event__dispatch__t_html_a9ef98cebb9c0a5ab75a4362d1b40fb71"><div class="ttname"><a href="structdpp_1_1event__dispatch__t.html#a9ef98cebb9c0a5ab75a4362d1b40fb71">dpp::event_dispatch_t::from</a></div><div class="ttdeci">discord_client * from</div><div class="ttdoc">Shard the event came from. Note that for some events, notably voice events, this may be nullptr.</div><div class="ttdef"><b>Definition:</b> dispatcher.h:90</div></div>
<div class="ttc" id="astructdpp_1_1interaction__create__t_html_a10553ebb8d10ba58595f825e0a89eb1b"><div class="ttname"><a href="structdpp_1_1interaction__create__t.html#a10553ebb8d10ba58595f825e0a89eb1b">dpp::interaction_create_t::edit_original_response</a></div><div class="ttdeci">void edit_original_response(const message &m, command_completion_event_t callback=utility::log_error()) const</div><div class="ttdoc">Edit original response message for this interaction.</div></div>
<div class="ttc" id="astructdpp_1_1interaction__create__t_html_a8b0c69c156a1e532507a918c13414f14"><div class="ttname"><a href="structdpp_1_1interaction__create__t.html#a8b0c69c156a1e532507a918c13414f14">dpp::interaction_create_t::command</a></div><div class="ttdeci">interaction command</div><div class="ttdoc">command interaction</div><div class="ttdef"><b>Definition:</b> dispatcher.h:678</div></div>
<div class="ttc" id="astructdpp_1_1interaction__create__t_html_aef38626cd24d2212b00ab866509b4d59"><div class="ttname"><a href="structdpp_1_1interaction__create__t.html#aef38626cd24d2212b00ab866509b4d59">dpp::interaction_create_t::co_reply</a></div><div class="ttdeci">dpp::async< dpp::confirmation_callback_t > co_reply() const</div><div class="ttdoc">Acknowledge interaction without displaying a message to the user, for use with button and select menu...</div></div>
<div class="ttc" id="astructdpp_1_1message_html"><div class="ttname"><a href="structdpp_1_1message.html">dpp::message</a></div><div class="ttdoc">Represents messages sent and received on Discord.</div><div class="ttdef"><b>Definition:</b> message.h:2071</div></div>
<div class="ttc" id="astructdpp_1_1ready__t_html"><div class="ttname"><a href="structdpp_1_1ready__t.html">dpp::ready_t</a></div><div class="ttdoc">Session ready.</div><div class="ttdef"><b>Definition:</b> dispatcher.h:961</div></div>
<div class="ttc" id="astructdpp_1_1slashcommand__t_html"><div class="ttname"><a href="structdpp_1_1slashcommand__t.html">dpp::slashcommand_t</a></div><div class="ttdoc">User has issued a slash command.</div><div class="ttdef"><b>Definition:</b> dispatcher.h:695</div></div>
</div><!-- fragment --><p >Note that there is a problem with that! If the user never clicks your button, or if the message gets deleted, your coroutine will be stuck waiting... And waiting... Forever until your bot shuts down, occupying a space in memory. This is where the <a class="el" href="expiring-buttons.html">next example</a> comes into play as a solution, with a button that expires with time.</p>
<div class="image">
<img src="waiting_coroutine.jpg" alt=""/>
</div>
</div></div><!-- contents --><script src="https://giscus.app/client.js" data-repo="brainboxdotcc/dpp-comments" data-repo-id="R_kgDOHOY4xg" data-category="General" data-category-id="DIC_kwDOHOY4xs4CRYtj" data-mapping="pathname" data-strict="1" data-reactions-enabled="1" data-emit-metadata="1" data-input-position="top" data-theme="preferred_color_scheme" data-lang="en" data-loading="lazy" crossorigin="anonymous" async></script>
</div><!-- PageDoc -->
</div><!-- doc-content -->
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="example-programs.html">Example Programs</a></li><li class="navelem"><a class="el" href="using-coroutines.html">Using Coroutines</a></li>
</ul>
</div>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-QTH6YHBNG5"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/styles/base16/dracula.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/highlight.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlightjs-line-numbers.js/2.8.0/highlightjs-line-numbers.min.js"></script>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@100&display=swap" rel="stylesheet">
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-QTH6YHBNG5');
$(function() {
$(".fragment").each(function(i,node) {
var $node = $(node);
$node.children(":not(.line)").remove();
$node.html("<pre><code class='stan'>" + $node.text().trim().replaceAll("<", "<").replaceAll(">", ">") + "</code></pre>");
hljs.configure({
languages: ['cpp','diff','cmake','bash','sh','text'],
ignoreUnescapedHTML: true
});
hljs.highlightAll(node);
hljs.initLineNumbersOnLoad(node);
});
$(".fragment").parent().parent().parent().parent().removeClass('doxtable');
});
</script>
<style>
.hljs-ln-code, code, code a, pre.fragment, div.fragment, div.fragment .line, div.fragment span, div.fragment .line a, div.fragment .line span {
font-family: 'JetBrains Mono', monospace !important;
font-size: 0.8rem !important;
}
.fragment {
padding: 0 !important;
margin-top: 0 !important;
margin-bottom: 0 !important;
background: none !important;
border: 0 !important;
}
.hljs-ln-n::before {
content: attr(data-line-number);
padding-right: 1rem !important;
}
table.markdownTable code td, table.markdownTable code th, table.fieldtable code td, table.fieldtable code th, table.doxtable code td, table.doxtable code th {
border: 0 !important;
padding: 0 !important;
}
</style>
<div style="z-index: -9999; position: absolute; right: 0; top: 0; font-size: 0.0001rem;color:transparent;background:none">
<!-- For crawlability of past versions -->
<a href='/10.0.34/'>D++ Library version 10.0.34</a><a href='/10.0.33/'>D++ Library version 10.0.33</a><a href='/10.0.32/'>D++ Library version 10.0.32</a><a href='/10.0.31/'>D++ Library version 10.0.31</a><a href='/10.0.30/'>D++ Library version 10.0.30</a><a href='/10.0.29/'>D++ Library version 10.0.29</a><a href='/10.0.28/'>D++ Library version 10.0.28</a><a href='/10.0.27/'>D++ Library version 10.0.27</a><a href='/10.0.26/'>D++ Library version 10.0.26</a><a href='/10.0.25/'>D++ Library version 10.0.25</a><a href='/10.0.24/'>D++ Library version 10.0.24</a><a href='/10.0.23/'>D++ Library version 10.0.23</a><a href='/10.0.22/'>D++ Library version 10.0.22</a><a href='/10.0.21/'>D++ Library version 10.0.21</a><a href='/10.0.20/'>D++ Library version 10.0.20</a><a href='/10.0.19/'>D++ Library version 10.0.19</a><a href='/10.0.18/'>D++ Library version 10.0.18</a><a href='/10.0.17/'>D++ Library version 10.0.17</a><a href='/10.0.16/'>D++ Library version 10.0.16</a><a href='/10.0.15/'>D++ Library version 10.0.15</a><a href='/10.0.14/'>D++ Library version 10.0.14</a><a href='/10.0.13/'>D++ Library version 10.0.13</a><a href='/10.0.12/'>D++ Library version 10.0.12</a><a href='/10.0.11/'>D++ Library version 10.0.11</a><a href='/10.0.10/'>D++ Library version 10.0.10</a><a href='/10.0.9/'>D++ Library version 10.0.9</a><a href='/10.0.8/'>D++ Library version 10.0.8</a><a href='/10.0.7/'>D++ Library version 10.0.7</a><a href='/10.0.6/'>D++ Library version 10.0.6</a><a href='/10.0.5/'>D++ Library version 10.0.5</a><a href='/10.0.4/'>D++ Library version 10.0.4</a><a href='/10.0.3/'>D++ Library version 10.0.3</a><a href='/10.0.2/'>D++ Library version 10.0.2</a><a href='/10.0.1/'>D++ Library version 10.0.1</a><a href='/10.0.0/'>D++ Library version 10.0.0</a><a href='/9.0.19/'>D++ Library version 9.0.19</a><a href='/9.0.18/'>D++ Library version 9.0.18</a><a href='/9.0.17/'>D++ Library version 9.0.17</a><a href='/9.0.16/'>D++ Library version 9.0.16</a><a href='/9.0.15/'>D++ Library version 9.0.15</a><a href='/9.0.14/'>D++ Library version 9.0.14</a><a href='/9.0.13/'>D++ Library version 9.0.13</a><a href='/9.0.12/'>D++ Library version 9.0.12</a><a href='/9.0.11/'>D++ Library version 9.0.11</a><a href='/9.0.10/'>D++ Library version 9.0.10</a><a href='/9.0.9/'>D++ Library version 9.0.9</a><a href='/9.0.8/'>D++ Library version 9.0.8</a><a href='/9.0.7/'>D++ Library version 9.0.7</a><a href='/9.0.6/'>D++ Library version 9.0.6</a><a href='/9.0.5/'>D++ Library version 9.0.5</a><a href='/9.0.4/'>D++ Library version 9.0.4</a><a href='/9.0.3/'>D++ Library version 9.0.3</a><a href='/9.0.2/'>D++ Library version 9.0.2</a><a href='/9.0.1/'>D++ Library version 9.0.1</a><a href='/9.0.0/'>D++ Library version 9.0.0</a><a href='/1.0.2/'>D++ Library version 1.0.2</a><a href='/1.0.1/'>D++ Library version 1.0.1</a><a href='/1.0.0/'>D++ Library version 1.0.0</a>
</div>
</body>
</html>