<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Rachel Ombok</title>
    <description>The latest articles on Forem by Rachel Ombok (@rachelombok).</description>
    <link>https://forem.com/rachelombok</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F451674%2F362789db-e510-41fd-ac65-18a35fb4b199.jpeg</url>
      <title>Forem: Rachel Ombok</title>
      <link>https://forem.com/rachelombok</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/rachelombok"/>
    <language>en</language>
    <item>
      <title>How to add Splashscreen and Presplash screen in Renpy</title>
      <dc:creator>Rachel Ombok</dc:creator>
      <pubDate>Mon, 27 Oct 2025 19:45:04 +0000</pubDate>
      <link>https://forem.com/rachelombok/how-to-add-splashscreen-and-presplash-screen-in-renpy-4bl6</link>
      <guid>https://forem.com/rachelombok/how-to-add-splashscreen-and-presplash-screen-in-renpy-4bl6</guid>
      <description>&lt;p&gt;This article is a tutorial explaining how to specify a splashscreen and presplash screen in &lt;a href="https://www.renpy.org/" rel="noopener noreferrer"&gt;Renpy&lt;/a&gt;. Because this took me almost a whole weekend to figure out I decided to make this post so maybe someone else can save some time doing this :)&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a splashscreen? (or presplash screen)
&lt;/h2&gt;

&lt;p&gt;From Renpy themselves; “A &lt;a href="https://www.renpy.org/doc/html/splashscreen_presplash.html#adding-a-splashscreen" rel="noopener noreferrer"&gt;splashscreen&lt;/a&gt; is an image or movie that appears when the game is starting up and before it goes to the menu. Usually these are logos or intro videos.” A &lt;a href="https://www.renpy.org/doc/html/splashscreen_presplash.html#adding-a-presplash" rel="noopener noreferrer"&gt;presplash screen&lt;/a&gt; is an image shown while Ren'py is reading the scripts and launching the game.&lt;/p&gt;

&lt;p&gt;A good usage example of this I can think of is in Grand Theft Auto 5. When you open the game from your console, it first opens with the girl in the red bikini taking a selfie. Then after a few seconds, the GTA V logo appears with police lights, and siren and gunshot noises. This is an example of a presplash screen showing key art of the game as a quick intro as it loads, and then the game logo displays before leading the user into the main menu, or directly into the game.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz70wqhfyymnqncdvdqwr.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz70wqhfyymnqncdvdqwr.webp" alt="gta 5 bikini girl presplash screen"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/y6O2_Jzi328"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding Spashscreen
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Add your splash image to your &lt;code&gt;images&lt;/code&gt; folder, or wherever in your project you keep your images&lt;/li&gt;
&lt;li&gt;Define your image with appropriate styling. My splash image is a webp file that I transformed to display contained within the window, vertically aligned on the page.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;image&lt;/span&gt; &lt;span class="n"&gt;splash&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
   &lt;span class="nc"&gt;Transform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;images/splashscreen.webp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;contain&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;yalign&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Add a &lt;code&gt;splashscreen&lt;/code&gt; label with how you want to display the image. It must be named &lt;code&gt;splashscreen&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;label&lt;/span&gt; &lt;span class="n"&gt;splashscreen&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
   &lt;span class="n"&gt;scene&lt;/span&gt; &lt;span class="n"&gt;black&lt;/span&gt;


   &lt;span class="n"&gt;show&lt;/span&gt; &lt;span class="n"&gt;splash&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;dissolve&lt;/span&gt;
   &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nc"&gt;Pause&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


   &lt;span class="n"&gt;scene&lt;/span&gt; &lt;span class="n"&gt;black&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;dissolve&lt;/span&gt;
   &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nc"&gt;Pause&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


   &lt;span class="k"&gt;return&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The splash screen starts with black, then shows the splash image with a dissolve event, holds it there for 2 seconds, then fades back to black and holds for 1 second before going to the main menu.&lt;/p&gt;

