<spanid="evennia-server-portal-discord"></span><h1>evennia.server.portal.discord<aclass="headerlink"href="#module-evennia.server.portal.discord"title="Permalink to this headline">¶</a></h1>
<p>The Discord API uses a mix of websockets and REST API endpoints.</p>
<p>In order for this integration to work, you need to have your own
discord bot set up via <aclass="reference external"href="https://discord.com/developers/applications">https://discord.com/developers/applications</a>
with the MESSAGE CONTENT toggle switched on, and your bot token
added to <strong>server/conf/secret_settings.py</strong> as your DISCORD_BOT_TOKEN</p>
<dlclass="py function">
<dtid="evennia.server.portal.discord.random">
<codeclass="sig-prename descclassname">evennia.server.portal.discord.</code><codeclass="sig-name descname">random</code><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span>→ x in the interval [0, 1).<aclass="headerlink"href="#evennia.server.portal.discord.random"title="Permalink to this definition">¶</a></dt>
<emclass="property">class </em><codeclass="sig-prename descclassname">evennia.server.portal.discord.</code><codeclass="sig-name descname">QuietConnectionPool</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">reactor</span></em>, <emclass="sig-param"><spanclass="n">persistent</span><spanclass="o">=</span><spanclass="default_value">True</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#QuietConnectionPool"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.QuietConnectionPool"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">__init__</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">reactor</span></em>, <emclass="sig-param"><spanclass="n">persistent</span><spanclass="o">=</span><spanclass="default_value">True</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#QuietConnectionPool.__init__"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.QuietConnectionPool.__init__"title="Permalink to this definition">¶</a></dt>
<dd><p>Initialize self. See help(type(self)) for accurate signature.</p>
<codeclass="sig-prename descclassname">evennia.server.portal.discord.</code><codeclass="sig-name descname">should_retry</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">status_code</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#should_retry"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.should_retry"title="Permalink to this definition">¶</a></dt>
<dd><p>Helper function to check if the request should be retried later.</p>
<emclass="property">class </em><codeclass="sig-prename descclassname">evennia.server.portal.discord.</code><codeclass="sig-name descname">DiscordWebsocketServerFactory</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">sessionhandler</span></em>, <emclass="sig-param"><spanclass="o">*</span><spanclass="n">args</span></em>, <emclass="sig-param"><spanclass="o">**</span><spanclass="n">kwargs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#DiscordWebsocketServerFactory"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.DiscordWebsocketServerFactory"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">initialDelay</code><emclass="property"> = 1</em><aclass="headerlink"href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.initialDelay"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">factor</code><emclass="property"> = 1.5</em><aclass="headerlink"href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.factor"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">maxDelay</code><emclass="property"> = 60</em><aclass="headerlink"href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.maxDelay"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">noisy</code><emclass="property"> = False</em><aclass="headerlink"href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.noisy"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">gateway</code><emclass="property"> = None</em><aclass="headerlink"href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.gateway"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">resume_url</code><emclass="property"> = None</em><aclass="headerlink"href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.resume_url"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">is_connecting</code><emclass="property"> = False</em><aclass="headerlink"href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.is_connecting"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">__init__</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">sessionhandler</span></em>, <emclass="sig-param"><spanclass="o">*</span><spanclass="n">args</span></em>, <emclass="sig-param"><spanclass="o">**</span><spanclass="n">kwargs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#DiscordWebsocketServerFactory.__init__"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.__init__"title="Permalink to this definition">¶</a></dt>
<dd><p>In addition to all arguments to the constructor of
<codeclass="sig-name descname">get_gateway_url</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="o">*</span><spanclass="n">args</span></em>, <emclass="sig-param"><spanclass="o">**</span><spanclass="n">kwargs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#DiscordWebsocketServerFactory.get_gateway_url"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.get_gateway_url"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">websocket_init</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">payload</span></em>, <emclass="sig-param"><spanclass="o">*</span><spanclass="n">args</span></em>, <emclass="sig-param"><spanclass="o">**</span><spanclass="n">kwargs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#DiscordWebsocketServerFactory.websocket_init"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.websocket_init"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">buildProtocol</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">addr</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#DiscordWebsocketServerFactory.buildProtocol"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.buildProtocol"title="Permalink to this definition">¶</a></dt>
<dd><p>Build new instance of protocol</p>
<dlclass="field-list simple">
<dtclass="field-odd">Parameters</dt>
<ddclass="field-odd"><p><strong>addr</strong> (<em>str</em>) – Not used, using factory/settings data</p>
<codeclass="sig-name descname">startedConnecting</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">connector</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#DiscordWebsocketServerFactory.startedConnecting"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.startedConnecting"title="Permalink to this definition">¶</a></dt>
<dd><p>Tracks reconnections for debugging.</p>
<dlclass="field-list simple">
<dtclass="field-odd">Parameters</dt>
<ddclass="field-odd"><p><strong>connector</strong> (<em>Connector</em>) – Represents the connection.</p>
<codeclass="sig-name descname">reconnect</code><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#DiscordWebsocketServerFactory.reconnect"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.reconnect"title="Permalink to this definition">¶</a></dt>
<dd><p>Force a reconnection of the bot protocol. This requires
de-registering the session and then reattaching a new one.</p>
<codeclass="sig-name descname">start</code><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#DiscordWebsocketServerFactory.start"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.start"title="Permalink to this definition">¶</a></dt>
<emclass="property">class </em><codeclass="sig-prename descclassname">evennia.server.portal.discord.</code><codeclass="sig-name descname">DiscordClient</code><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#DiscordClient"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.DiscordClient"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">nextHeartbeatCall</code><emclass="property"> = None</em><aclass="headerlink"href="#evennia.server.portal.discord.DiscordClient.nextHeartbeatCall"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">pending_heartbeat</code><emclass="property"> = False</em><aclass="headerlink"href="#evennia.server.portal.discord.DiscordClient.pending_heartbeat"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">heartbeat_interval</code><emclass="property"> = None</em><aclass="headerlink"href="#evennia.server.portal.discord.DiscordClient.heartbeat_interval"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">last_sequence</code><emclass="property"> = 0</em><aclass="headerlink"href="#evennia.server.portal.discord.DiscordClient.last_sequence"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">session_id</code><emclass="property"> = None</em><aclass="headerlink"href="#evennia.server.portal.discord.DiscordClient.session_id"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">discord_id</code><emclass="property"> = None</em><aclass="headerlink"href="#evennia.server.portal.discord.DiscordClient.discord_id"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">__init__</code><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#DiscordClient.__init__"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.DiscordClient.__init__"title="Permalink to this definition">¶</a></dt>
<dd><p>Initialize self. See help(type(self)) for accurate signature.</p>
<codeclass="sig-name descname">at_login</code><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#DiscordClient.at_login"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.DiscordClient.at_login"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">onOpen</code><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#DiscordClient.onOpen"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.DiscordClient.onOpen"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">onMessage</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">payload</span></em>, <emclass="sig-param"><spanclass="n">isBinary</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#DiscordClient.onMessage"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.DiscordClient.onMessage"title="Permalink to this definition">¶</a></dt>
<dd><p>Callback fired when a complete WebSocket message was received.</p>
<dlclass="field-list simple">
<dtclass="field-odd">Parameters</dt>
<ddclass="field-odd"><ulclass="simple">
<li><p><strong>payload</strong> (<em>bytes</em>) – The WebSocket message received.</p></li>
<li><p><strong>isBinary</strong> (<em>bool</em>) – Flag indicating whether payload is binary or
<codeclass="sig-name descname">onClose</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">wasClean</span></em>, <emclass="sig-param"><spanclass="n">code</span><spanclass="o">=</span><spanclass="default_value">None</span></em>, <emclass="sig-param"><spanclass="n">reason</span><spanclass="o">=</span><spanclass="default_value">None</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#DiscordClient.onClose"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.DiscordClient.onClose"title="Permalink to this definition">¶</a></dt>
<dd><p>This is executed when the connection is lost for whatever
reason. it can also be called directly, from the disconnect
method.</p>
<dlclass="field-list simple">
<dtclass="field-odd">Parameters</dt>
<ddclass="field-odd"><ulclass="simple">
<li><p><strong>wasClean</strong> (<em>bool</em>) –<strong>**True**</strong> if the WebSocket was closed cleanly.</p></li>
<li><p><strong>code</strong> (<em>int</em><em> or </em><em>None</em>) – Close status as sent by the WebSocket peer.</p></li>
<li><p><strong>reason</strong> (<em>str</em><em> or </em><em>None</em>) – Close reason as sent by the WebSocket peer.</p></li>
<codeclass="sig-name descname">post_response</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">body</span></em>, <emclass="sig-param"><spanclass="o">**</span><spanclass="n">kwargs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#DiscordClient.post_response"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.DiscordClient.post_response"title="Permalink to this definition">¶</a></dt>
<dd><p>Process the response from sending a POST request</p>
<codeclass="sig-name descname">handle_error</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">data</span></em>, <emclass="sig-param"><spanclass="o">**</span><spanclass="n">kwargs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#DiscordClient.handle_error"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.DiscordClient.handle_error"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">resume</code><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#DiscordClient.resume"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.DiscordClient.resume"title="Permalink to this definition">¶</a></dt>
<dd><p>Called after a reconnection to re-identify and replay missed events</p>
<codeclass="sig-name descname">disconnect</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">reason</span><spanclass="o">=</span><spanclass="default_value">None</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#DiscordClient.disconnect"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.DiscordClient.disconnect"title="Permalink to this definition">¶</a></dt>
<dd><p>Generic hook for the engine to call in order to
disconnect this protocol.</p>
<dlclass="field-list simple">
<dtclass="field-odd">Parameters</dt>
<ddclass="field-odd"><p><strong>reason</strong> (<em>str</em><em> or </em><em>None</em>) – Motivation for the disconnection.</p>
<codeclass="sig-name descname">identify</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="o">*</span><spanclass="n">args</span></em>, <emclass="sig-param"><spanclass="o">**</span><spanclass="n">kwargs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#DiscordClient.identify"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.DiscordClient.identify"title="Permalink to this definition">¶</a></dt>
<dd><p>Send Discord authentication. This should be sent once heartbeats begin.</p>
<codeclass="sig-name descname">connection_ready</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">data</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#DiscordClient.connection_ready"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.DiscordClient.connection_ready"title="Permalink to this definition">¶</a></dt>
<dd><p>Process READY data for relevant bot info.</p>
<codeclass="sig-name descname">doHeartbeat</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="o">*</span><spanclass="n">args</span></em>, <emclass="sig-param"><spanclass="o">**</span><spanclass="n">kwargs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#DiscordClient.doHeartbeat"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.DiscordClient.doHeartbeat"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">send_channel</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">text</span></em>, <emclass="sig-param"><spanclass="n">channel_id</span></em>, <emclass="sig-param"><spanclass="o">**</span><spanclass="n">kwargs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#DiscordClient.send_channel"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.DiscordClient.send_channel"title="Permalink to this definition">¶</a></dt>
<dd><p>Send a message from an Evennia channel to a Discord channel.</p>
<p>Use with session.msg(channel=(message, channel, sender))</p>
<codeclass="sig-name descname">send_nickname</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">text</span></em>, <emclass="sig-param"><spanclass="n">guild_id</span></em>, <emclass="sig-param"><spanclass="n">user_id</span></em>, <emclass="sig-param"><spanclass="o">**</span><spanclass="n">kwargs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#DiscordClient.send_nickname"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.DiscordClient.send_nickname"title="Permalink to this definition">¶</a></dt>
<dd><p>Changes a user’s nickname on a Discord server.</p>
<p>Use with session.msg(nickname=(new_nickname, guild_id, user_id))</p>
<codeclass="sig-name descname">send_role</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">role_id</span></em>, <emclass="sig-param"><spanclass="n">guild_id</span></em>, <emclass="sig-param"><spanclass="n">user_id</span></em>, <emclass="sig-param"><spanclass="o">**</span><spanclass="n">kwargs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#DiscordClient.send_role"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.DiscordClient.send_role"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">send_default</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="o">*</span><spanclass="n">args</span></em>, <emclass="sig-param"><spanclass="o">**</span><spanclass="n">kwargs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#DiscordClient.send_default"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.DiscordClient.send_default"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">data_in</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">data</span></em>, <emclass="sig-param"><spanclass="o">**</span><spanclass="n">kwargs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/portal/discord.html#DiscordClient.data_in"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.portal.discord.DiscordClient.data_in"title="Permalink to this definition">¶</a></dt>
<dd><p>Process incoming data from Discord and sent to the Evennia server</p>