<?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>DEV Community: Puneet Gopinath</title>
    <description>The latest articles on DEV Community by Puneet Gopinath (@puneetgopinath).</description>
    <link>https://dev.to/puneetgopinath</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%2F590199%2F079dc13f-2001-4ddc-a12a-3f7c533db26a.png</url>
      <title>DEV Community: Puneet Gopinath</title>
      <link>https://dev.to/puneetgopinath</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/puneetgopinath"/>
    <language>en</language>
    <item>
      <title>Deploy NodeJS app on Qovery</title>
      <dc:creator>Puneet Gopinath</dc:creator>
      <pubDate>Mon, 20 Sep 2021 03:31:24 +0000</pubDate>
      <link>https://dev.to/puneetgopinath/deploy-nodejs-app-on-qovery-im5</link>
      <guid>https://dev.to/puneetgopinath/deploy-nodejs-app-on-qovery-im5</guid>
      <description>&lt;p&gt;&lt;strong&gt;Before you begin, this page assumes the following:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You have installed nodejs on your system&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Make your NodeJS app
&lt;/h2&gt;

&lt;p&gt;Make your nodejs app first, if you already have, try test them locally once.&lt;/p&gt;

&lt;p&gt;Here's a simply website coded with express for example:&lt;br&gt;
&lt;/p&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;express&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="s2"&gt;express&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;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/&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;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&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;res&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&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;8080&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;port&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="s2"&gt;`Site running on port &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;port&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="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Make a package.json
&lt;/h2&gt;

&lt;p&gt;Easily make a package.json by using the &lt;code&gt;npm --init&lt;/code&gt; or &lt;code&gt;yarn init&lt;/code&gt; terminal command&lt;/p&gt;

&lt;p&gt;After that's done, you need to add all packages which you use in the package.json by using the &lt;code&gt;npm install --save &amp;lt;package name&amp;gt;&lt;/code&gt; or &lt;code&gt;yarn add &amp;lt;package name&amp;gt;&lt;/code&gt; command&lt;/p&gt;

&lt;h2&gt;
  
  
  Add a Dockerfile
&lt;/h2&gt;

&lt;p&gt;You need a valid Dockerfile to run your nodejs app in qovery. If you are not familiar with Docker, you can take a look to &lt;a href="https://hub.qovery.com/guides/tutorial/how-to-write-a-dockerfile/"&gt;this article&lt;/a&gt;. Here is the content of our Dockerfile.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:16&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /src/user/app
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /src/user/app&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--production&lt;/span&gt;
&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 8080&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["npm", "start"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A small note: this Dockerfile installs node v16, change &lt;code&gt;FROM node:16&lt;/code&gt; to &lt;code&gt;FROM node:&amp;lt;version&amp;gt;&lt;/code&gt; where &lt;code&gt;&amp;lt;version&amp;gt;&lt;/code&gt; is the major version of node you want to install&lt;/p&gt;

&lt;h2&gt;
  
  
  Sign up into Qovery
&lt;/h2&gt;

&lt;p&gt;Now, you need to sign up or sign in on Qovery.&lt;/p&gt;

&lt;p&gt;Sign in to the &lt;a href="https://start.qovery.com"&gt;Qovery web interface&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploy our NodeJS app
&lt;/h2&gt;

&lt;p&gt;Creating a project &lt;code&gt;myapp&lt;/code&gt;.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jOR0PCo9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n5idwmh8768h5fsdxpgf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jOR0PCo9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n5idwmh8768h5fsdxpgf.png" alt="image"&gt;&lt;/a&gt; &lt;br&gt;
Creating an environment &lt;code&gt;main&lt;/code&gt;.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ydtrJ_sk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sg9rsl9j1sv2e3kxp48d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ydtrJ_sk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sg9rsl9j1sv2e3kxp48d.png" alt="image"&gt;&lt;/a&gt; &lt;br&gt;
Creating an app by selecting your nodejs app repository, build mode &amp;gt; Dockerfile, and the port 8080 (not required if you are not hosting a website, for the current example it is required).&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BAvsy9_s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yvqzq9csauffzmudb5zc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BAvsy9_s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yvqzq9csauffzmudb5zc.png" alt="image"&gt;&lt;/a&gt; &lt;br&gt;
And deploy! That's it 🔥... nothing more. Our NodeJS app is ready.&lt;/p&gt;

</description>
      <category>qovery</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Best 5 Discord Moderation bots</title>
      <dc:creator>Puneet Gopinath</dc:creator>
      <pubDate>Fri, 20 Aug 2021 01:27:53 +0000</pubDate>
      <link>https://dev.to/puneetgopinath/best-5-discord-moderation-bots-3pcp</link>
      <guid>https://dev.to/puneetgopinath/best-5-discord-moderation-bots-3pcp</guid>
      <description>&lt;p&gt;If you have a Discord server, then you need a moderation bot to keep that server running. Discord moderation bots help organize your server, and work as a Discord anti spam bot for troublemakers. If you want to keep your server safe without working as a Discord moderator, then you add a moderator bot.&lt;/p&gt;

&lt;p&gt;Of course, there are many different Moderation bots available with different features and strengths. The better anti spam bot for one server may not be the best for another. As such, we have compiled a list of the 5 best Discord moderator bots. Read on to compare the bots and determine which Discord moderator will work best for your server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best Discord Moderation Bots
&lt;/h2&gt;

&lt;h4&gt;
  
  
  1. &lt;a href="https://dyno.gg/bot"&gt;Dyno&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Dyno is a popular moderation bot used on more than 800,000 servers. It has 35 different moderation bot commands that let it warn, mute, deafen, kick, and ban members. It can also work as a role bot to assign roles to users who cause trouble and limit their activities. After banning a user, Dyno can also save their chat messages instead of letting Discord auto-delete them.&lt;/p&gt;

&lt;p&gt;For all of these actions, Dyno records them in their moderation log, which admins and human mods can access and make notes in. Finally, the Dyno Discord bot can lock a channel for a given amount of time, giving admins the chance to clean up the channel or discipline multiple users.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. &lt;a href="https://top.gg/bot/843484459113775114"&gt;Axiol&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Axiol is good enough to moderate your server. It has commands like warn, ban, unban, warn, removewarn, purge and many other. Though axiol isn't in many servers. I have found it as 1 of best Moderation bots. It has features like Automod, Chatbot, Fun, Giveaway, Karma, Moderation, Reaction Roles, Verification, Welcome. It's is 100% free and also &lt;a href="https://github.com/GitBolt/Axiol"&gt;opensource&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3. &lt;a href="https://top.gg/bot/437808476106784770"&gt;Arcane&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Arcane is Already trusted and used in over half a million unique servers, Nearly everything is free, An easy to use dashboard, Reliable/high uptime. It do has features like Leveling, Moderation, Reaction roles, Logging. So it does has less features compared to Axiol. But it I love the Logging or ModLog feature which it has.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. &lt;a href="https://probot.io/"&gt;ProBot&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Wow, probot has a lot of features than those bots above. Why did I list it below? Yes, I listed it below because lot of things is paid. ProBot can also be used to play music, auto-assign roles, and assign XP to members. It offers two paid plans–prime and premium. Prime lets you adjust your music volume, unban all banned users at once, and implement more advanced anti-raid features. Prime costs $2.50/month or $24.99/year. Premium includes the above features while also letting you change the name and avatar of your server’s ProBot. It costs $9.99/mo or $79.99/yr.&lt;/p&gt;

&lt;h4&gt;
  
  
  5. &lt;a href="https://welcome-bot.github.io/"&gt;Welcome-Bot&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Welcome-Bot already is in more than 1000 servers and has cool features like Moderation, ModLog, Economy, Welcome &amp;amp; Goodbye logs, Fun, Music. And is also 100% free and &lt;a href="https://github.com/Welcome-Bot/welcome-bot/"&gt;opensource&lt;/a&gt;. Why does it come in the last? Cuz it's my bot 😂&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to create a README for your GitHub profile</title>
      <dc:creator>Puneet Gopinath</dc:creator>
      <pubDate>Thu, 13 May 2021 13:10:57 +0000</pubDate>
      <link>https://dev.to/puneetgopinath/how-to-create-a-readme-for-your-github-profile-4mnh</link>
      <guid>https://dev.to/puneetgopinath/how-to-create-a-readme-for-your-github-profile-4mnh</guid>
      <description>&lt;p&gt;Did you know? You can create your very own personal README for your GitHub profile! It is a sort of secret feature of GitHub which is now known to a considerable number of people!&lt;/p&gt;

&lt;p&gt;You can view an example on my &lt;a href="https://github.com/PuneetGopinath"&gt;GitHub profile&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, if you still don’t know about this feature, you are at right page.&lt;/p&gt;

&lt;p&gt;This README.md file greatly enhances your GitHub profile, beautifies it, and allows you to showcase your stats and achievements in your desired fashion!&lt;/p&gt;

&lt;p&gt;So the very first thing to do is go to your GitHub page and click on the ‘+’ symbol on the top right corner and click on new repository.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NQ5J0j0e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1050/1%2AtG4gcHY4zZkh-lDg2NDjIw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NQ5J0j0e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1050/1%2AtG4gcHY4zZkh-lDg2NDjIw.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next step is to enter the repository name. The &lt;strong&gt;repository name&lt;/strong&gt; should be the &lt;strong&gt;same&lt;/strong&gt; as your &lt;strong&gt;GitHub username&lt;/strong&gt;. As you type the repository name, you will see a box that pops below your repository saying that this is a secret feature.&lt;/p&gt;

&lt;p&gt;Next, make sure that the repository is public and &lt;em&gt;Add a README file checkbox&lt;/em&gt; is checked.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CPcDzCcG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1050/1%2AXgljVt2rx3vTkfcWJTICcw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CPcDzCcG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1050/1%2AXgljVt2rx3vTkfcWJTICcw.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now click on the &lt;em&gt;Create Repository&lt;/em&gt; button.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;README.md&lt;/code&gt; file of this repository becomes your profile readme. You can edit this in markdown format and decorate your readme however you want.&lt;/p&gt;

&lt;p&gt;It is often seen that people also add workflows to automatically update their readme file continuously.&lt;/p&gt;

&lt;p&gt;So go ahead and decorate your GitHub profile with your information and achievements.&lt;/p&gt;

&lt;p&gt;My &lt;a href="https://github.com/PuneetGopinath/PuneetGopinath"&gt;GitHub profile repository&lt;/a&gt;&lt;br&gt;
Please star my repository if you like it.&lt;br&gt;
Follow me on &lt;a href="https://github.com/PuneetGopinath"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

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