&lt;p&gt;You can also show movie splash screen with something like;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="n"&gt;renpy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;movie_cutscene&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;movie.ogv&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Adding Presplash screen
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Get your image &lt;code&gt;presplash.png&lt;/code&gt; or &lt;code&gt;presplash.jpg&lt;/code&gt; and put it in your game folder , ie &lt;code&gt;myGame/game&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;If you are publishing your game to web, instead put it into your root folder, aka &lt;code&gt;myGame&lt;/code&gt; and name it &lt;code&gt;web-presplash.png&lt;/code&gt; or &lt;code&gt;web-presplash.jpg&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Bonus; &lt;a href="https://www.renpy.org/doc/html/config.html#var-config.minimum_presplash_time" rel="noopener noreferrer"&gt;&lt;code&gt;config.minimum_presplash_time&lt;/code&gt;&lt;/a&gt; will specify the minimum time the presplash should be displayed. It is defaulted to &lt;code&gt;0.0&lt;/code&gt;, but you can override this in your game.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;define&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;minimum_presplash_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;2.0&lt;/span&gt; &lt;span class="c1"&gt;#makes presplash display for at least 2 seconds
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And there you have it! That is how you set your splash and presplash screen in Renpy. &lt;/p&gt;

</description>
      <category>renpy</category>
      <category>python</category>
      <category>gamedev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Build a Discord Bot 👾</title>
      <dc:creator>Rachel Ombok</dc:creator>
      <pubDate>Mon, 24 Jan 2022 16:22:21 +0000</pubDate>
      <link>https://forem.com/rachelombok/build-a-discord-bot-314i</link>
      <guid>https://forem.com/rachelombok/build-a-discord-bot-314i</guid>
      <description>&lt;p&gt;This tutorial is apart of a workshop I hosted for &lt;a href="https://www.starhacks.tech/"&gt;Starhacks&lt;/a&gt; 💫 Watch the full video tutorial &lt;a href="https://www.youtube.com/watch?v=9dnclUWFXXU"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Discord is a powerful messaging platform with great chat capabilities originally &lt;br&gt;
built to serve gaming communities. it has grown to a massive popularity and offers &lt;br&gt;
a lot of customization and autonomy via bots, custom moderation tools and more, &lt;br&gt;
which I’ll show you how to work with! in this tutorial I’ll show you how to set &lt;br&gt;
up a fully customizable Discord bot that can be running on your server in under&lt;br&gt;
 15 minutes. this tutorial is taught using Javascript, but if you are a beginner &lt;br&gt;
 don’t worry! We’ll walk through it together.&lt;/p&gt;

&lt;p&gt;i set &lt;a href="https://github.com/rachelombok/DiscordBotWorkshop"&gt;this repository&lt;/a&gt; up so that anyone can fork or clone it and add their own tokens&lt;br&gt;
and capabilities for their own bot easily, so if you don't want to start from scratch,&lt;br&gt;
fork this repo!&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;a Discord account (&lt;a href="https://discord.com"&gt;sign up here&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;NodeJS(&lt;a href="https://nodejs.org/en/download/"&gt;&lt;code&gt;node&lt;/code&gt;&lt;/a&gt;) and &lt;a href="https://docs.npmjs.com/downloading-and-installing-node-js-and-npm"&gt;&lt;code&gt;npm&lt;/code&gt;&lt;/a&gt; installed&lt;/li&gt;
&lt;li&gt;your favorite IDE 🤩 (VSCode, Notepad++, Webstorm, etc.)
## Workshop Resources&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rachelombok/DiscordBotWorkshop"&gt;Skeleton Base Repo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discord.js.org/#/docs/discord.js/stable/general/welcome"&gt;discord.js Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="//discordbots.org"&gt;discordbots.org&lt;/a&gt; (premade bot examples)
## Steps&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  1.) Creating the Discord bot
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Visit the &lt;a href="https://discordapp.com/developers/applications/"&gt;Discord portal&lt;/a&gt; and click on new application&lt;/li&gt;
&lt;li&gt;Give your application a unique name and click the Create button &lt;/li&gt;
&lt;li&gt;On the left panel, click on the &lt;strong&gt;Bot&lt;/strong&gt; tab and click on &lt;strong&gt;Add Bot&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Now our bot is created and we can invite it to our server!&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2.) Adding the bot to your server
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;On the left panel, navigate to the &lt;strong&gt;OAuth2&lt;/strong&gt; panel and select the bot you just created&lt;/li&gt;
&lt;li&gt;Select the needed permissions for your bot (Read Messages/View Channels, Send Messages, Manage Messages, etc.)&lt;/li&gt;
&lt;li&gt;Copy the generated URL link and paste it into your browser&lt;/li&gt;
&lt;li&gt;After pasting it we can add it to our server by selecting it and clicking the authorize button&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  3.) Creating our Project
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;We can create our project directory from the terminal and start coding it!
&lt;code&gt;mkdir my-bot &amp;amp;&amp;amp; cd my-bot&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Then create the two files that we will work with
&lt;code&gt;touch index.js &amp;amp;&amp;amp; touch config.json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;run &lt;code&gt;npm init&lt;/code&gt; and fill out the questions, this will help us keep track of our project information&lt;/li&gt;
&lt;li&gt;Now open your project in your preferred IDE &lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  4.) DiscordJS basics
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Install these dependencies
&lt;code&gt;npm install discord.js @discordjs/opus --save&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Fill our &lt;a href="https://github.com/rachelombok/DiscordBotWorkshop/blob/master/config.json"&gt;&lt;code&gt;config.json&lt;/code&gt;&lt;/a&gt; file with your command prefix and your bot token. To get the token go back to the Discord portal and copy it from the bot section
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"prefix"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"!"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"token"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your-token"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;In our &lt;code&gt;index.js&lt;/code&gt; file we need to import all our dependencies we installed for our app
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Discord&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;discord.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;prefix&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./config.json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;After that we create our client (bot object) and login using our token
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Intents&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;MessageEmbed&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;discord.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;intents&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Intents&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FLAGS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;GUILDS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Intents&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FLAGS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;GUILD_MESSAGES&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;login&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Add some basic listeners to your bot that will console.log when executed
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;once&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ready&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ready!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;once&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;reconnecting&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Reconnecting!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;once&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;disconnect&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Disconnect!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Test your bot by running &lt;code&gt;node index.js&lt;/code&gt; in your terminal, which should output a 'Ready!' message&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  5.) Reading and Writing Message Commands
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Now that our bot can go online, we can start by giving it the functionality to read chat messages, an event listener, by writing one simple function:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;messageCreate&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Check if the message is from our own bot, or if the message doesn't start with our specified prefix. In these cases, we just return and don't do anything
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;author&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;startsWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prefix&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Afterwards we can add capabilities for messaging to our bot with some conditional statements
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;startsWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;prefix&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;name`&lt;/span&gt;&lt;span class="p"&gt;)){&lt;/span&gt;
    &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Your name is &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;author&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;username&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// sends reply in channel to author&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;startsWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;prefix&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;greeting`&lt;/span&gt;&lt;span class="p"&gt;)){&lt;/span&gt;
    &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello world!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// sends general message to channel&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;startsWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;prefix&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;secret`&lt;/span&gt;&lt;span class="p"&gt;)){&lt;/span&gt;
    &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;author&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Shhh! This is a secret message for you&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// sends direct message to author&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;startsWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;prefix&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;quote`&lt;/span&gt;&lt;span class="p"&gt;)){&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;quoteEmbed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;MessageEmbed&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;setColor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ORANGE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;setTitle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Quote for &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;author&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;username&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;setURL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://discord.js.org/#/docs/discord.js/stable/class/Client&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;setDescription&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;To be, or not to be. That is the question.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;embeds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;quoteEmbed&lt;/span&gt;&lt;span class="p"&gt;]});&lt;/span&gt; &lt;span class="c1"&gt;// sends embedded message to channel&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You need to enter a valid command!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// if invalid command, send this error message to the channel&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  6.) Run Locally 📡
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;to start your bot, run &lt;code&gt;node index.js&lt;/code&gt;, you should see the console message 'Ready' if it is up and running.&lt;/li&gt;
&lt;li&gt;type your commands in the channel where the bot has been invited, and make sure the bot behaves as your programmed it to&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  7.) Pushing to your repository
&lt;/h4&gt;

&lt;p&gt;If you push your repo as is, your secret bot token will be exposed publicly will cause Discord to flag you down and your token will no longer work. To make sure your token stays secure, we need to tell our project to ignore when pushing to our repository. We will also include the &lt;code&gt;node_modules&lt;/code&gt; folder since that is also not needed for pushing our project&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create an environment file to host your variables 
&lt;code&gt;touch .env&lt;/code&gt;, and then add this code block to the file:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TOKEN='your-bot-token'
PREFIX='your-prefix'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Create a gitignore file 
&lt;code&gt;touch .gitignore&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;install the &lt;code&gt;dotenv&lt;/code&gt; dependency\
&lt;code&gt;npm install dotenv&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Since your &lt;code&gt;.env&lt;/code&gt; file was created before the &lt;code&gt;.gitignore&lt;/code&gt;, it is not yet tracking the file. To do so, untrack the cached files with the two commands:\
&lt;code&gt;git rm --cached .env&lt;/code&gt; and &lt;code&gt;git rm --cached node_modules&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;if you've already committed these files and are given an error, try adding &lt;code&gt;-r&lt;/code&gt; to the command:\
&lt;code&gt;git rm -r --cached .env&lt;/code&gt; and &lt;code&gt;git rm -r --cached node_modules&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;now if you run &lt;code&gt;git status&lt;/code&gt; in your terminal, it will show all the files that are untracked in your project&lt;/li&gt;
&lt;li&gt;in &lt;code&gt;index.js&lt;/code&gt;, add &lt;code&gt;require('dotenv').config();&lt;/code&gt; to the top of the file&lt;/li&gt;
&lt;li&gt;instead of importing the config variables from &lt;code&gt;config.json&lt;/code&gt; we can now use the &lt;code&gt;.env&lt;/code&gt; file variables by using:  &lt;code&gt;process.env.TOKEN&lt;/code&gt; and &lt;code&gt;process.env.PREFIX&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;if you are working on a team, you can add the environment variables by going to the &lt;strong&gt;Settings&lt;/strong&gt; tab in your repository, navigating to &lt;strong&gt;Environments&lt;/strong&gt;, and clicking the &lt;strong&gt;New Environments&lt;/strong&gt; button to add the variable secrets&lt;/li&gt;
&lt;li&gt;You can now host your bot on an external service, tutorial links and resources are listed below.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Other Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.freecodecamp.org/news/how-to-create-a-music-bot-using-discord-js-4436f5f3f0f8/"&gt;🤖Guide: How to build a Discord music bot&lt;/a&gt; - Learn how you can create your own custom music bot for your server from scratch!&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.techwithtim.net/tutorials/discord-py/hosting-a-discord-bot-for-free/"&gt;How to Host Discord Bot on Heroku for free&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.writebots.com/discord-bot-hosting/"&gt;Definitive Guide for hosting your Discord Bot&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;if you have any questions or feedback, let me know by messaging me in Discord! (racheletc#1212)&lt;/p&gt;

</description>
      <category>discord</category>
      <category>tutorial</category>
      <category>node</category>
      <category>javascript</category>
    </item>
    <item>
      <title>I came, I saw, I coded!</title>
      <dc:creator>Rachel Ombok</dc:creator>
      <pubDate>Wed, 03 Mar 2021 04:40:27 +0000</pubDate>
      <link>https://forem.com/rachelombok/i-came-i-saw-i-coded-22i6</link>
      <guid>https://forem.com/rachelombok/i-came-i-saw-i-coded-22i6</guid>
      <description>&lt;h2&gt;
  
  
  My most recent achievement was…
&lt;/h2&gt;

&lt;p&gt;... accepting my intern offer for the upcoming Summer! Applying for internships and programs is always stressful and always consumes up my time. If felt good to accept my offer and be done with applying for the rest of the year, and just relax until the summer. I will be a Engineering Intern this Summer at Twitter!&lt;/p&gt;

&lt;h2&gt;
  
  
  Advocating for myself looks like…
&lt;/h2&gt;

&lt;p&gt;... me putting myself first. Sometimes I have often felt like I am obligated to do certain things, complete certain projects, be apart of this certain organization, put out this certain image, but in 2021 I am committing to putting myself first and not doing things I feel obligated to do, but rather things &lt;em&gt;I&lt;/em&gt; want to do. When I put myself first and work on things I actually want to do, the projects I work on have better outcomes and end up motivating me more to be a better programmer. &lt;/p&gt;

&lt;h2&gt;
  
  
  My biggest goal is…
&lt;/h2&gt;

&lt;p&gt;... to be independent and self sufficient. I think that comes with age, but since working remotely in COVID, it makes me anxious to get back out into the world, and living on my own and doing my own thing. &lt;/p&gt;

&lt;h2&gt;
  
  
  My advice for allies to support underrepresented folks who code is...
&lt;/h2&gt;

&lt;p&gt;... be transparent! If you are unsure how to be a good ally, ask how you can support your underrepresented peers and their coding journeys. Being clear and open about things like this will make you a better ally, and you may learn a new way of how to support that you might've not thought of.&lt;/p&gt;

&lt;p&gt;Thank you for reading! If you want to chat, connect with me on  &lt;a href="https://twitter.com/therachelplan"&gt;Twitter!&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
