<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[WavePlay Blog]]></title><description><![CDATA[The official WavePlay blog.]]></description><link>https://blog.waveplay.com/</link><image><url>https://blog.waveplay.com/favicon.png</url><title>WavePlay Blog</title><link>https://blog.waveplay.com/</link></image><generator>Ghost 5.60</generator><lastBuildDate>Fri, 13 Feb 2026 03:45:15 GMT</lastBuildDate><atom:link href="https://blog.waveplay.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Hacktoberfest 2024: Code Templates and Win Rewards (Week 2)]]></title><description><![CDATA[<p><strong>Welcome to Week 2 of Hacktoberfest 2024!</strong> This week our spotlight is one of the most accessible and creative ways to contribute to <strong><a href="https://robojs.dev/?ref=blog.waveplay.com" rel="noopener noreferrer">Robo.js</a></strong> during Hacktoberfest: <a href="https://robojs.dev/templates/overview?ref=blog.waveplay.com" rel="noopener noreferrer"><strong>Templates</strong></a>.</p><p>Not only are templates fun to make, but they also help others get started faster, and, of course, they qualify you for</p>]]></description><link>https://blog.waveplay.com/hacktoberfest-2024-week-2/</link><guid isPermaLink="false">6708d39d9356213df3392b0e</guid><dc:creator><![CDATA[WavePlay Staff]]></dc:creator><pubDate>Fri, 11 Oct 2024 07:29:24 GMT</pubDate><media:content url="https://blog.waveplay.com/content/images/2024/10/playxlabs_Drawing_on_a_blank_art_canvas_hand_holding_pen_agains_7c0581ce-85f3-4871-aa8e-525256e08849.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.waveplay.com/content/images/2024/10/playxlabs_Drawing_on_a_blank_art_canvas_hand_holding_pen_agains_7c0581ce-85f3-4871-aa8e-525256e08849.png" alt="Hacktoberfest 2024: Code Templates and Win Rewards (Week 2)"><p><strong>Welcome to Week 2 of Hacktoberfest 2024!</strong> This week our spotlight is one of the most accessible and creative ways to contribute to <strong><a href="https://robojs.dev/?ref=blog.waveplay.com" rel="noopener noreferrer">Robo.js</a></strong> during Hacktoberfest: <a href="https://robojs.dev/templates/overview?ref=blog.waveplay.com" rel="noopener noreferrer"><strong>Templates</strong></a>.</p><p>Not only are templates fun to make, but they also help others get started faster, and, of course, they qualify you for <strong>free Discord Nitro</strong>. Top contributors are also in the running for an <strong>exclusive Robo.js Hacktoberfest 2024 T-Shirt</strong> and other prizes. &#x1F381;</p><p>For more details, check out the main event page.</p><ul><li><a href="https://roboplay.dev/hacktoberfest?ref=blog.waveplay.com" rel="noopener noreferrer"><strong>Hacktoberfest 2024</strong></a></li></ul><blockquote><strong>Robo.js</strong> is a framework that helps developers easily build a <strong><a href="https://robojs.dev/discord-bots/getting-started?ref=blog.waveplay.com" rel="noopener noreferrer">Discord Bot</a></strong>, <strong><a href="https://robojs.dev/discord-activities/getting-started?ref=blog.waveplay.com" rel="noopener noreferrer">Discord Activity</a></strong>, or <strong><a href="https://robojs.dev/templates/overview?ref=blog.waveplay.com#web-apps" rel="noopener noreferrer">Web App</a></strong>.</blockquote><h2 id="%F0%9F%93%A6-what-are-templates">&#x1F4E6; What Are Templates?</h2><p>Templates are boilerplate projects that give others a head start by providing a solid foundation to build on. They make it easy for anyone to spin up a project like a without starting from scratch. Using <strong>Robo.js</strong>, you can create templates that include all sorts of features&#x2014;perfect for getting someone off the ground quickly.</p><p>Here are some ideas to get you started:</p><h3 id="discord-activities">Discord Activities</h3><ul><li><strong>Game Engine Template</strong>: Create a starter template that integrates Robo.js with your favorite game engine, like Unity or Unreal Engine. This will help others set up Discord activities that use game engines with minimal configuration.</li></ul><h3 id="discord-bots">Discord Bots</h3><ul><li><strong>Music Bot Template</strong>: Build a music bot template that plays music from external platforms. This could be a popular project for those wanting to add a bit of life to their Discord servers.</li></ul><h3 id="other-suggestions">Other Suggestions</h3><ul><li><strong>Integration Templates</strong>: Build templates that connect <strong>Robo.js</strong> with platforms like <strong><a href="https://www.notion.so/?ref=blog.waveplay.com" rel="noopener noreferrer">Notion</a></strong> or <strong><a href="https://betterstack.com/?ref=blog.waveplay.com" rel="noopener noreferrer">Better Stack</a></strong>. These integrations make it easy for others to use Robo.js alongside their favorite tools.</li></ul><p>For more inspiration, check out the entire <a href="https://robojs.dev/templates/overview?ref=blog.waveplay.com" rel="noopener noreferrer"><strong>Templates Collection</strong></a>.</p><h2 id="%E2%9C%A8-getting-started">&#x2728; Getting Started</h2><p>Getting started is simple. Run the following command to set up a new <strong>Robo.js</strong> project:<br></p><pre><code>npx create-robo &lt;project-name&gt;
</code></pre><p>Modify it, add features, and when you&apos;re ready, submit a pull request to the <strong><a href="https://github.com/Wave-Play/robo.js?ref=blog.waveplay.com" rel="noopener noreferrer">Robo.js repository</a></strong> to qualify for the rewards. Creating templates is an easy way to get your feet wet, help others, and potentially win prizes! &#x1F381;</p><ul><li><a href="https://github.com/Wave-Play/robo.js/pulls?ref=blog.waveplay.com" rel="noopener noreferrer"><strong>GitHub</strong>: Submit a Pull Request</a></li><li><a href="https://roboplay.dev/discord?ref=blog.waveplay.com" rel="noopener noreferrer"><strong>Discord</strong>: Join the Community</a></li></ul><p>We can&apos;t wait to see the creative templates you come up with. Remember, the more people who contribute, the better the rewards&#x2014;so invite your friends to participate too! &#x1F680;</p><h2 id="%F0%9F%93%A3-spread-the-word">&#x1F4E3; Spread the Word!</h2><p>Share this event with your friends and help us reach our milestones. The more participants we have, the better the rewards for everyone. Let&apos;s make Hacktoberfest 2024 the best one yet! &#x1F680;</p><p>If you have any questions or need help getting started, don&apos;t hesitate to reach out on our <strong><a href="https://roboplay.dev/discord?ref=blog.waveplay.com" rel="noopener noreferrer">Discord Server</a></strong>. We&apos;re excited to see what you create!</p><ul><li><a href="https://roboplay.dev/discord?ref=blog.waveplay.com" rel="noopener noreferrer"><strong>Discord</strong>: Join the Community</a></li></ul><p><em>Happy coding and happy Hacktoberfest! &#x1F389;</em></p>]]></content:encoded></item><item><title><![CDATA[Hacktoberfest 2024: Create Discord Features or Videos to Win Rewards 🎉]]></title><description><![CDATA[<p>&#x1F389; <strong>Welcome to Hacktoberfest 2024!</strong> &#x1F389;</p><p>The time has come to show off your creativity and win free stuff! Ever built a Discord bot, activity, or website? Don&apos;t feel confident coding but like making videos about code? This is your time to shine! &#x1F31F;</p><p>Every participant gets free</p>]]></description><link>https://blog.waveplay.com/hacktoberfest-2024/</link><guid isPermaLink="false">66fcd6cd9356213df3392afe</guid><category><![CDATA[Robo.js]]></category><dc:creator><![CDATA[WavePlay Staff]]></dc:creator><pubDate>Wed, 02 Oct 2024 05:16:04 GMT</pubDate><media:content url="https://blog.waveplay.com/content/images/2024/10/hacktoberfest-2024.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.waveplay.com/content/images/2024/10/hacktoberfest-2024.png" alt="Hacktoberfest 2024: Create Discord Features or Videos to Win Rewards &#x1F389;"><p>&#x1F389; <strong>Welcome to Hacktoberfest 2024!</strong> &#x1F389;</p><p>The time has come to show off your creativity and win free stuff! Ever built a Discord bot, activity, or website? Don&apos;t feel confident coding but like making videos about code? This is your time to shine! &#x1F31F;</p><p>Every participant gets free <strong>Discord Nitro</strong>. Top contributors get an <strong>exclusive Robo.js Hacktoberfest 2024 T-Shirt</strong> and more. The more people participate, the more and better prizes we&apos;ll give out. &#x1F381;</p><h2 id="%E2%9C%A8-what-is-robojs">&#x2728; What is Robo.js?</h2><p><strong><a href="https://robojs.dev/?ref=blog.waveplay.com" rel="noopener noreferrer">Robo.js</a></strong> is a framework for building <strong><a href="https://robojs.dev/discord-bots/getting-started?ref=blog.waveplay.com" rel="noopener noreferrer">Discord Bots</a></strong>, <strong><a href="https://robojs.dev/discord-activities/getting-started?ref=blog.waveplay.com" rel="noopener noreferrer">Discord Activities</a></strong>, and <strong><a href="https://robojs.dev/templates/overview?ref=blog.waveplay.com#web-apps" rel="noopener noreferrer">Web Apps</a></strong>. It simplifies the process by providing an ecosystem of plugins and features to help you build your project faster and more efficiently. It&apos;s simple, straightforward to use, and <strong><a href="https://robojs.dev/hosting/overview?ref=blog.waveplay.com" rel="noopener noreferrer">easy to host</a></strong>.</p><p>Here&apos;s what you can expect:</p><ul><li><strong><a href="https://robojs.dev/plugins/directory?ref=blog.waveplay.com" rel="noopener noreferrer">Ecosystem</a></strong>: A growing ecosystem of plugins, templates, and tools to help you build faster with less effort.</li><li><strong><a href="https://robojs.dev/robojs/flashcore?ref=blog.waveplay.com" rel="noopener noreferrer">Integrated Database</a></strong>: Robo.js has a built-in KV database that can be pointed to any data source via adapters.</li><li><strong><a href="https://robojs.dev/robojs/typescript?ref=blog.waveplay.com" rel="noopener noreferrer">TypeScript Support</a></strong>: TypeScript works out of the box, so you can use it without any additional setup.</li></ul><p>Check out our <strong><a href="https://robojs.dev/getting-started?ref=blog.waveplay.com" rel="noopener noreferrer">Documentation</a></strong> for more.</p><ul><li><a href="https://robojs.dev/getting-started?ref=blog.waveplay.com" rel="noopener noreferrer"><strong>Documentation</strong>: Getting Started</a></li></ul><blockquote><strong>Note</strong>: <strong>Robo.js</strong> does <em>not</em> replace <strong>Discord.js</strong> for bots. It&apos;s a higher-level framework that allows you to build more complex projects with less effort. Use your favorite libraries and tools alongside Robo.js!</blockquote><h2 id="%F0%9F%8E%81-rewards">&#x1F381; Rewards</h2><p>Depending on the number of participants, we&apos;ll give out more and better prizes.</p><h3 id="starting-rewards">Starting Rewards</h3><ul><li><strong>Exclusive Robo.js Hacktoberfest 2024 T-Shirt</strong> for top 3 contributors</li><li><strong>Free Discord Nitro</strong> for everyone who makes a meaningful contribution, while supplies last.</li></ul><h3 id="stretch-rewards">Stretch Rewards</h3><ul><li><strong>Over 10 Participants</strong>: We include a free month of <strong>RoboPlay</strong> for the top 3 contributors.</li><li><strong>Over 25 Participants</strong>: We expand the top contributor rewards to include the top 5 participants.</li><li><strong>Over 50 Participants</strong>: The top 5 get to upgrade their T-Shirt to a higher prize (yet to be announced).</li><li><strong>Over 75 Participants</strong>: All top participants get free event stickers.</li><li><strong>Over 100 Participants</strong>: We expand the top contributor rewards to include the top 10 participants.</li></ul><p><em>Share this event with your friends and help us reach these milestones and unlock more rewards! &#x1F680;</em></p><h2 id="%F0%9F%9A%80-how-to-participate">&#x1F680; How to Participate</h2><p>Contribute plugins, templates, video content, or even features to the core framework. You can contribute as many times as you want, and each contribution counts as an entry for the prizes. The more you contribute, the more likely you are to win.</p><p>Sound complicated? It&apos;s really not! Run this in your terminal to get started:<br></p><pre><code>npx create-robo &lt;project-name&gt;
</code></pre><p>Ta-dah! You now have a <strong>Robo.js</strong> project. Modify it, add features, and submit a pull request to qualify! &#x1F389;</p><ul><li><a href="https://github.com/Wave-Play/robo.js/pulls?ref=blog.waveplay.com" rel="noopener noreferrer"><strong>GitHub</strong>: Submit a Pull Request</a></li><li><a href="https://roboplay.dev/discord?ref=blog.waveplay.com" rel="noopener noreferrer"><strong>Discord</strong>: Join the Community</a></li></ul><p>Each type of contribution is worth a different amount of entries. They must be meaningful and add value to the community. Things like plugins that add &quot;Hello World&quot; commands won&apos;t count, but a plugin that adds a new way to interact will, even if it&apos;s not for Discord. Check out some ideas below!</p><h4 id="%F0%9F%90%9E-bug-fix-1-point">&#x1F41E; Bug Fix (1 point)</h4><p>Fix a bug in the core framework or a plugin. It&apos;s a small contribution, but it&apos;s a start! Documentation fixes don&apos;t count, but they&apos;re still appreciated.</p><ul><li><a href="https://github.com/Wave-Play/robo.js/blob/main/CONTRIBUTING.md?ref=blog.waveplay.com" rel="noopener noreferrer"><strong>GitHub</strong>: How to Contribute</a></li></ul><h4 id="%F0%9F%93%A6-template-2-points">&#x1F4E6; Template (2 points)</h4><p>Templates are boilerplate projects that help you get started with a specific type of project. For example, a template could be a Discord bot with a music feature or a Discord activity with a quiz.</p><p>Use the <code>create-robo</code> command to create a new project and modify it to your liking. Once you&apos;re done, submit a pull request to the <strong>Robo.js</strong> repository. Check out our <strong><a href="https://robojs.dev/templates/overview?ref=blog.waveplay.com" rel="noopener noreferrer">Template Collection</a></strong> for inspiration!</p><ul><li><a href="https://robojs.dev/templates/overview?ref=blog.waveplay.com" rel="noopener noreferrer"><strong>Documentation</strong>: Template Collection</a></li></ul><h4 id="%F0%9F%A7%A9-plugin-5-points">&#x1F9E9; Plugin (5 points)</h4><p>Plugins are NPM packages that instantly add features to <strong>Robo.js</strong> projects. For example, a plugin could add a new command or a new way to interact with <strong>Discord</strong>.</p><p>Creating a plugin is no different from creating a normal <strong>Robo.js</strong> project, except that it&apos;s packaged as an NPM package. See our <strong><a href="https://robojs.dev/plugins/directory?ref=blog.waveplay.com" rel="noopener noreferrer">Plugin Directory</a></strong> for inspiration!</p><ul><li><a href="https://robojs.dev/plugins/create?ref=blog.waveplay.com" rel="noopener noreferrer"><strong>Documentation</strong>: Creating Plugins</a></li></ul><h4 id="%F0%9F%8E%A5-video-tutorial-5-points">&#x1F3A5; Video Tutorial (5 points)</h4><p>Video tutorials are a great way to teach others how to use <strong>Robo.js</strong> or how to build something cool with it. They can be as simple as a screen recording with voiceover or as complex as a full-blown tutorial series.</p><p>Upload your video to YouTube and submit a pull request to the <strong>Robo.js</strong> repository with a link to your video.</p><h4 id="%F0%9F%8C%9F-core-framework-feature-7-points">&#x1F31F; Core Framework Feature (7 points)</h4><p>This is the big one! Add a new feature to the core <strong>Robo.js</strong> framework. Please discuss your idea with the community first to make sure it&apos;s a good fit, and make sure to follow the <strong><a href="https://github.com/Wave-Play/robo.js/blob/main/CONTRIBUTING.md?ref=blog.waveplay.com" rel="noopener noreferrer">Contributing Guidelines</a></strong>. It may also help to learn about the <strong><a href="https://robojs.dev/robojs/internals?ref=blog.waveplay.com" rel="noopener noreferrer">Robo Internals</a></strong> first.</p><p>We&apos;re strict about this one, but that&apos;s how we keep things high-quality. If you&apos;re not sure, start with a plugin or a template! Some ideas are best left as plugins, so don&apos;t be discouraged if your feature doesn&apos;t make it into the core framework.</p><ul><li><a href="https://github.com/Wave-Play/robo.js/issues?ref=blog.waveplay.com" rel="noopener noreferrer"><strong>GitHub</strong>: Issues</a></li></ul><h2 id="%F0%9F%8E%A8-creation-ideas">&#x1F3A8; Creation Ideas</h2><p>Not sure what to contribute? Here are some ideas to get you started.</p><h4 id="%F0%9F%8E%AE-discord-activities">&#x1F3AE; Discord Activities</h4><ul><li><strong>Game Engine</strong>: Create a template of your favorite game engine, like Unity or Unreal Engine, for <strong>Robo.js</strong>.</li><li><strong>Live Whiteboard</strong>: Create a plugin that allows users to draw on a shared canvas in real-time, built with <strong><a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSocket?ref=blog.waveplay.com" rel="noopener noreferrer">WebSockets</a></strong> or <strong><a href="https://robojs.dev/plugins/sync?ref=blog.waveplay.com" rel="noopener noreferrer">@robojs/sync</a></strong>.</li><li><strong>Video Tutorial</strong>: Create a video tutorial on how to build a Discord activity with <strong>Robo.js</strong>. You could cover the basics, like setting up a project, or more advanced topics, like adding multiplayer support.</li></ul><h4 id="%F0%9F%A4%96-discord-bots">&#x1F916; Discord Bots</h4><ul><li><strong>Music Bot</strong>: Create a template for a music bot that can play music from an external platform.</li><li><strong>Leveling System</strong>: Create a plugin that adds a leveling system to your Discord bot. Users can earn XP and level up by chatting in your server.</li><li><strong>Video Tutorial</strong>: Create a video tutorial on how to build a Discord bot with <strong>Robo.js</strong>. You could cover the basics, like setting up a project, or more advanced topics, modals and embeds.</li></ul><h4 id="other-suggestions">Other Suggestions</h4><ul><li><strong>Integration Templates</strong>: Create templates for integrating <strong>Robo.js</strong> with other platforms, like <strong><a href="https://betterstack.com/?ref=blog.waveplay.com" rel="noopener noreferrer">Better Stack</a></strong> or <strong><a href="https://www.notion.so/?ref=blog.waveplay.com" rel="noopener noreferrer">Notion</a></strong>.</li><li><strong>Bot Dashboard</strong>: Create a plugin that adds a web dashboard to your Discord bot. Users could configure settings, view logs, and more. Could even be viewed as a Discord Activity!</li><li><strong>Video Showcase</strong>: Create a video showcasing your favorite <strong>Robo.js</strong> project. Maybe it&apos;s a bot, an activity, or a web app. Show off what you&apos;ve built and how it works!</li></ul><p></p><ul><li><a href="https://robojs.dev/templates/overview?ref=blog.waveplay.com" rel="noopener noreferrer"><strong>Documentation</strong>: Plugin Directory</a></li><li><a href="https://robojs.dev/templates/overview?ref=blog.waveplay.com" rel="noopener noreferrer"><strong>Documentation</strong>: Template Collection</a></li></ul><h2 id="spread-the-word">Spread the Word!</h2><p>Share this event with your friends and help us reach our milestones! The more participants we have, the better the rewards for everyone. Let&apos;s make Hacktoberfest 2024 the best one yet! &#x1F680;</p><p>If you have any questions or need help getting started, don&apos;t hesitate to reach out on our <strong><a href="https://roboplay.dev/discord?ref=blog.waveplay.com" rel="noopener noreferrer">Discord Server</a></strong>. We&apos;re excited to see what you create!</p><ul><li><a href="https://roboplay.dev/discord?ref=blog.waveplay.com" rel="noopener noreferrer"><strong>Discord</strong>: Join the Community</a></li></ul><p><em>Happy coding and happy Hacktoberfest! &#x1F389;</em></p>]]></content:encoded></item><item><title><![CDATA[🛠 Missing Launch Button in your Discord Activity? Fix the Entry Point Command!]]></title><description><![CDATA[<p>Got a fancy new <strong><a href="https://robojs.dev/discord-activities/getting-started?ref=blog.waveplay.com" rel="noopener noreferrer">Discord Activity</a></strong> but found that your Launch button went missing? We&apos;ve got a patch for that!</p><p>This happens when your <strong>Discord App</strong> is too old to have it, or if you&apos;ve acidentally deleted it when, say, cleaning up your <strong><a href="https://robojs.dev/discord-bots/getting-started?ref=blog.waveplay.com" rel="noopener noreferrer">Discord Bot&apos;</a></strong></p>]]></description><link>https://blog.waveplay.com/discord-activity-entry-point-fix/</link><guid isPermaLink="false">66fb91039356213df3392aef</guid><category><![CDATA[Robo.js]]></category><category><![CDATA[Plugin]]></category><dc:creator><![CDATA[WavePlay Staff]]></dc:creator><pubDate>Tue, 01 Oct 2024 06:06:29 GMT</pubDate><media:content url="https://blog.waveplay.com/content/images/2024/10/playxlabs_Summoning_rectangular_portal_door._Cosmic_background._9840ef0c-ac34-4b29-998b-866f93ee7162.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.waveplay.com/content/images/2024/10/playxlabs_Summoning_rectangular_portal_door._Cosmic_background._9840ef0c-ac34-4b29-998b-866f93ee7162.png" alt="&#x1F6E0; Missing Launch Button in your Discord Activity? Fix the Entry Point Command!"><p>Got a fancy new <strong><a href="https://robojs.dev/discord-activities/getting-started?ref=blog.waveplay.com" rel="noopener noreferrer">Discord Activity</a></strong> but found that your Launch button went missing? We&apos;ve got a patch for that!</p><p>This happens when your <strong>Discord App</strong> is too old to have it, or if you&apos;ve acidentally deleted it when, say, cleaning up your <strong><a href="https://robojs.dev/discord-bots/getting-started?ref=blog.waveplay.com" rel="noopener noreferrer">Discord Bot&apos;s</a></strong> slash commands. We have different ways for you to choose, depending on what you&apos;re using.</p><h2 id="method-1-nodejs-script">Method 1: Node.js Script</h2><p>We&apos;ve open sourced a smol <strong><a href="https://nodejs.org/en/download/prebuilt-installer?ref=blog.waveplay.com" rel="noopener noreferrer">Node.js</a></strong> script that you can just run in your <strong>terminal</strong>. It&apos;ll automatically create the missing entry command for you if it doesn&apos;t exist. <strong><a href="https://dev.to/waveplay/missing-launch-button-in-your-discord-activity-fix-the-entry-point-command-h7c-temp-slug-935203?preview=aef5322bd9b46a1d86e4fc452cea604f7d0ca9fb609adba9ce2b839816528750cb387b33c6b6cd7afcd1665d1d71fd7d8f60fda88f3f1b27f05fc707&amp;ref=blog.waveplay.com#">Download the script</a></strong> and run it like so:</p><pre><code>node entry-fix.js &lt;DISCORD_CLIENT_ID&gt; &lt;DISCORD_TOKEN&gt;
</code></pre><ul><li><a href="https://dev.to/waveplay/missing-launch-button-in-your-discord-activity-fix-the-entry-point-command-h7c-temp-slug-935203?preview=aef5322bd9b46a1d86e4fc452cea604f7d0ca9fb609adba9ce2b839816528750cb387b33c6b6cd7afcd1665d1d71fd7d8f60fda88f3f1b27f05fc707&amp;ref=blog.waveplay.com#">&#x1F517; <strong>GitHub:</strong> Download or copy script</a></li></ul><p>Replace <code>&lt;DISCORD_CLIENT_ID&gt;</code> and <code>&lt;DISCORD_TOKEN&gt;</code> with the actual values in your <strong><a href="https://discord.com/developers/applications?ref=blog.waveplay.com" rel="noopener noreferrer">Discord Developer Portal</a></strong>. Yes, you need a <strong>Discord Bot</strong> token to fix your <strong>Discord Activity</strong>.</p><p>This method is recommended for those with <strong>Node.js</strong> installed, even if making <strong>Discord Apps</strong> using other languages.</p><h2 id="method-2-robojspatch">Method 2: @robojs/patch</h2><p>Woah, you&apos;re using <strong><a href="https://robojs.dev/?ref=blog.waveplay.com" rel="noopener noreferrer">Robo.js</a></strong>? You&apos;re creating in luxury!</p><p>All you need to do is install <strong><a href="https://robojs.dev/plugins/patch?ref=blog.waveplay.com" rel="noopener noreferrer">@robojs/patch</a></strong>. That&apos;s it! It&apos;s a <strong><a href="https://robojs.dev/plugins/overview?ref=blog.waveplay.com" rel="noopener noreferrer">Robo Plugin</a></strong>, so it&apos;s integrated instantly.</p><pre><code>npx robo add @robojs/patch
</code></pre><ul><li><a href="https://robojs.dev/plugins/patch?ref=blog.waveplay.com" rel="noopener noreferrer">&#x1F517; <strong>Documentation:</strong> @robojs/patch</a></li></ul><p>This method is recommended for those using <strong>Robo.js</strong> to build their <strong>Discord Activities</strong>. If you&apos;re not using <strong>Robo.js</strong>, we highly recommend you check it out!</p><h2 id="discord-activities-are-fun">Discord Activities are Fun!</h2><p><strong>Discord Activities</strong> are a fun way to engage with your community. They&apos;re like mini-games or interactive experiences that you can create and share with others. <strong><a href="https://robojs.dev/?ref=blog.waveplay.com" rel="noopener noreferrer">Robo.js</a></strong> is a powerful framework that makes building <strong>Discord Activities</strong> easy and fun. <strong>Discord Activities</strong> are often built using <strong>HTML</strong>, <strong>CSS</strong>, and <strong>JavaScript</strong> like any other web app, but they run inside <strong>Discord</strong> itself.</p><p>If you don&apos;t already have a <strong>Discord Activity</strong>, you can create one in seconds with <strong>Robo.js</strong>.</p><pre><code>npx create-robo &lt;projectName&gt; -k activity
</code></pre><p>Check out our <strong><a href="https://dev.to/waveplay/missing-launch-button-in-your-discord-activity-fix-the-entry-point-command-h7c-temp-slug-935203?preview=aef5322bd9b46a1d86e4fc452cea604f7d0ca9fb609adba9ce2b839816528750cb387b33c6b6cd7afcd1665d1d71fd7d8f60fda88f3f1b27f05fc707&amp;ref=blog.waveplay.com#">tutorial</a></strong> to learn more.</p><ul><li><a href="https://robojs.dev/discord-activities/getting-started?ref=blog.waveplay.com" rel="noopener noreferrer">&#x2728; <strong>Documentation:</strong> Getting Started with Discord Activities</a></li><li><a href="https://dev.to/waveplay/how-to-build-a-discord-activity-easily-with-robojs-5bng?ref=blog.waveplay.com">&#x1F517; <strong>Tutorial:</strong> Creating a Discord Activity in seconds with Robo.js</a></li></ul><h2 id="conclusion">Conclusion</h2><p>Don&apos;t let a missing launch button ruin your day. Use one of the methods above to fix your <strong>Discord Activity</strong> and get back to building awesome experiences for your community.</p><p>You can join our Discord Server to chat with other developers, ask questions, and share your projects. We&apos;re a friendly bunch and always happy to help! Plus, our very own AI Robo, Sage, is there to assist you with any questions you may have.</p><ul><li><a href="https://roboplay.dev/discord?ref=blog.waveplay.com" rel="noopener noreferrer">&#x1F680; <strong>Community:</strong> Join our Discord server</a></li></ul>]]></content:encoded></item><item><title><![CDATA[Patch Your Discord Activity’s Network Requests for Smooth CSP Compliance]]></title><description><![CDATA[<p>When running a <a href="https://robojs.dev/discord-activities/getting-started?ref=blog.waveplay.com" rel="noopener noreferrer nofollow"><strong>Discord Activity</strong></a> through <strong>Discord</strong>, you may encounter <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP?ref=blog.waveplay.com" rel="noopener noreferrer nofollow"><strong>Content Security Policy (CSP)</strong></a> issues. You can fix these by making sure network requests follow <a href="https://robojs.dev/discord-activities/proxy?ref=blog.waveplay.com" rel="noopener noreferrer nofollow"><strong>Discord Proxy</strong></a> rules.</p><p>This can be done manually... or you can let <a href="https://robojs.dev/plugins/patch?ref=blog.waveplay.com" rel="noopener noreferrer nofollow"><strong>@robojs/patch</strong></a> handle it.</p><h2 id="what-is-csp">What is CSP?</h2><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h4rr7xajb7ggu14gnlpw.png" class="kg-image" alt="Image" loading="lazy"></figure><p><strong>Content Security Policy (CSP)</strong> is a</p>]]></description><link>https://blog.waveplay.com/discord-proxy-csp-patch/</link><guid isPermaLink="false">66e92a909356213df3392ae3</guid><category><![CDATA[Robo.js]]></category><dc:creator><![CDATA[WavePlay Staff]]></dc:creator><pubDate>Tue, 17 Sep 2024 07:08:15 GMT</pubDate><media:content url="https://blog.waveplay.com/content/images/2024/09/playxlabs_Holding_magic_wand_magic_sparkles_around._Devilish_sm_74c0eafa-0c3d-4ab2-a9b1-042fbaf3db7b.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.waveplay.com/content/images/2024/09/playxlabs_Holding_magic_wand_magic_sparkles_around._Devilish_sm_74c0eafa-0c3d-4ab2-a9b1-042fbaf3db7b.png" alt="Patch Your Discord Activity&#x2019;s Network Requests for Smooth CSP Compliance"><p>When running a <a href="https://robojs.dev/discord-activities/getting-started?ref=blog.waveplay.com" rel="noopener noreferrer nofollow"><strong>Discord Activity</strong></a> through <strong>Discord</strong>, you may encounter <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP?ref=blog.waveplay.com" rel="noopener noreferrer nofollow"><strong>Content Security Policy (CSP)</strong></a> issues. You can fix these by making sure network requests follow <a href="https://robojs.dev/discord-activities/proxy?ref=blog.waveplay.com" rel="noopener noreferrer nofollow"><strong>Discord Proxy</strong></a> rules.</p><p>This can be done manually... or you can let <a href="https://robojs.dev/plugins/patch?ref=blog.waveplay.com" rel="noopener noreferrer nofollow"><strong>@robojs/patch</strong></a> handle it.</p><h2 id="what-is-csp">What is CSP?</h2><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h4rr7xajb7ggu14gnlpw.png" class="kg-image" alt="Patch Your Discord Activity&#x2019;s Network Requests for Smooth CSP Compliance" loading="lazy"></figure><p><strong>Content Security Policy (CSP)</strong> is a security standard that helps prevent <a href="https://developer.mozilla.org/en-US/docs/Web/Security/Cross-Site_Scripting?ref=blog.waveplay.com" rel="noopener noreferrer nofollow"><strong>Cross-Site Scripting (XSS)</strong></a> attacks. It controls which resources a page can load and where it can send data.</p><p>When you run a <strong>Discord Activity</strong> in <strong>Discord</strong>, you&apos;re actually using the <strong>Discord Proxy</strong> as a middleman, meaning it sets its own <strong>CSP</strong> rules. If your network requests don&apos;t follow these rules, they&apos;ll be blocked.</p><ul><li>Relative requests like <code>/api/token</code> will be blocked unless prefixed with <code>/.proxy</code>.</li><li>External requests like <a href="https://example.com/api/token?ref=blog.waveplay.com" rel="noopener noreferrer nofollow"><code>https://example.com/api/token</code></a> will be blocked unless they&apos;re <a href="https://robojs.dev/discord-activities/proxy?ref=blog.waveplay.com#url-mapping" rel="noopener noreferrer nofollow"><strong>mapped</strong></a> or <a href="https://dev.to/waveplay/resolve-content-security-policy-csp-issues-in-your-discord-activity-using-a-nodejs-proxy-2634?ref=blog.waveplay.com" rel="noopener noreferrer nofollow"><strong>proxied</strong></a>.</li></ul><h2 id="resolving-csp-violations">Resolving CSP Violations</h2><p>As stated above, all you have to do is make sure your network requests follow the <strong>Discord Proxy</strong> rules. In some cases, that includes adding <code>/.proxy</code> to the beginning of your request path.</p><pre><code class="language-js">// Before
fetch(&apos;/api/token&apos;)

// After
fetch(&apos;/.proxy/api/token&apos;)</code></pre><p>However, <strong>WebSockets</strong> can be a bit trickier. Especially when relying on <a href="https://www.sanity.io/glossary/hot-module-replacement?ref=blog.waveplay.com" rel="noopener noreferrer nofollow"><strong>Hot Module Replacement (HMR)</strong></a> that loads before your own activity like in <a href="https://vitejs.dev/?ref=blog.waveplay.com" rel="noopener noreferrer nofollow"><strong>Vite</strong></a>. So, we created <a href="https://robojs.dev/plugins/patch?ref=blog.waveplay.com" rel="noopener noreferrer nofollow"><strong>@robojs/patch</strong></a> to handle everything for you.</p><h2 id="patching-your-activity">Patching Your Activity</h2><p><strong>@robojs/patch</strong> is a lightweight package that patches your network requests to follow <strong>Discord Proxy</strong> rules. It works by updating the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API?ref=blog.waveplay.com" rel="noopener noreferrer nofollow"><code>fetch</code></a> and <a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSocket?ref=blog.waveplay.com" rel="noopener noreferrer nofollow"><code>WebSocket</code></a> globals.</p><pre><code class="language-bash">npm install @robojs/patch</code></pre><p>We have different ways to apply this patch depending on your project setup.</p><h4 id="method-1-vite-plugin-recommended">Method 1: Vite Plugin (Recommended)</h4><p>If you&apos;re using <strong>Vite</strong>, you can apply the patch as a plugin in your <strong>Vite</strong> config file.</p><pre><code class="language-ts">import { DiscordProxy } from &apos;@robojs/patch&apos;
import { defineConfig } from &apos;vite&apos;

export default defineConfig({
	plugins: [DiscordProxy.Vite()]
})</code></pre><p>We recommend this method because it allows the patch to run before before <strong>Vite</strong>&apos;s HMR client, ensuring that it works correctly.</p><h4 id="method-2-function-call">Method 2: Function Call</h4><p>If you&apos;re not using <strong>Vite</strong>, you can apply the patch by calling a function directly.</p><pre><code class="language-ts">import { DiscordProxy } from &apos;@robojs/patch&apos;

DiscordProxy.patch()</code></pre><p>Be sure to call this at the very beginning of your project, before other scripts are loaded. (e.g. the top of your <code>index.js</code> file)</p><p>&#x279E; <a href="https://robojs.dev/plugins/patch?ref=blog.waveplay.com" rel="noopener noreferrer nofollow">&#x1F4DA; <strong>Documentation:</strong> @robojs/patch</a></p><h3 id="external-requests">External Requests</h3><p>This does not affect requests made to external URLs. If you&apos;re having <strong>CSP</strong> issues with those, you may be able to fix them by <a href="https://dev.to/waveplay/resolve-content-security-policy-csp-issues-in-your-discord-activity-using-a-nodejs-proxy-2634?ref=blog.waveplay.com" rel="noopener noreferrer nofollow"><strong>creating your own Proxy</strong></a> or mapping them in the <strong>Discord Developer Portal</strong>.</p><p>&#x279E; <a href="https://dev.to/waveplay/resolve-content-security-policy-csp-issues-in-your-discord-activity-using-a-nodejs-proxy-2634?ref=blog.waveplay.com" rel="noopener noreferrer nofollow">&#x1F4DA; <strong>Tutorial:</strong> Resolve CSP Issues with a Proxy</a></p><h2 id="interested-in-discord-activities">Interested in Discord Activities?</h2><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ny52f1vct85yuilxnatt.png" class="kg-image" alt="Patch Your Discord Activity&#x2019;s Network Requests for Smooth CSP Compliance" loading="lazy"></figure><p><a href="https://robojs.dev/?ref=blog.waveplay.com" rel="noopener noreferrer nofollow"><strong>Robo.js</strong></a> is a powerful framework for building <strong>Discord Activities</strong> with ease. It provides a wide range of features and tools to help you create epic Discord experiences!</p><p>Join our <strong>Discord Server</strong> to chat with other developers, ask questions, and share your projects. We&apos;re a friendly bunch and always happy to help! Plus, our very own AI Robo, <strong>Sage</strong>, is there to assist you with any questions you may have.</p><p>&#x279E; <a href="https://roboplay.dev/discord?ref=blog.waveplay.com" rel="noopener noreferrer nofollow">&#x1F680; <strong>Community:</strong> Join our Discord server</a></p><p>&#x279E; <a href="https://dev.to/waveplay/how-to-build-a-discord-activity-easily-with-robojs-5bng?ref=blog.waveplay.com" rel="noopener noreferrer nofollow">&#x1F4DA; <strong>Tutorial:</strong> Creating a Discord Activity in seconds with Robo.js</a></p>]]></content:encoded></item><item><title><![CDATA[Easily Add Advanced Features to Your Discord Bot Without Coding (Discord.js + Robo.js)]]></title><description><![CDATA[<p>Got a <strong>Discord Bot</strong> you&apos;d like to enhance with advanced features? <strong><a href="https://roboplay.dev/docs?ref=blog.waveplay.com">Robo.js</a></strong> is a powerful framework compatible with <strong><a href="https://discord.js.org/?ref=blog.waveplay.com">Discord.js</a></strong> with a <strong><a href="https://docs.roboplay.dev/plugins/overview?ref=blog.waveplay.com">plugin system</a></strong> so powerful, you can add new features to your bot without writing a single line of code. If you&apos;re a beginner,</p>]]></description><link>https://blog.waveplay.com/easily-add-advanced-features-to-your-discord-bot-without-coding-discord-js-robo-js/</link><guid isPermaLink="false">665513509356213df3392ad8</guid><dc:creator><![CDATA[WavePlay Staff]]></dc:creator><pubDate>Mon, 27 May 2024 23:14:20 GMT</pubDate><media:content url="https://blog.waveplay.com/content/images/2024/05/playxlabs_Chibi_anime_girl_robot_putting_a_puzzle_together_robo_ac851d79-f175-4585-8051-7a0fd64c34c2.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.waveplay.com/content/images/2024/05/playxlabs_Chibi_anime_girl_robot_putting_a_puzzle_together_robo_ac851d79-f175-4585-8051-7a0fd64c34c2.png" alt="Easily Add Advanced Features to Your Discord Bot Without Coding (Discord.js + Robo.js)"><p>Got a <strong>Discord Bot</strong> you&apos;d like to enhance with advanced features? <strong><a href="https://roboplay.dev/docs?ref=blog.waveplay.com">Robo.js</a></strong> is a powerful framework compatible with <strong><a href="https://discord.js.org/?ref=blog.waveplay.com">Discord.js</a></strong> with a <strong><a href="https://docs.roboplay.dev/plugins/overview?ref=blog.waveplay.com">plugin system</a></strong> so powerful, you can add new features to your bot without writing a single line of code. If you&apos;re a beginner, you can add powerful features as you learn how to code the rest of it!</p><h2 id="creating-a-new-discord-bot">Creating a New Discord Bot</h2><p>If you haven&apos;t already created a <strong>Discord Bot</strong>, you can do so by running the following command in your terminal:</p><pre><code class="language-bash">npx create-robo &lt;projectName&gt; -k bot
</code></pre><p>This will spawn a new <strong>Robo.js</strong> project ready to use as a <strong>Discord Bot</strong>. We call these <strong>Robos</strong>.</p><h2 id="adding-features">Adding Features</h2><p>Once you have your <strong>Discord Bot</strong> set up, you can add new features using <strong><a href="https://docs.roboplay.dev/plugins/overview?ref=blog.waveplay.com">Robo Plugins</a></strong>. These plugins integrate seamlessly with your <strong>Robo</strong> to provide new functionality as if you had written the code yourself. For example, you can add AI chatbot capabilities, moderation tools, maintenance mode, economy systems, and more.</p><p>Run this in your terminal, replacing &#xA0;with the name of the plugin you want to install (e.g. <strong><a>@robojs/ai</a></strong>):</p><pre><code class="language-bash">npx robo add &lt;package&gt;
</code></pre><p>This will install the package and register it in your Robo&apos;s configuration. To install many at once:</p><pre><code class="language-bash">npx robo add @robojs/ai @robojs/moderation @robojs/server
</code></pre><p>You can also create a new Robo project with plugins pre-installed:</p><pre><code class="language-bash">npx create-robo &lt;projectName&gt; --plugins @robojs/ai @robojs/moderation
</code></pre><h2 id="existing-bots">Existing Bots</h2><p>If you have an existing <strong>Discord.js Bot</strong> and want to add new features, you&apos;ll need to <strong><a href="https://docs.roboplay.dev/docs/discord-bots/migrate?ref=blog.waveplay.com">migrate</a></strong> your bot to <strong>Robo.js</strong>. This process is straightforward and involves moving your existing code into the <strong><a href="https://docs.roboplay.dev/robojs/files?ref=blog.waveplay.com">Robo File Structure</a></strong>.</p><p>Once your bot is migrated, you can add new features using <strong>Robo Plugins</strong> as described above.</p><h2 id="where-to-find-plugins">Where to Find Plugins</h2><p>You can find a list of available plugins in the <strong><a href="https://docs.roboplay.dev/plugins/directory?ref=blog.waveplay.com">Robo Plugin Directory</a></strong>. Browse through the directory to find plugins that suit your needs and add them to your bot. You can also <strong><a href="https://docs.roboplay.dev/plugins/create?ref=blog.waveplay.com">create your own plugins</a></strong> and share them with the community.</p><p>&#x279E; <a href="https://docs.roboplay.dev/plugins/directory?ref=blog.waveplay.com">&#x1F50C; <strong>Plugin Directory:</strong> Explore more plugins</a></p><p>What&apos;s more, <strong>Robo.js</strong> comes with a lot of other features and tools to help you build your bot faster and more efficiently, such as <strong><a href="https://docs.roboplay.dev/robojs/flashcore?ref=blog.waveplay.com">Flashcore Database</a></strong> to persist data easily, <strong><a href="https://docs.roboplay.dev/robojs/typescript?ref=blog.waveplay.com">TypeScript</a></strong>, <strong><a href="https://docs.roboplay.dev/hosting/overview?ref=blog.waveplay.com">Easy Hosting</a></strong>, and so much more. You can even use it to <strong><a href="https://dev.to/waveplay/how-to-build-a-discord-activity-easily-with-robojs-5bng?ref=blog.waveplay.com">build Discord Activities in seconds</a></strong>!</p><p>Don&apos;t forget to <strong><a href="https://roboplay.dev/discord?ref=blog.waveplay.com">join our Discord server</a></strong> to chat with other developers, ask questions, and share your projects. We&apos;re here to help you build amazing apps with <strong>Robo.js</strong>! &#x1F680;</p><p>&#x279E; <a href="https://roboplay.dev/discord?ref=blog.waveplay.com">&#x1F680; <strong>Community:</strong> Join our Discord Server</a></p><p>Our very own Robo, <strong>Sage</strong>, is there to answer any questions about Robo.js, Discord.js, and more!</p>]]></content:encoded></item><item><title><![CDATA[How to Add Multiplayer to Your Discord Activity]]></title><description><![CDATA[<p><strong><a href="https://support.discord.com/hc/en-us/articles/4422142836759-Activities-on-Discord?ref=blog.waveplay.com">Discord Activities</a></strong> are web apps that run inside Discord, typically in the form of games or other interactive content using Discord&apos;s <strong><a href="https://github.com/discord/embedded-app-sdk/?ref=blog.waveplay.com">Embedded App SDK</a></strong>. They&apos;re currently in preview, but you can start building them today!</p><p>In this guide, we&apos;ll create a video player that</p>]]></description><link>https://blog.waveplay.com/how-to-add-multiplayer-to-your-discord-activity/</link><guid isPermaLink="false">66550c479356213df3392acd</guid><category><![CDATA[Robo.js]]></category><dc:creator><![CDATA[WavePlay Staff]]></dc:creator><pubDate>Mon, 27 May 2024 22:42:58 GMT</pubDate><media:content url="https://blog.waveplay.com/content/images/2024/05/Screenshot-2024-05-21-at-1.34.15-PM.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.waveplay.com/content/images/2024/05/Screenshot-2024-05-21-at-1.34.15-PM.png" alt="How to Add Multiplayer to Your Discord Activity"><p><strong><a href="https://support.discord.com/hc/en-us/articles/4422142836759-Activities-on-Discord?ref=blog.waveplay.com">Discord Activities</a></strong> are web apps that run inside Discord, typically in the form of games or other interactive content using Discord&apos;s <strong><a href="https://github.com/discord/embedded-app-sdk/?ref=blog.waveplay.com">Embedded App SDK</a></strong>. They&apos;re currently in preview, but you can start building them today!</p><p>In this guide, we&apos;ll create a video player that everyone in a channel can control as a <strong>Discord Activity</strong> using <strong><a href="https://roboplay.dev/docs?ref=blog.waveplay.com">Robo.js</a></strong> and <strong><a href="https://react.dev/?ref=blog.waveplay.com">React</a></strong>. Let&apos;s get started!</p><h2 id="creating-the-activity-project">Creating the Activity Project</h2><p>First, you&apos;ll need to have <strong><a href="https://nodejs.org/?ref=blog.waveplay.com">Node.js</a></strong> installed and an editor like <strong><a href="https://code.visualstudio.com/?ref=blog.waveplay.com">VS Code</a></strong> to get started. Next, create a new <strong>Discord Activity</strong> project using the following command in your terminal:</p><pre><code class="language-bash">npx create-robo &lt;projectName&gt; -k activity
</code></pre><p>This will spawn a new <strong>Discord Activity</strong> project ready to use and made easier with the <strong>Robo.js</strong> framework. For this guide, we&apos;ll be using <strong><a href="https://docs.roboplay.dev/robojs/typescript?ref=blog.waveplay.com">TypeScript</a></strong> and <strong><a href="https://react.dev/?ref=blog.waveplay.com">React</a></strong>. We&apos;ve named our project <strong><code>teamplay</code></strong>.</p><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/47nrlpiadpiuo324xa6k.png" class="kg-image" alt="How to Add Multiplayer to Your Discord Activity" loading="lazy"></figure><p>If this is your first time making a <strong>Discord Activity</strong>, you&apos;ll need to create an app in the <strong><a href="https://discord.com/developers/applications?ref=blog.waveplay.com">Discord Developer Portal</a></strong> and get your <strong>Client ID</strong> and <strong>Client Secret</strong>.</p><p><strong>Need more help?</strong> Check out <strong><a href="https://dev.to/waveplay/how-to-build-a-discord-activity-easily-with-robojs-5bng?ref=blog.waveplay.com">Creating a Discord Activity in seconds with Robo.js</a></strong></p><h2 id="running-the-activity">Running the Activity</h2><p>Now that our project is set up, open it in your code editor and run the following command in your terminal:</p><pre><code class="language-bash">npm run dev
</code></pre><p>This will start the Robo project in development mode, refreshing with every change in code. It will also create a free <strong><a href="https://www.cloudflare.com/products/tunnel/?ref=blog.waveplay.com">Cloudflare tunnel</a></strong> for testing.</p><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7687z7deulo8vcdwmoj3.png" class="kg-image" alt="How to Add Multiplayer to Your Discord Activity" loading="lazy"></figure><p>Copy the tunnel URL and paste it into your Discord App&apos;s <strong>URL Mappings</strong> in the <strong><a href="https://discord.com/developers/applications/?ref=blog.waveplay.com">Discord Developer Portal</a></strong>. This will allow Discord to communicate with it.</p><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hdznq68x51snd3o00jqi.png" class="kg-image" alt="How to Add Multiplayer to Your Discord Activity" loading="lazy"></figure><p>With the project running, join a voice channel in your test Discord server and click the rocket button to join a Discord Activity. You should see your activity running in Discord!</p><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eu5qu7o5dyncqg444rhh.png" class="kg-image" alt="How to Add Multiplayer to Your Discord Activity" loading="lazy"></figure><h2 id="setting-up-the-video-player">Setting Up the Video Player</h2><p>We need a video file to play. You can use any video file you like, but for this guide, we&apos;ll be using a sample video you can <strong><a href="https://coverr.co/videos/cat-at-the-breakfast-table-hng084z6j3?ref=blog.waveplay.com">download from Coverr</a></strong>. Let&apos;s name it <code>sample.mp4</code> and place it in the <code>/public</code> folder of your new project.</p><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/626t217sw0p1j7vrkjq5.png" class="kg-image" alt="How to Add Multiplayer to Your Discord Activity" loading="lazy"></figure><p>With the video file in place, let&apos;s add a <code>&lt;video&gt;</code> element to our main page. Open the <code>Activity.tsx</code> file in the <code>/src/app</code> folder and replace the existing code with the following:</p><pre><code class="language-tsx">import { useEffect, useRef, useState } from &apos;react&apos;

export const Activity = () =&gt; {
	const [isPlaying, setPlaying] = useState(false)
	const videoPlayer = useRef&lt;HTMLVideoElement&gt;(null)

	const onPause = () =&gt; {
		if (isPlaying) {
			setPlaying(false)
		}
	}
	const onPlay = () =&gt; {
		if (!isPlaying) {
			setPlaying(true)
		}
	}

	useEffect(() =&gt; {
		if (isPlaying) {
			videoPlayer.current?.play()
		} else if (!isPlaying) {
			videoPlayer.current?.pause()
		}
	}, [isPlaying])

	return (
		&lt;div&gt;
			&lt;img src=&quot;/rocket.png&quot; className=&quot;logo&quot; alt=&quot;Discord&quot; /&gt;
			&lt;br /&gt;
			&lt;video ref={videoPlayer} className=&quot;video&quot; src=&quot;/sample.mp4&quot; controls={false} loop /&gt;
			&lt;br /&gt;
			&lt;button onClick={isPlaying ? onPause : onPlay}&gt;{isPlaying ? &apos;Pause&apos; : &apos;Play&apos;}&lt;/button&gt;
		&lt;/div&gt;
	)
}

</code></pre><p>Let&apos;s also adjust the video player styling a bit. Add the following CSS to the <code>App.css</code> file in the <code>/src/app</code> folder:</p><pre><code class="language-css">video {
	width: 50%;
}
</code></pre><p>Ta-dah! We now have a video player in our Discord Activity that can be controlled by a button. Let&apos;s add some multiplayer features to it!</p><h2 id="controling-the-video">Controling the Video</h2><p>To allow everyone to control the video player, we&apos;ll use the <strong><a href="https://docs.roboplay.dev/plugins/sync?ref=blog.waveplay.com">@robojs/sync</a></strong> plugin to sync the video player state across all clients in real-time. There&apos;s many ways to add multiplayer features but this is the easiest.</p><p>Run the following in your terminal:</p><pre><code class="language-bash">npx robo add @robojs/sync
</code></pre><p>Then wrap the <code>Activity</code> component with <code>SyncContextProvider</code> in <code>App.tsx</code>:</p><pre><code class="language-tsx">import { SyncContextProvider } from &apos;@robojs/sync&apos;
import { DiscordContextProvider } from &apos;../hooks/useDiscordSdk&apos;
import { Activity } from &apos;./Activity&apos;
import &apos;./App.css&apos;

export default function App() {
	return (
		&lt;DiscordContextProvider&gt;
			&lt;SyncContextProvider&gt;
				&lt;Activity /&gt;
			&lt;/SyncContextProvider&gt;
		&lt;/DiscordContextProvider&gt;
	)
}
</code></pre><p>We now have a websocket-powered connection between clients! This would normally require a lot of code, but <strong>@robojs/sync</strong> automatically upgrades your web server to handle websockets and syncs the state for you.</p><p>If you&apos;re already familiar with React&apos;s <code>useState</code> hook, you&apos;ll feel right at home with <code>useSyncState</code>. You can use it just like React&apos;s <code>useState</code> hook, but the state will be synced across all clients in real-time. Just provide a dependency array that acts as a unique identifier for the state.</p><p>To make it multiplayer, replace the <code>useState</code> hook in <code>Activity.tsx</code> with <code>useSyncState</code> and provide a unique identifier for the state. In this case, we&apos;ll use the string <code>&apos;video&apos;</code>:</p><pre><code class="language-tsx">import { useSyncState } from &apos;@robojs/sync&apos;
import { useEffect, useRef } from &apos;react&apos;

export const Activity = () =&gt; {
	const [isPlaying, setPlaying] = useSyncState(false, [&apos;video&apos;])
	// ... rest of the code remains the same
}
</code></pre><p>Now, when you click the play button, everyone using your activity will see the video playing. And when you pause it, everyone will see it pause!</p><p>But wait, what if you want to sync state by channels? You can do that too! Just provide the channel ID as the second argument in <code>useSyncState</code>, which you can get from the Discord SDK.</p><pre><code class="language-tsx">import { useDiscordSdk } from &apos;../hooks/useDiscordSdk&apos;
import { useSyncState } from &apos;@robojs/sync&apos;
import { useEffect, useRef } from &apos;react&apos;

export const Activity = () =&gt; {
	const { discordSdk } = useDiscordSdk()
	const [isPlaying, setPlaying] = useSyncState(false, [&apos;video&apos;, discordSdk.channelId])
	// ... rest of the code remains the same
}
</code></pre><p>Now each channel has their own state! <strong><a href="https://support.discord.com/hc/en-us/articles/4422142836759-Activities-on-Discord?ref=blog.waveplay.com#h_01GSX5T6WVXS25BCSSDW3TAGYM">Invite a friend</a></strong> to join your <strong>Discord Activity</strong> and see the video player in action.</p><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j4o1mdoahtpyuw5aicgj.png" class="kg-image" alt="How to Add Multiplayer to Your Discord Activity" loading="lazy"></figure><h2 id="wasnt-that-easy">Wasn&apos;t That Easy?</h2><p>With <strong>Robo.js</strong> and <strong>@robojs/sync</strong>, adding multiplayer features to your <strong>Discord Activity</strong> is a breeze. You can now create interactive experiences that everyone in a channel can enjoy together! You can also add more features like volume control, seeking, and even mouse tracking using <code>useSyncState</code>! &#x1F680;</p><p>What&apos;s more, you can use the built-in <strong><a href="https://docs.roboplay.dev/robojs/flashcore?ref=blog.waveplay.com">Flashcore Database</a></strong> to persist data easily or <strong><a href="https://docs.roboplay.dev/plugins/directory?ref=blog.waveplay.com">Explore Plugins</a></strong> to add new features with one command, such as <strong><a href="https://docs.roboplay.dev/plugins/ai?ref=blog.waveplay.com">AI Chatbot Features</a></strong> or <strong><a href="https://docs.roboplay.dev/plugins/server?ref=blog.waveplay.com">Web Servers</a></strong>. You can even <strong><a href="https://docs.roboplay.dev/discord-bots/getting-started?ref=blog.waveplay.com">create Discord Bots</a></strong> with it! If you&apos;re looking for something more powerful, we also have a <strong><a href="https://docs.roboplay.dev/templates/overview?ref=blog.waveplay.com#multiplayer">Colyseus Discord Activity Template</a></strong> for real-time multiplayer games.</p><p>Don&apos;t forget to <strong><a href="https://roboplay.dev/discord?ref=blog.waveplay.com">join our Discord server</a></strong> to chat with other developers, ask questions, and share your projects. We&apos;re here to help you build amazing apps with <strong>Robo.js</strong>! &#x1F680;</p><p>&#x279E; <a href="https://roboplay.dev/discord?ref=blog.waveplay.com">&#x1F680; <strong>Community:</strong> Join our Discord Server</a></p><p>Our very own Robo, <strong>Sage</strong>, is there to answer any questions about Robo.js, Discord.js, and more!</p>]]></content:encoded></item><item><title><![CDATA[Use Your Discord Bot Everywhere: User-Installable Apps (Discord.js + Robo.js)]]></title><description><![CDATA[<p>Discord launched a new feature called <strong><a href="https://discord.com/developers/docs/change-log?ref=blog.waveplay.com#userinstallable-apps-preview">User Installable Apps</a></strong> in March that allows users to install your bots directly to their account, letting them use your Discord bot <em>anywhere</em>, even in DMS and servers your bot is not in!</p><p>This feature is currently in preview, but you can start using</p>]]></description><link>https://blog.waveplay.com/use-your-discord-bot-everywhere-user-installable-apps-discord-js-robo-js/</link><guid isPermaLink="false">66550a5b9356213df3392ac0</guid><category><![CDATA[Robo.js]]></category><dc:creator><![CDATA[WavePlay Staff]]></dc:creator><pubDate>Mon, 27 May 2024 22:34:50 GMT</pubDate><media:content url="https://blog.waveplay.com/content/images/2024/05/Screenshot-2024-05-14-at-11.01.50-AM.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.waveplay.com/content/images/2024/05/Screenshot-2024-05-14-at-11.01.50-AM.png" alt="Use Your Discord Bot Everywhere: User-Installable Apps (Discord.js + Robo.js)"><p>Discord launched a new feature called <strong><a href="https://discord.com/developers/docs/change-log?ref=blog.waveplay.com#userinstallable-apps-preview">User Installable Apps</a></strong> in March that allows users to install your bots directly to their account, letting them use your Discord bot <em>anywhere</em>, even in DMS and servers your bot is not in!</p><p>This feature is currently in preview, but you can start using it today.</p><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lernxhv0fkl0ijf6pfz3.png" class="kg-image" alt="Use Your Discord Bot Everywhere: User-Installable Apps (Discord.js + Robo.js)" loading="lazy"></figure><p><strong>Got an existing Robo?</strong> Skip to <strong><a>making it installable</a></strong></p><h2 id="theyre-still-discord-bots">They&apos;re Still Discord Bots</h2><p>You can use <strong><a href="https://discord.js.org/?ref=blog.waveplay.com">Discord.js</a></strong> to create your Discord bot and <strong><a href="https://roboplay.dev/docs?ref=blog.waveplay.com">Robo.js</a></strong> to make things easier. We&apos;ll be creating <strong><a href="https://docs.roboplay.dev/discord-bots/commands?ref=blog.waveplay.com">Slash Commands</a></strong> and <strong><a href="https://docs.roboplay.dev/discord-bots/context-menu?ref=blog.waveplay.com">Context Commands</a></strong> and making them user installable.</p><p>Ready to start your adventure? Run the following in your terminal:</p><pre><code class="language-bash">npx create-robo &lt;projectName&gt; -k bot
</code></pre><p>This will spawn a new <strong>Discord.js</strong> project ready to use as a Discord Bot, made easier with the <strong>Robo.js</strong> framework. We call these <strong>Robos</strong>.</p><p>For this guide, we&apos;ll be opting out of <strong><a href="https://docs.roboplay.dev/robojs/typescript?ref=blog.waveplay.com">TypeScript</a></strong> to keep things simple.</p><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ycqdjo0h6vye3qs5wmdx.png" class="kg-image" alt="Use Your Discord Bot Everywhere: User-Installable Apps (Discord.js + Robo.js)" loading="lazy"></figure><h2 id="creating-commands">Creating Commands</h2><p>Let&apos;s create a slash command that responds with &quot;Hello, World!&quot; when used. Create a new file in the <code>/src/commands</code> folder called <code>hello.js</code>:</p><pre><code class="language-js">export const config = {
	description: &apos;Say hello to the world!&apos;
}

export default (interaction) =&gt; {
	interaction.reply(&apos;Hello, World!&apos;)
}
</code></pre><p>Because we&apos;re using <strong>Robo.js</strong>, just having the file in the <code>/src/commands</code> folder is enough. It will automatically load and <strong><a href="https://docs.roboplay.dev/discord-bots/commands?ref=blog.waveplay.com#command-registration">register commands</a></strong>.</p><p>Next, let&apos;s create a context menu command that responds with &quot;Hello, ${user}!&quot; when used. Create a new file in the <code>/src/context/user</code> folder called <code>Hello.js</code>:</p><pre><code class="language-js">export default (interaction, user) =&gt; {
	interaction.reply(`Hello, ${user.username}!`)
}
</code></pre><p>That&apos;s it! Your file structure should look something like this:</p><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e321wpk2h0g1gqpvt52u.png" class="kg-image" alt="Use Your Discord Bot Everywhere: User-Installable Apps (Discord.js + Robo.js)" loading="lazy"></figure><p>Now let&apos;s make these commands user installable.</p><h2 id="making-it-installable">Making It Installable</h2><p>User installable apps are new, so let&apos;s enable this feature in our project&apos;s configuration. Open the <code>robo.mjs</code> file in the <code>config</code> folder and add the following:</p><pre><code class="language-js">export default {
	// ... rest of config
	experimental: {
		userInstall: true
	}
}
</code></pre><p>This will tell <strong>Robo.js</strong> to register all commands as user installable.</p><p>Next, enable the &quot;User Install&quot; authorization method for this app in the <strong><a href="https://discord.com/developers/applications?ref=blog.waveplay.com">Discord Developer Portal</a></strong> and give it the <code>application.commands</code> scope. You can share the <strong>Discord Provided Link</strong> to let users install this app. Also, make sure the &quot;Public Bot&quot; setting is enabled there.</p><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5ekwu0p8nr4oo129sz03.png" class="kg-image" alt="Use Your Discord Bot Everywhere: User-Installable Apps (Discord.js + Robo.js)" loading="lazy"></figure><h2 id="trying-it-out">Trying It Out</h2><p>Now that we&apos;ve got a user installable app, let&apos;s try it out!</p><p>Use the <strong>Discord Provided Link</strong> to install the app to your account then run your project in development mode:</p><pre><code class="language-bash">npm run dev
</code></pre><p>You can now use the <code>/hello</code> slash command in any server or DM, and the context menu command when right-clicking on a user. You may need to reload Discord to see the changes.</p><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w01lhax58vg0vw9tlqi5.png" class="kg-image" alt="Use Your Discord Bot Everywhere: User-Installable Apps (Discord.js + Robo.js)" loading="lazy"></figure><p>Be aware that you cannot reference other channels or certain features in commands when user-installable. For example, you cannot use it to kick out members of a server your bot is not in.</p><h2 id="wasnt-that-easy">Wasn&apos;t That Easy?</h2><p>User Installable Apps are just Discord Bots you can install and creating them is a breeze with <strong>Robo.js</strong>. It handles all the heavy lifting for you, so you can focus on building your app and making it awesome.</p><p>What&apos;s more, you can use the built-in <strong><a href="https://docs.roboplay.dev/robojs/flashcore?ref=blog.waveplay.com">Flashcore Database</a></strong> to persist data easily or <strong><a href="https://docs.roboplay.dev/plugins/directory?ref=blog.waveplay.com">Robo.js Plugins</a></strong> to add new features with one command, such as <strong><a href="https://docs.roboplay.dev/plugins/ai?ref=blog.waveplay.com">AI Chatbot Features</a></strong> or <strong><a href="https://docs.roboplay.dev/plugins/server?ref=blog.waveplay.com">Web Servers</a></strong>. You can even use it to <strong><a href="https://dev.to/waveplay/how-to-build-a-discord-activity-easily-with-robojs-5bng?ref=blog.waveplay.com">build Discord Activities in seconds</a></strong>!</p><p>Don&apos;t forget to <strong><a href="https://roboplay.dev/discord?ref=blog.waveplay.com">join our Discord server</a></strong> to chat with other developers, ask questions, and share your projects. We&apos;re here to help you build amazing apps with <strong>Robo.js</strong>! &#x1F680;</p><p>&#x279E; <a href="https://roboplay.dev/discord?ref=blog.waveplay.com">&#x1F680; <strong>Community:</strong> Join our Discord Server</a></p><p>Our very own Robo, Sage, is there to answer any questions about Robo.js, Discord.js, and more!</p>]]></content:encoded></item><item><title><![CDATA[How to Fix Stuck Ready Event in Discord Embedded App SDK]]></title><description><![CDATA[<p>If you&apos;ve been following Discord&apos;s <strong><a href="https://discord.com/developers/docs/activities/building-an-activity?ref=blog.waveplay.com">Building Your First Activity</a></strong> tutorial, you may have encountered an issue where the <strong><a href="https://github.com/discord/embedded-app-sdk?ref=blog.waveplay.com">Embedded App SDK</a></strong> gets stuck on the <code>READY</code> event. This issue can be caused by a few different things, but the most common cause is <strong><a href="https://vitejs.dev/?ref=blog.waveplay.com">Vite&apos;s</a></strong></p>]]></description><link>https://blog.waveplay.com/how-to-fix-stuck-ready-event-in-discord-embedded-app-sdk/</link><guid isPermaLink="false">665501309356213df3392ab5</guid><category><![CDATA[Robo.js]]></category><dc:creator><![CDATA[WavePlay Staff]]></dc:creator><pubDate>Mon, 27 May 2024 21:55:42 GMT</pubDate><media:content url="https://blog.waveplay.com/content/images/2024/05/playxlabs_Chibi_anime_girl_robot_fixing_broken_computer_screen__509bcb2c-f079-4fa2-b542-d170f3a9439a.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.waveplay.com/content/images/2024/05/playxlabs_Chibi_anime_girl_robot_fixing_broken_computer_screen__509bcb2c-f079-4fa2-b542-d170f3a9439a.png" alt="How to Fix Stuck Ready Event in Discord Embedded App SDK"><p>If you&apos;ve been following Discord&apos;s <strong><a href="https://discord.com/developers/docs/activities/building-an-activity?ref=blog.waveplay.com">Building Your First Activity</a></strong> tutorial, you may have encountered an issue where the <strong><a href="https://github.com/discord/embedded-app-sdk?ref=blog.waveplay.com">Embedded App SDK</a></strong> gets stuck on the <code>READY</code> event. This issue can be caused by a few different things, but the most common cause is <strong><a href="https://vitejs.dev/?ref=blog.waveplay.com">Vite&apos;s</a></strong> hot module reloading <strong><a href="https://vitejs.dev/guide/api-hmr.html?ref=blog.waveplay.com">(HMR)</a></strong> feature.</p><p>We&apos;ve seen <strong><a href="https://github.com/discord/embedded-app-sdk/issues/41?ref=blog.waveplay.com">this issue</a></strong> pop up in a <strong><a href="https://discord.com/channels/613425648685547541/1219458343513358356?ref=blog.waveplay.com">few different places</a></strong>, so we wanted to provide a quick guide on how to fix it. This post will explain it in more detail and suggest ways around it.</p><h2 id="tldr-quick-fix">TLDR; Quick Fix</h2><p>If you&apos;re in a hurry, the quickest way to fix this without disabling HMR is to make sure you&apos;re creating only one instance of the <code>DiscordSDK</code> close to the root of your app. Check out <strong><a href="https://github.com/Wave-Play/robo.js/tree/main/templates/starter-app-js-react?ref=blog.waveplay.com">this template</a></strong> to see how it&apos;s done.</p><p>You can also create a new <strong>Discord Activity</strong> project with the fix already included by running this in your terminal:</p><pre><code class="language-bash">npx create-robo &lt;projectName&gt; -k activity
</code></pre><h2 id="whats-happening">What&apos;s Happening?</h2><p>When you&apos;re developing a <strong>Discord Activity</strong> with <strong>Vite</strong>, the hot module reloading feature can cause the SDK to be re-created multiple times. This is because <strong>Vite</strong> reloads the module when you make changes, which can cause the <code>DiscordSDK</code> to be reinitialized.</p><p>Unfortunately, <code>discordSdk.ready()</code> gets stuck on the <code>READY</code> event because <strong><a href="https://github.com/discord/embedded-app-sdk/issues/41?ref=blog.waveplay.com#issuecomment-2062926815">Discord sends the payload once per instance</a></strong>. That means your activity will be left waiting for the <code>READY</code> event to fire, but it never will until you restart it.</p><h2 id="starting-fresh-with-a-fix">Starting Fresh with a Fix</h2><p>To fix this issue, you need to ensure that you&apos;re only creating one instance of the <code>DiscordSDK</code> close to the root of your app. This way, the SDK won&apos;t be re-initialized every time you make changes, thus you won&apos;t need to <code>await discordSdk.ready()</code> more than once.</p><p>The easiest and fastest way to prevent this is to make sure you start from a template that already has this fix in place. You can <strong><a>clone this template</a></strong> or create a new project with the fix included by running:</p><pre><code class="language-bash">npx create-robo &lt;projectName&gt; -k activity
</code></pre><p>This will create a new <strong>Discord Activity</strong> project with the fix already in place, so you won&apos;t have to worry about this issue. Check out our guide for more info!</p><p>&#x279E; <a href="https://dev.to/waveplay/how-to-build-a-discord-activity-easily-with-robojs-5bng?ref=blog.waveplay.com">&#x2728; <strong>Guide:</strong> Creating a Discord Activity in seconds with Robo.js</a></p><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6dtw3dql9wofx0coon46.png" class="kg-image" alt="How to Fix Stuck Ready Event in Discord Embedded App SDK" loading="lazy"></figure><h2 id="fixing-your-existing-project">Fixing Your Existing Project</h2><p>If you&apos;re already working on a project and don&apos;t want to start over, you can fix this issue by ensuring that you&apos;re only creating one instance of the <code>DiscordSDK</code> close to the root of your app. For example, in a <strong><a href="https://react.dev/?ref=blog.waveplay.com">React</a></strong> app, you can use a <strong><a href="https://react.dev/docs/context?ref=blog.waveplay.com">Context</a></strong> to manage the SDK instance.</p><p>Here&apos;s a simplified example:</p><pre><code class="language-jsx">import { DiscordSDK, DiscordSDKMock } from &apos;@discord/embedded-app-sdk&apos;
import { createContext, useContext } from &apos;react&apos;

export const discordSdk = new DiscordSDK(import.meta.env.VITE_DISCORD_CLIENT_ID)

const DiscordContext = createContext({ discordSdk })

export function DiscordContextProvider(props) {
	const { children } = props
	const setupResult = useDiscordSdkSetup()

	return &lt;DiscordContext.Provider value={setupResult}&gt;{children}&lt;/DiscordContext.Provider&gt;
}

export function useDiscordSdk() {
	return useContext(DiscordContext)
}

function useDiscordSdkSetup() {
	// Your setup logic here (e.g., discordSdk.ready() in a useEffect)

	return { discordSdk }
}
</code></pre><p>Then apply the <code>DiscordContextProvider</code> at the root of your app:</p><pre><code class="language-jsx">import { DiscordContextProvider } from &apos;../hooks/useDiscordSdk&apos;
import { Activity } from &apos;./Activity&apos;
import &apos;./App.css&apos;

export default function App() {
	return (
		&lt;DiscordContextProvider&gt;
			&lt;Activity /&gt;
		&lt;/DiscordContextProvider&gt;
	)
}
</code></pre><p>This way, <strong>Vite</strong> won&apos;t re-initialize the <code>DiscordSDK</code> every time you make changes, and you won&apos;t get stuck on the <code>READY</code> event. It works like so:</p><ol><li>The <code>DiscordSDK</code> is created once and passed down through the context.</li><li>The SDK is initialized in the context provider.</li><li>Components can access the SDK through the custom <code>useDiscordSdk</code> hook.</li><li>The same SDK instance will be re-used, as long as you don&apos;t edit the <code>useDiscordSdk</code> file.</li></ol><h2 id="conclusion">Conclusion</h2><p>React&apos;s <strong><a href="https://react.dev/docs/context?ref=blog.waveplay.com">Context</a></strong> is a great way to manage global state in your app, and it&apos;s perfect for managing the <code>DiscordSDK</code> instance. By ensuring that you only create one instance of the SDK close to the root of your app, you can prevent the <code>READY</code> event from getting stuck and avoid the need to restart your activity every time you make changes.</p><p>We highly recommend using <code>create-robo</code> to create a <strong>Discord Activity</strong> project. These templates are designed to help you get started quickly and avoid common issues like this one. What&apos;s more, they come with a lot of other features and tools to help you build your activity faster and more efficiently, such as <strong><a href="https://dev.to/waveplay/how-to-add-multiplayer-to-your-discord-activity-lo1?ref=blog.waveplay.com">Multiplayer Support</a></strong>, <strong><a href="https://docs.roboplay.dev/robojs/typescript?ref=blog.waveplay.com">TypeScript</a></strong>, <strong><a href="https://docs.roboplay.dev/discord-activities/hosting?ref=blog.waveplay.com">Easy Hosting</a></strong>, <strong><a href="https://docs.roboplay.dev/discord-activities/tunnels?ref=blog.waveplay.com">Streamlined Tunnels</a></strong>, <strong><a href="https://docs.roboplay.dev/robojs/flashcore?ref=blog.waveplay.com">Built-in Database</a></strong>, <strong><a href="https://docs.roboplay.dev/plugins/overview?ref=blog.waveplay.com">Plugin System</a></strong>, and so much more!</p><p>Don&apos;t forget to <strong><a href="https://roboplay.dev/discord?ref=blog.waveplay.com">join our Discord server</a></strong> to chat with other developers, ask questions, and share your projects. We&apos;re here to help you build amazing apps with <strong>Robo.js</strong>! &#x1F680;</p><p>&#x279E; <a href="https://roboplay.dev/discord?ref=blog.waveplay.com">&#x1F680; <strong>Community:</strong> Join our Discord Server</a></p><p>Our very own Robo, <strong>Sage</strong>, is there to answer any questions about Robo.js, Discord.js, and more</p>]]></content:encoded></item><item><title><![CDATA[Creating a Discord Activity in seconds with Robo.js]]></title><description><![CDATA[<p>Discord announced their new <strong><a href="https://github.com/discord/embedded-app-sdk/?ref=blog.waveplay.com">Embedded App SDK</a></strong> last month, making it easier for developers to create interactive experiences within Discord. Now, with Robo.js, you can build your own <strong><a href="https://support.discord.com/hc/en-us/articles/4422142836759-Activities-on-Discord?ref=blog.waveplay.com">Discord Activity</a></strong> <em>in seconds</em>!</p><p>Not just that, <strong><a href="https://roboplay.dev/docs?ref=blog.waveplay.com">Robo.js</a></strong> also manages your project&apos;s server, API, and client-side code, so</p>]]></description><link>https://blog.waveplay.com/creating-a-discord-activity-in-seconds/</link><guid isPermaLink="false">665033609356213df3392aa3</guid><category><![CDATA[Robo.js]]></category><category><![CDATA[Getting Started]]></category><dc:creator><![CDATA[WavePlay Staff]]></dc:creator><pubDate>Fri, 24 May 2024 06:35:04 GMT</pubDate><media:content url="https://blog.waveplay.com/content/images/2024/05/Screenshot-2024-05-20-at-11.26.30-PM.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.waveplay.com/content/images/2024/05/Screenshot-2024-05-20-at-11.26.30-PM.png" alt="Creating a Discord Activity in seconds with Robo.js"><p>Discord announced their new <strong><a href="https://github.com/discord/embedded-app-sdk/?ref=blog.waveplay.com">Embedded App SDK</a></strong> last month, making it easier for developers to create interactive experiences within Discord. Now, with Robo.js, you can build your own <strong><a href="https://support.discord.com/hc/en-us/articles/4422142836759-Activities-on-Discord?ref=blog.waveplay.com">Discord Activity</a></strong> <em>in seconds</em>!</p><p>Not just that, <strong><a href="https://roboplay.dev/docs?ref=blog.waveplay.com">Robo.js</a></strong> also manages your project&apos;s server, API, and client-side code, so you can focus on building your activity. Let&apos;s get started!</p><h2 id="creating-a-new-project">Creating a new project</h2><p>First, create a new <strong>Robo.js</strong> project by running the following command:</p><pre><code class="language-bash">npx create-robo my-activity --kit activity
</code></pre><p>This will launch an interactive setup process to configure your project just the way you like it. For this guide, we&apos;ll stick with the default recommendations - <strong><a href="https://react.dev/?ref=blog.waveplay.com">React</a></strong> and <strong><a href="https://docs.roboplay.dev/robojs/typescript?ref=blog.waveplay.com">TypeScript</a></strong>.</p><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/edz894k32jlvaldf54xk.png" class="kg-image" alt="Creating a Discord Activity in seconds with Robo.js" loading="lazy" width="1946" height="920"></figure><blockquote>You&apos;ll need to create an app in the <a href="https://discord.com/developers/applications?ref=blog.waveplay.com"><strong>Discord Developer Portal</strong></a> if you haven&apos;t already.</blockquote><p>Once you&apos;re done with the setup, run <code>cd my-activity</code> to navigate to your new project.</p><h2 id="your-new-project">Your new project</h2><p>Your project is now set up and ready to go! Here&apos;s a quick overview of the project structure:</p><ul><li><code>/config</code>: Configuration files for your project.</li><li><code>/public</code>: Static files like images, fonts, and other assets.</li><li><code>/src/app</code>: Your client-side code, where you can build your web app using React, Vue, or any other front-end framework.</li><li><code>/src/api</code>: Your server-side code, where you can build your API, webhooks, and other fancy server-side features.</li></ul><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9kmzrj0hr9qqehbdqmyc.png" class="kg-image" alt="Creating a Discord Activity in seconds with Robo.js" loading="lazy" width="1918" height="1292"></figure><blockquote><strong>Don&apos;t worry!</strong> There&apos;s a lot of files but your code only goes in the <code>/src</code> folder.</blockquote><p>While the <code>api</code> and <code>app</code> folders are reserved for your server and client-side code, you are free to create anything else in the <code>/src</code> directory!</p><p>Got it? Great! Let&apos;s move on to running your activity.</p><h2 id="running-your-activity">Running your activity</h2><p>To start your activity in development mode, run the following command:</p><pre><code class="language-bash">npm run dev
</code></pre><p>This will start your <strong>Robo project</strong> in development mode, refreshing with every change you make. You will also get a free <strong><a href="https://www.cloudflare.com/products/tunnel/?ref=blog.waveplay.com">Cloudflare tunnel</a></strong> for easy testing.</p><p>Go ahead and copy the tunnel URL and paste it into your activity&apos;s URL mapping in the <a href="https://discord.com/developers/applications?ref=blog.waveplay.com"><strong>Discord Developer Portal</strong></a>. This will allow Discord to communicate with your activity.</p><p>Then, join a voice channel in your test Discord server and click the &quot;Create Activity&quot; button. You should see your activity running in Discord!</p><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ny52f1vct85yuilxnatt.png" class="kg-image" alt="Creating a Discord Activity in seconds with Robo.js" loading="lazy" width="2328" height="1920"></figure><blockquote><strong>Heads up:</strong> Discord currently limits activities to servers with less than 25 members (including bots).</blockquote><h2 id="authenticating-with-discord">Authenticating with Discord</h2><p>As you can see, your project includes an API route called <code>/api/token</code>. This route is used to authenticate your activity with Discord securely.</p><p>The React starter template includes handy code that handles the authentication process for you. Let&apos;s add props to the provider in the <code>App.tsx</code> file and see what happens.</p><pre><code class="language-tsx">import { DiscordContextProvider } from &apos;../hooks/useDiscordSdk&apos;
import { Activity } from &apos;./Activity&apos;
import &apos;./App.css&apos;

export default function App() {
	return (
		&lt;DiscordContextProvider authenticate scope={[&apos;identify&apos;, &apos;guilds&apos;]}&gt;
			&lt;Activity /&gt;
		&lt;/DiscordContextProvider&gt;
	)
}

</code></pre><p>Now when you run your activity, Discord will prompt you to authenticate with your app!</p><p>You can get the SDK and other goodies from the <code>useDiscordSdk</code> hook.</p><pre><code class="language-tsx">const { accessToken, authenticated, discordSdk, error, session, status } = useDiscordSdk()
</code></pre><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/phntdtrc21w9h5kutl83.png" class="kg-image" alt="Creating a Discord Activity in seconds with Robo.js" loading="lazy" width="1714" height="1504"></figure><h2 id="adding-your-own-features">Adding your own features</h2><p>Now that you have your activity running, you can start adding your own features. You can create new routes in the <code>/src/api</code> folder, new components in the <code>/src/app</code> folder, and more. Seriously, it&apos;s super easy!</p><p>For example, let&apos;s create a new route at <code>/api/health</code> by creating a new file named <code>health.ts</code> in the <code>/src/api</code> folder:</p><pre><code class="language-ts">export default () =&gt; {
	return { status: &apos;ok&apos; }
}
</code></pre><p>And that&apos;s it! You&apos;ve just created a new API route. You can now access this route at <code>http://localhost:3000/api/health</code>.</p><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cip9ezdgpv21j15722uz.png" class="kg-image" alt="Creating a Discord Activity in seconds with Robo.js" loading="lazy" width="1130" height="568"></figure><h2 id="final-thoughts">Final thoughts</h2><p>Building a <strong>Discord Activity</strong> with <strong>Robo.js</strong> is a breeze. With its intuitive project structure and built-in features, you can focus on creating a fun and engaging experience for your users.</p><p>But wait, there&apos;s more! <strong>Robo.js</strong> also supports <strong><a href="https://docs.roboplay.dev/plugins/directory?ref=blog.waveplay.com">plugins</a></strong>, so you can easily add new capabilities to your project with a single command. How cool is that?</p><pre><code class="language-bash">npx robo add @robojs/ai
</code></pre><p>Did you know that <strong>Robo.js</strong> was originally built for <strong>Discord Bots</strong>? Check out the getting started guide for creating a Discord bot with <strong>Robo.js</strong>.</p><p>&#x279E; <a href="https://docs.roboplay.dev/docs/getting-started?ref=blog.waveplay.com">&#x1F4DA; <strong>Documentation:</strong> Getting started</a></p><p>Got any feedback or questions? Join our Discord server and let us know. We&apos;re here to help you build amazing activities!</p><p>&#x279E; <a href="https://roboplay.dev/discord?ref=blog.waveplay.com">&#x1F680; <strong>Community:</strong> Join our Discord server</a></p>]]></content:encoded></item><item><title><![CDATA[Modern new way to use Discord.js command options (Robo.js)]]></title><description><![CDATA[<p>You can now access your Discord bot&apos;s slash command options as a simple object in command functions, as of Robo.js v0.10!</p><p>We believe this is more straightforward and easier to understand than before. Keep in mind, you can still use the old way if you prefer!</p>]]></description><link>https://blog.waveplay.com/new-discordjs-command-options/</link><guid isPermaLink="false">663873649356213df3392a88</guid><category><![CDATA[Robo.js]]></category><dc:creator><![CDATA[WavePlay Staff]]></dc:creator><pubDate>Sun, 05 May 2024 14:30:00 GMT</pubDate><media:content url="https://blog.waveplay.com/content/images/2024/05/playxlabs_Chibi_anime_girl_robot_unpacking_boxes_next_to_pet_ca_a017a5cf-9c9f-4b5d-926a-87fafcc0319f.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.waveplay.com/content/images/2024/05/playxlabs_Chibi_anime_girl_robot_unpacking_boxes_next_to_pet_ca_a017a5cf-9c9f-4b5d-926a-87fafcc0319f.png" alt="Modern new way to use Discord.js command options (Robo.js)"><p>You can now access your Discord bot&apos;s slash command options as a simple object in command functions, as of Robo.js v0.10!</p><p>We believe this is more straightforward and easier to understand than before. Keep in mind, you can still use the old way if you prefer!</p><h2 id="quick-comparison">Quick comparison</h2><h3 id="before-v09-and-below">Before (v0.9 and below)</h3><p>You had to access the options from the interaction object:</p><pre><code class="language-javascript">export const config = {
    description: &apos;Responds with Pong!&apos;,
    options: [
        {
            name: &apos;loud&apos;,
            description: &apos;Respond loudly?&apos;,
            type: &apos;boolean&apos;
        }
    ]
}

export default (interaction) =&gt; {
    const loud = interaction.options.get(&apos;loud&apos;)?.value
    return loud ? &apos;PONG!!!&apos; : &apos;Pong!&apos;
}
</code></pre><h3 id="after-v010-and-above">After (v0.10 and above)</h3><p>Directly access the options from the second parameter:</p><pre><code class="language-javascript">export const config = {
    description: &apos;Responds with Pong!&apos;,
    options: [
        {
            name: &apos;loud&apos;,
            description: &apos;Respond loudly?&apos;,
            type: &apos;boolean&apos;
        }
    ]
}

export default (interaction, options) =&gt; {
    return options.loud ? &apos;PONG!!!&apos; : &apos;Pong!&apos;
}
</code></pre><p>Don&apos;t worry, you can still get the options from the interaction object if you prefer. All existing code will work the same. The new way is just a more convenient and modern approach.</p><h2 id="typescript-support">TypeScript support</h2><p>The new way also has full TypeScript support! This gets you better type checking and autocompletion in your editor, so you know exactly what options are available for your command.</p><pre><code class="language-typescript">import { createCommandConfig } from &apos;robo.js&apos;
import type { CommandOptions, CommandResult } from &apos;robo.js&apos;
import type { CommandInteraction } from &apos;discord.js&apos;

export const config = createCommandConfig({
    description: &apos;Responds with Pong!&apos;,
    options: [
        {
            name: &apos;loud&apos;,
            description: &apos;Respond loudly?&apos;,
            required: true,
            type: &apos;boolean&apos;
        },
        {
            name: &apos;text&apos;,
            description: &apos;The text to respond with&apos;,
            type: &apos;string&apos;
        }
    ]
} as const)

export default (interaction: CommandInteraction, options: CommandOptions&lt;typeof config&gt;): CommandResult =&gt; {
    const { loud, text = &apos;Pong!&apos; } = options
    return loud ? text.toUpperCase() : text
}
</code></pre><blockquote>Notice the <code>createCommandConfig</code> function and <code>as const</code> keyword. These are important for TypeScript to infer types correctly.</blockquote><p>The <code>options</code> object is so smart, that it will tell you not only the name and type of the option, but also whether it may be <code>undefined</code> or not, depending on the option&apos;s <code>required</code> property.</p><figure class="kg-card kg-image-card"><img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fragh4vbqgcm9gtjrj8l7.png" class="kg-image" alt="Modern new way to use Discord.js command options (Robo.js)" loading="lazy"></figure><h2 id="what-is-robojs">What is Robo.js?</h2><p>Oh yeah, if you don&apos;t already know, Robo.js is a powerful framework for building Discord activities, bots, web servers, and more. It&apos;s designed to be simple, yet powerful, with a focus on developer experience and modern JavaScript/TypeScript features.</p><p>Bot development is just Discord.js, but with a sprinkle of Robo magic on top. Existing Discord.js code works with Robo.js because it <em>is</em> Discord.js. The main difference is that Robo.js provides a more structured way to build your bot, without boilerplate, and following best practices by default.</p><p>It&apos;s also super easy to use! For example, you can code an entire Discord bot with just one line of code:</p><pre><code>// src/command/ping.js
export default () =&gt; &apos;Pong!&apos;
</code></pre><p>The above is all you need to create a <code>/ping</code> command that responds with &quot;Pong!&quot;. Robo.js takes care of the rest, including registering the command with Discord, handling interactions, and more. You&apos;re not limited by what you can do with Robo.js, but you&apos;re empowered to do more with less code.</p><h3 id="ready-to-get-started">Ready to get started?</h3><p>Creating a new Robo.js project is as simple as running:</p><pre><code>npx create-robo my-project
</code></pre><p>This will guide you through setting up your project. Check out our docs and tutorials for more!</p><p>&#x279E; <a href="https://roboplay.dev/discord?ref=blog.waveplay.com">&#x1F680; <strong>Community:</strong> Join our Discord server</a></p><p>&#x279E; <a href="https://docs.roboplay.dev/docs/getting-started?ref=blog.waveplay.com">&#x1F4DA; <strong>Documentation:</strong> Getting started</a></p><p>&#x279E; <a href="https://dev.to/waveplay/how-to-build-a-discord-activity-easily-with-robojs-5bng?ref=blog.waveplay.com">&#x1F4D6; <strong>Tutorial:</strong> Creating a Discord Activity in seconds</a></p>]]></content:encoded></item><item><title><![CDATA[Robo.js v0.10 is here!]]></title><description><![CDATA[<p>We&apos;re excited to announce the release of Robo.js v0.10 - our biggest update yet! &#x1F389;</p><p>There&apos;s a lot to unpack, so we&apos;ll cover new features in future posts. However, there&apos;s some important changes you should know about right now.</p><blockquote><strong>Not</strong></blockquote>]]></description><link>https://blog.waveplay.com/robo-js-v0-10-is-here/</link><guid isPermaLink="false">661e17959356213df3392a77</guid><category><![CDATA[Robo.js]]></category><dc:creator><![CDATA[WavePlay Staff]]></dc:creator><pubDate>Tue, 16 Apr 2024 06:18:00 GMT</pubDate><media:content url="https://blog.waveplay.com/content/images/2024/04/Screenshot-2024-04-15-at-10.48.53-PM.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.waveplay.com/content/images/2024/04/Screenshot-2024-04-15-at-10.48.53-PM.png" alt="Robo.js v0.10 is here!"><p>We&apos;re excited to announce the release of Robo.js v0.10 - our biggest update yet! &#x1F389;</p><p>There&apos;s a lot to unpack, so we&apos;ll cover new features in future posts. However, there&apos;s some important changes you should know about right now.</p><blockquote><strong>Not familiar with Robo.js?</strong> It&apos;s a framework for creating Discord.js bots with ease and best practices by default. Plugins extend your bot&apos;s features right away! Also, you can <a href="https://dev.to/waveplay/how-to-build-a-discord-activity-easily-with-robojs-5bng?ref=blog.waveplay.com"><strong>create Discord Activities with Robo.js</strong></a> now! &#x1F680;</blockquote><h2 id="new-package-names">New Package Names</h2><p>We&apos;ve changed the core package name from <code>@roboplay/robo.js</code> to <code>robo.js</code>! We feel like this fancy new name is much easier to remember and type. <strong>Many thanks to the previous owner of <code>robojs</code> for letting us use the name!</strong></p><p>Yes, this means you&apos;ll need to update your <code>package.json</code> and <code>import</code> statements. But trust us, it&apos;s worth it!</p><h2 id="new-plugin-names">New Plugin Names</h2><p>We&apos;ve also updated our plugin names to be more consistent and easier to remember. Here are the new names:</p><ul><li><code>@roboplay/plugin-ai</code> &#x279E; <code>@robojs/ai</code></li><li><code>@roboplay/plugin-ai-voice</code> &#x279E; <code>@robojs/ai-voice</code></li><li><code>@roboplay/plugin-api</code> &#x279E; <code>@robojs/server</code></li><li><code>@roboplay/plugin-better-stack</code> &#x279E; <code>@robojs/better-stack</code></li><li><code>@roboplay/plugin-devtools</code> &#x279E; <code>@robojs/dev</code></li><li><code>@roboplay/plugin-modtools</code> &#x279E; <code>@robojs/moderation</code></li></ul><p>We&apos;ve also deprecated the <code>@roboplay/plugin-poll</code> plugin now that Discord has built-in polls. You can still use the plugin, but we recommend using Discord&apos;s feature instead.</p><h2 id="breaking-changes">Breaking Changes</h2><p>Of course, with a new 0.x release, there are some breaking changes. We&apos;ve tried to keep these to a minimum, but here are the most important ones:</p><ul><li><strong>Removed legacy runtime</strong>: We&apos;ve removed the old process-based runtime in favor of the worker thread-based runtime introduced in v0.8. The thread-based runtime has been the default since v0.9, so this change shouldn&apos;t affect most users.</li><li><strong>Removed old <code>robo.config.mjs</code> support</strong>: We&apos;ve removed support for the old <code>robo.config.mjs</code> configuration file. It was never recommended to use this file, but if you were, you&apos;ll need to switch to the standard <code>/config/robo.mjs</code> file.</li><li><strong>Moved heartbeat</strong>: We&apos;ve removed the redundant heartbeat feature that previously built into Robo.js. The <code>@robojs/better-stack</code> plugin already provides a more robust solution for this, so use that instead if you need heartbeat functionality.</li><li><strong>Moved <code>robo doctor</code> command</strong>: The <code>robo doctor</code> command has been moved to the <code>@roboplay/sage</code> CLI tool.</li></ul><p>These changes should affect very few users, but we wanted to make sure you were aware of them. Clean ups like these help us keep Robo.js lean and mean!</p><h2 id="upgrading-to-v010">Upgrading to v0.10</h2><p>Normally, you&apos;d be able to run <code>robo upgrade</code> to upgrade to the latest version of Robo.js. However, due to the breaking changes in this release, we recommend uninstalling and reinstalling Robo.js to ensure a clean upgrade.</p><p>Here&apos;s how you can do that:<br></p><pre><code>npm uninstall @roboplay/robo.js
npm install robo.js
</code></pre><p>Don&apos;t forget to update your <code>import</code> statements as well!</p><p>Plugins can be updated in a similar way:<br></p><pre><code>npx robo add @robojs/ai
npx robo remove @roboplay/plugin-ai
</code></pre><p>We recommend adding the new plugin before removing the old one to get a chance to copy over any configuration files or data.</p><h2 id="whats-next">What&apos;s Next?</h2><p>We&apos;re excited to show what else is new in Robo.js v0.10! Stay tuned for more posts covering the new features and improvements.</p><p>Need help upgrading or have questions about the new release? Feel free to <strong><a href="https://roboplay.dev/discord?ref=blog.waveplay.com">ask us in our Discord server</a></strong>. &#x2728;</p>]]></content:encoded></item><item><title><![CDATA[Now Live: Free Dedicated Discord Bot Hosting on RoboPlay (Read for Invites Codes)]]></title><description><![CDATA[<p>We&apos;re beyond excited to unveil <strong>RoboPlay</strong>! It&apos;s not just another hosting service; it&apos;s a next-gen platform tailored for <a href="https://discord.js.org/?ref=blog.waveplay.com"><strong>Discord.js</strong></a> bots, especially those powered by the <a href="https://github.com/Wave-Play/robo.js?ref=blog.waveplay.com"><strong>Robo.js</strong></a> framework.</p><p>Currently in early beta. Plus, it&apos;s free to use, even post-beta, with some</p>]]></description><link>https://blog.waveplay.com/roboplay-beta-now-live/</link><guid isPermaLink="false">65cf1eb99356213df3392a63</guid><category><![CDATA[Robo.js]]></category><dc:creator><![CDATA[WavePlay Staff]]></dc:creator><pubDate>Fri, 16 Feb 2024 08:20:00 GMT</pubDate><media:content url="https://blog.waveplay.com/content/images/2024/02/playxlabs_Girl_magician_staring_at_a_massive_glowing_portal_in__45bbf281-9230-43ed-88c4-77d2683cd087-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.waveplay.com/content/images/2024/02/playxlabs_Girl_magician_staring_at_a_massive_glowing_portal_in__45bbf281-9230-43ed-88c4-77d2683cd087-1.png" alt="Now Live: Free Dedicated Discord Bot Hosting on RoboPlay (Read for Invites Codes)"><p>We&apos;re beyond excited to unveil <strong>RoboPlay</strong>! It&apos;s not just another hosting service; it&apos;s a next-gen platform tailored for <a href="https://discord.js.org/?ref=blog.waveplay.com"><strong>Discord.js</strong></a> bots, especially those powered by the <a href="https://github.com/Wave-Play/robo.js?ref=blog.waveplay.com"><strong>Robo.js</strong></a> framework.</p><p>Currently in early beta. Plus, it&apos;s free to use, even post-beta, with some neat premium options for those looking for a little extra.</p><h2 id="deploy-your-bot-in-under-5-minutes">Deploy Your Bot in Under 5 Minutes</h2><p>Getting your Discord.js bot up and running on RoboPlay is easy! Here&#x2019;s how:</p><p><strong>Node v18+</strong>: Make sure you have <a href="https://nodejs.org/en/download/?ref=blog.waveplay.com"><strong>Node.js 18 or newer</strong></a> installed on your system.</p><p><strong>Create Your Bot</strong>: Use <code>npx create-robo</code> to set up a Discord.js bot powered by Robo.js.</p><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m9jbd1xb9ilfx9zquudc.png" class="kg-image" alt="Now Live: Free Dedicated Discord Bot Hosting on RoboPlay (Read for Invites Codes)" loading="lazy"></figure><ul><li><strong>Learn the Basics</strong>: Get started with our <a href="https://docs.roboplay.dev/docs/getting-started?ref=blog.waveplay.com"><strong>quick start guide</strong></a> to understand the basics of Robo.js or check out our <a href="https://blog.waveplay.com/how-to-make-a-discord-robo/"><strong>to-do bot tutorial</strong></a>.</li></ul><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7jm6af71qw8in3nzzhct.png" class="kg-image" alt="Now Live: Free Dedicated Discord Bot Hosting on RoboPlay (Read for Invites Codes)" loading="lazy"></figure><ul><li><strong>Sign up for RoboPlay</strong>: Run <code>npx robo login</code> to open our auth page. Don&apos;t forget your invite code!</li></ul><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ya5g5jmlnxr7lrqhwbec.png" class="kg-image" alt="Now Live: Free Dedicated Discord Bot Hosting on RoboPlay (Read for Invites Codes)" loading="lazy"></figure><ul><li><strong>Deploy Your Bot</strong>: Launch your bot into the world with <code>npx robo deploy</code>, ensuring it stays online 24/7, free of charge!</li></ul><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gj6xt4umhauv475i41c1.png" class="kg-image" alt="Now Live: Free Dedicated Discord Bot Hosting on RoboPlay (Read for Invites Codes)" loading="lazy"></figure><p>Each RoboPlay account comes with a free &quot;Robo Pod&quot; to host your bot. Think of it as a dedicated server for your bot, without the need to compete for resources, but much easier to use.</p><h2 id="remote-bot-management-made-easy">Remote Bot Management Made Easy</h2><p>Until we have a full-fledged dashboard, you can manage your Discord.js bot powered by Robo.js using the command line:</p><ul><li><strong>Start Your Bot</strong>: <code>npx robo cloud start</code></li><li><strong>Stop Your Bot</strong>: <code>npx robo cloud stop</code></li><li><strong>View Your Bot&apos;s Logs</strong>: <code>npx robo cloud logs</code></li><li><strong>Check Your Bot&apos;s Status</strong>: <code>npx robo cloud status</code></li></ul><h2 id="robojs-simple-powerful-and-fun">Robo.js: Simple, Powerful, and Fun</h2><p>While RoboPlay provides the hosting, it&apos;s <strong>Robo.js</strong> that brings your bot to life! It&apos;s a powerful, yet simple, framework for Discord.js bots, with a built-in database, file-based structure, and so much more. All in just a few hundred kilobytes! (so smol)</p><p>&#x279E; <a href="https://docs.roboplay.dev/docs/getting-started?ref=blog.waveplay.com">&#x1F4DA; <strong>Documentation:</strong> Getting started</a></p><p>You can even install plugins to enhance your bot&apos;s functionality with a single command. Here are a few examples:</p><ul><li><strong>Moderation</strong>: Equip your bot with essential tools to manage and maintain your server.</li></ul><pre><code class="language-bash">npx robo add @roboplay/plugin-moderation
</code></pre><ul><li><strong>AI Chatbot</strong>: Transform your bot into an engaging chatbot using AI. Supports customized behaviors and Discord commands.</li></ul><pre><code class="language-bash">npx robo add @roboplay/plugin-ai
</code></pre><ul><li><strong>Web Server</strong>: Effortlessly create and manage API routes, turning your Robo project into a full-fledged API server.</li></ul><pre><code class="language-bash">npx robo add @roboplay/plugin-api
</code></pre><p><strong>&#x279E; <a href="https://docs.roboplay.dev/docs/advanced/plugins?ref=blog.waveplay.com#creating-plugins">&#x1F4DA; Learn how to make your own plugin</a></strong></p><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xql9nocpb22qjogevz0j.jpeg" class="kg-image" alt="Now Live: Free Dedicated Discord Bot Hosting on RoboPlay (Read for Invites Codes)" loading="lazy"></figure><h2 id="ready-to-join-grab-your-invite-code">Ready to Join? Grab Your Invite Code!</h2><p>Excited yet? We&apos;re including <strong>two invite codes</strong> for early access. If you miss out, don&apos;t fret! <strong><a href="https://roboplay.dev/discord?ref=blog.waveplay.com">Join our Discord and summon an invite for yourself</a></strong> with the <code>/claim-invite</code> command.</p><ul><li><strong>XY8G4SYZ-KT3BWRFN</strong></li><li><strong>BMDOQZX3-6B6UK4BJ</strong></li></ul><p>Our Discord server is also home to our very own AI bot, Sage, ready to assist with answers to your queries. Plus, our friendly staff are always on deck to help out. UwU</p><p>Our commitment with RoboPlay is to provide a robust, user-friendly platform for bot developers at every skill level. From your first line of code to a fully functional bot, we&apos;re excited to support your journey.</p><p>Keep your eyes peeled for what&apos;s next, and let&apos;s create something awesome together!</p>]]></content:encoded></item><item><title><![CDATA[Better Discord.js Chatbots: Revamped AI Plugin for Robo.js]]></title><description><![CDATA[<blockquote><strong><a href="https://github.com/Wave-Play/robo.js?ref=blog.waveplay.com">Robo.js</a></strong> is a framework for creating <strong><a href="https://discord.js.org/?ref=blog.waveplay.com">Discord.js</a></strong> bots with ease and best practices by default. Plugins extend your bot&apos;s features right away!</blockquote><p>It&apos;s now easier than ever to create AI-powered Discord bots with the latest updates to the Robo.js AI Plugin. This major</p>]]></description><link>https://blog.waveplay.com/revamped-ai-plugin/</link><guid isPermaLink="false">657c0f4b9356213df3392a4a</guid><category><![CDATA[Robo.js]]></category><category><![CDATA[Plugin]]></category><dc:creator><![CDATA[WavePlay Staff]]></dc:creator><pubDate>Fri, 15 Dec 2023 08:53:02 GMT</pubDate><media:content url="https://blog.waveplay.com/content/images/2023/12/ai-plugin-revamp.png" medium="image"/><content:encoded><![CDATA[<blockquote><strong><a href="https://github.com/Wave-Play/robo.js?ref=blog.waveplay.com">Robo.js</a></strong> is a framework for creating <strong><a href="https://discord.js.org/?ref=blog.waveplay.com">Discord.js</a></strong> bots with ease and best practices by default. Plugins extend your bot&apos;s features right away!</blockquote><img src="https://blog.waveplay.com/content/images/2023/12/ai-plugin-revamp.png" alt="Better Discord.js Chatbots: Revamped AI Plugin for Robo.js"><p>It&apos;s now easier than ever to create AI-powered Discord bots with the latest updates to the Robo.js AI Plugin. This major update allows you to inject knowledge into your bot, enabling it to remember past interactions and respond accordingly, rewrites the core AI engine, and adds new slash commands for more dynamic interactions.</p><p>By the way, for those new, this plugin makes creating a fully customizable AI Discord chatbot as easy as one command!</p><h2 id="installation-%F0%9F%92%BB">Installation &#x1F4BB;</h2><p>To add this plugin to your Robo.js project:</p><pre><code class="language-bash">npx robo add @roboplay/plugin-ai
</code></pre><p>New to Robo.js? Start your project with this plugin pre-installed:</p><pre><code class="language-bash">npx create-robo &lt;project-name&gt; -p @roboplay/plugin-ai
</code></pre><h2 id="insights-long-term-memory-and-knowledge-injection">Insights: Long-Term Memory and Knowledge Injection</h2><p>One of the most significant updates is the introduction of the Insights feature, adding depth to AI interactions:</p><ul><li><strong>Contextual Long-Term Memory</strong>: Insights feature allows AI to remember past interactions for more nuanced responses per channel.</li><li><strong>Default Knowledge Injection</strong>: Inject your bot with knowledge by placing documents in the project&apos;s <code>documents</code> folder. Any documents in this folder are automatically loaded into the AI engine&apos;s RAG model.</li></ul><pre><code>- /documents
	- my-first-document.txt
	- my-second-document.md
	- my-third-document.json
</code></pre><p>This feature uses OpenAI&apos;s Assistant API in the default model. Just starting your bot will automatically set up an Assistant instance matching your bot&apos;s name, commands, system messages, documents, and more.</p><p>Insights is enabled by default, but you can disable it in the plugin configuration:</p><pre><code class="language-js">export default {
	insights: false
}
</code></pre><p>By the way, our very own Robo, Sage, uses this feature to help people learn about Robo.js. We fed it the <a href="https://docs.roboplay.dev/?ref=blog.waveplay.com">Robo.js documentation</a> and a few other documents, and it&apos;s been learning ever since!</p><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lw4cs5ck4tanrj9obvyu.png" class="kg-image" alt="Better Discord.js Chatbots: Revamped AI Plugin for Robo.js" loading="lazy"></figure><h2 id="custom-ai-engine-support">Custom AI Engine Support</h2><p>You can now use any AI model of your choice with the new <code>engine</code> configuration option. Just extend the <code>BaseEngine</code> class and pass it to the plugin configuration:</p><pre><code class="language-js">export default {
	engine: new MyCustomEngine()
}
</code></pre><p>By default, this plugin still uses OpenAI&apos;s API, but you can now use any AI engine you want. This feature is ideal for developers who want to use their own AI models or integrate with other AI APIs!</p><blockquote><strong>Note:</strong> This feature is still in beta. We&apos;re working on improving the API and documentation for custom AI engine support.</blockquote><h2 id="new-slash-commands-for-dynamic-interaction">New Slash Commands for Dynamic Interaction</h2><p>These new commands add a layer of versatility to how users interact with their AI-powered bots:</p><ul><li><strong>/chat</strong>: Ideal for AI interactions when &quot;Message Content&quot; intent isn&apos;t enabled.</li><li><strong>/imagine</strong>: Enables your bot to generate images from text prompts.</li><li><strong>/ai say</strong>: A feature for moderators to communicate through the bot, with options for direct or AI-styled speech.</li></ul><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4keu2u4dvjavvpmrbp8h.png" class="kg-image" alt="Better Discord.js Chatbots: Revamped AI Plugin for Robo.js" loading="lazy"></figure><h2 id="advanced-natural-language-command-execution">Advanced Natural Language Command Execution</h2><p>The plugin now adeptly handles complex responses and options, enhancing the AI-bot interaction:</p><ul><li><strong>Full Support for Dynamic Responses</strong>: Including embeds, files, and actions in AI-driven interactions.</li><li><strong>Improved Handling of Options</strong>: Accurate processing of &quot;Role&quot; or &quot;GuildMember&quot; options in natural language commands.</li></ul><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w2zmdakrv5jzxgeuce9y.png" class="kg-image" alt="Better Discord.js Chatbots: Revamped AI Plugin for Robo.js" loading="lazy"></figure><h2 id="simplified-and-more-powerful-javascript-api">Simplified and More Powerful JavaScript API</h2><p>The JavaScript API has been refined for better usability and more creative control:</p><ul><li><strong>Renamed and Simplified AI API</strong>: <code>AIEngine</code> is now <code>AI</code>, offering a more intuitive interface.</li><li><strong>Enhanced Helper Functions</strong>: Functions like <code>selectOne</code> benefit from the new JSON mode, improving their reliability.</li></ul><h2 id="breaking-changes-key-updates-to-note">Breaking Changes: Key Updates to Note</h2><p>This update includes some changes that may affect your current setup:</p><ul><li><strong>Environment Variable Update</strong>: The plugin now uses <code>OPENAI_API_KEY</code> as the environment variable, replacing the previous <code>openaiKey</code> configuration option.</li><li><strong>API Renaming</strong>: The <code>AIEngine</code> export has been simplified and renamed to <code>AI</code>. This change streamlines the API and enhances its usability.</li></ul><h2 id="expanded-interaction-capabilities">Expanded Interaction Capabilities</h2><p>The update also enhances voice and web interactions, making AI bots more versatile:</p><ul><li><strong>Voice Channel Interactions</strong>: With <code>@roboplay/plugin-ai-voice</code>, AI can now engage in voice channels. It will be updated within the next few days to support this latest update.</li><li><strong>Web API Integration</strong>: <code>@roboplay/plugin-api</code> adds a new web chat endpoint for AI interactions.</li></ul><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/efe4qxr5v9bradx93sz6.png" class="kg-image" alt="Better Discord.js Chatbots: Revamped AI Plugin for Robo.js" loading="lazy"></figure><p>This major update to the <code>@roboplay/plugin-ai</code> opens up new possibilities for Discord.js bot developers using Robo.js. It brings sophistication and a new level of interaction to AI-powered bots!</p><p><a href="https://roboplay.dev/docs?ref=blog.waveplay.com"><strong>&#x279E; Documentation:</strong> Getting started</a></p><p><a href="https://roboplay.dev/discord?ref=blog.waveplay.com"><strong>&#x279E; Community:</strong> Join our Discord server</a></p><p>Experience the next level of bot interactions with the latest updates to the Robo.js AI Plugin!</p>]]></content:encoded></item><item><title><![CDATA[Introducing DevTools Plugin for Enhanced Robo.js Development]]></title><description><![CDATA[<blockquote><strong><a href="https://github.com/Wave-Play/robo.js?ref=blog.waveplay.com">Robo.js</a></strong> is a framework designed for creating <strong><a href="https://discord.js.org/?ref=blog.waveplay.com">Discord.js</a></strong> bots with ease and best practices by default. Plugins extend your bot&apos;s features right away!</blockquote><hr><p>We&apos;re happy to introduce <code>@roboplay/plugin-devtools</code>, a comprehensive development toolkit designed specifically for debugging <strong>Discord.js</strong> bots created with the <strong><a href="https://github.com/Wave-Play/robo?ref=blog.waveplay.com">Robo.</a></strong></p>]]></description><link>https://blog.waveplay.com/robo-devtools-plugin/</link><guid isPermaLink="false">656bc7179356213df3392a36</guid><category><![CDATA[Robo.js]]></category><category><![CDATA[Plugin]]></category><dc:creator><![CDATA[WavePlay Staff]]></dc:creator><pubDate>Sun, 03 Dec 2023 00:10:55 GMT</pubDate><media:content url="https://blog.waveplay.com/content/images/2023/12/PlayLabs_16_bit_pixel_art._giant_magic_wand_in_center._focus_on_574bad22-8d60-457f-9949-27ed78c74804.png" medium="image"/><content:encoded><![CDATA[<blockquote><strong><a href="https://github.com/Wave-Play/robo.js?ref=blog.waveplay.com">Robo.js</a></strong> is a framework designed for creating <strong><a href="https://discord.js.org/?ref=blog.waveplay.com">Discord.js</a></strong> bots with ease and best practices by default. Plugins extend your bot&apos;s features right away!</blockquote><hr><img src="https://blog.waveplay.com/content/images/2023/12/PlayLabs_16_bit_pixel_art._giant_magic_wand_in_center._focus_on_574bad22-8d60-457f-9949-27ed78c74804.png" alt="Introducing DevTools Plugin for Enhanced Robo.js Development"><p>We&apos;re happy to introduce <code>@roboplay/plugin-devtools</code>, a comprehensive development toolkit designed specifically for debugging <strong>Discord.js</strong> bots created with the <strong><a href="https://github.com/Wave-Play/robo?ref=blog.waveplay.com">Robo.js framework</a></strong>.</p><p>Whether you&apos;re testing APIs, monitoring resources, or emulating specific behaviors, this plugin streamlines the process, making development with Robo.js more efficient and enjoyable.</p><h2 id="installation-%F0%9F%92%BB">Installation &#x1F4BB;</h2><p>To add this plugin to your Robo.js project:<br></p><pre><code>npx robo add @roboplay/plugin-devtools
</code></pre><p>New to Robo.js? Start your project with this plugin pre-installed:<br></p><pre><code>npx create-robo &lt;project-name&gt; -p @roboplay/plugin-devtools
</code></pre><h2 id="development-focused-commands">Development-Focused Commands</h2><p>The plugin offers a variety of commands to enhance your development workflow:</p><ul><li><code>/devtools example defer</code>: Demonstrates Sage&apos;s auto deferral feature with different behaviors.</li><li><code>/devtools example error</code>: Intentionally triggers errors, useful for testing Sage&apos;s debug mode.</li><li><code>/devtools example permission-dm</code>: Shows how slash commands work outside direct messages.</li><li><code>/devtools flashcore clear</code>: Clears all values in Flashcore (use with caution!).</li><li><code>/devtools flashcore delete</code>: Deletes a specific key from Flashcore.</li><li><code>/devtools flashcore get</code>: Retrieves the current value of a specific Flashcore key.</li><li><code>/devtools flashcore set</code>: Sets a value for a given Flashcore key.</li><li><code>/devtools flashcore watch</code>: Monitors changes to Flashcore keys, sending notifications on updates.</li><li><code>/devtools module check</code>: Checks if a specific module is active.</li><li><code>/devtools module set</code>: Toggles the active state of a module.</li><li><code>/devtools state get</code>: Fetches a state value.</li><li><code>/devtools state set</code>: Sets a state value.</li></ul><p>Dive into the <a href="https://github.com/Wave-Play/robo.js/tree/main/packages/plugin-devtools?ref=blog.waveplay.com">plugin&apos;s source code</a> for practical usage examples.</p><p>The above commands are an excellent way to test Robo APIs such as <a href="https://docs.roboplay.dev/docs/basics/flashcore?ref=blog.waveplay.com">Flashcore</a>, <a href="https://docs.roboplay.dev/docs/basics/sage?ref=blog.waveplay.com">Sage</a>, <a href="https://docs.roboplay.dev/docs/basics/states?ref=blog.waveplay.com">States</a>, and more. They also provide a glimpse into the inner workings of Robo.js, helping you understand the framework better.</p><h2 id="essential-resource-monitoring">Essential Resource Monitoring</h2><p>Stay ahead of performance issues with the resource monitoring feature. This function allows you to keep track of your Robo&apos;s CPU and RAM usage, helping you identify and address any performance bottlenecks.</p><p>Enable it in the plugin configuration:<br></p><pre><code>export default {
    monitorInterval: 10_000, // Every 10 seconds
    monitorResources: true // Enable resource monitoring
}
</code></pre><h2 id="a-note-on-deployment">A Note on Deployment</h2><p><code>@roboplay/plugin-devtools</code> is tailored for development environments. Remember to remove it before deploying your Robo to safeguard your server and database:<br></p><pre><code>npx robo remove @roboplay/plugin-devtools
</code></pre><h2 id="join-the-robojs-adventure">Join the Robo.js Adventure</h2><p>New to Robo.js? Start building your own feature-rich Discord.js bot today:<br></p><pre><code>npx create-robo &lt;name&gt;
</code></pre><p>&#x279E; <a href="https://roboplay.dev/docs?ref=blog.waveplay.com"><strong>Documentation:</strong> Getting started</a></p><p>&#x279E; <a href="https://roboplay.dev/discord?ref=blog.waveplay.com"><strong>Community:</strong> Join our Discord server</a></p><p>Upgrade your Robo.js development with <code>@roboplay/plugin-devtools</code> and experience a streamlined, efficient development process.</p>]]></content:encoded></item><item><title><![CDATA[Introducing the Moderation Tools Plugin for Robo.js]]></title><description><![CDATA[<p>Managing a Discord server just got more streamlined and efficient with the release of the <code>@roboplay/plugin-modtools</code>. This powerful plugin is designed to elevate the moderation capabilities of your Robo.js projects, infusing them with advanced features for a smoother and more effective server management experience.</p><h2 id="installation-%F0%9F%92%BB">Installation &#x1F4BB;</h2><p>To add</p>]]></description><link>https://blog.waveplay.com/robo-modtools-plugin/</link><guid isPermaLink="false">656303019356213df3392a0a</guid><dc:creator><![CDATA[WavePlay Staff]]></dc:creator><pubDate>Sun, 26 Nov 2023 08:45:45 GMT</pubDate><media:content url="https://blog.waveplay.com/content/images/2023/11/PlayLabs_16_bit_pixel_art._a_dark_night_sky_with_several_vibran_e5373124-e6a2-45f5-9a24-fcc20109b222.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.waveplay.com/content/images/2023/11/PlayLabs_16_bit_pixel_art._a_dark_night_sky_with_several_vibran_e5373124-e6a2-45f5-9a24-fcc20109b222.png" alt="Introducing the Moderation Tools Plugin for Robo.js"><p>Managing a Discord server just got more streamlined and efficient with the release of the <code>@roboplay/plugin-modtools</code>. This powerful plugin is designed to elevate the moderation capabilities of your Robo.js projects, infusing them with advanced features for a smoother and more effective server management experience.</p><h2 id="installation-%F0%9F%92%BB">Installation &#x1F4BB;</h2><p>To add this plugin to your Robo.js project:</p><!--kg-card-begin: markdown--><pre><code class="language-bash">npx robo add @roboplay/plugin-modtools
</code></pre>
<!--kg-card-end: markdown--><p>New to Robo.js? Start your project with this plugin pre-installed:</p><!--kg-card-begin: markdown--><pre><code class="language-bash">npx create-robo &lt;project-name&gt; -p @roboplay/plugin-modtools
</code></pre>
<!--kg-card-end: markdown--><h2 id="whats-new-in-moderation">What&apos;s New in Moderation?</h2><p>The Enhanced Moderation Tools Plugin offers a comprehensive suite of commands, bringing flexibility and depth to server moderation:</p><h3 id="slash-commands">Slash Commands</h3><p>Empower your server&apos;s moderation team with these intuitive slash commands:</p><ul><li><strong>/mod audit</strong>: Get a deep insight into member activities.</li><li><strong>/mod ban</strong>: Remove rule violators effectively.</li><li><strong>/mod forgive</strong>: Offer a clean slate to members by clearing past strikes.</li><li><strong>/mod kick</strong>: Temporarily remove disruptive members.</li><li><strong>/mod report</strong>: Streamline issue reporting within the community.</li><li><strong>/mod setup</strong>: Easily configure your moderation tools.</li><li><strong>/mod timeout</strong>: Implement cooling-off periods.</li><li><strong>/mod warn</strong>: Discreetly warn members, maintaining server decorum.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.waveplay.com/content/images/2023/11/Screenshot-2023-11-26-at-3.11.15-PM.png" class="kg-image" alt="Introducing the Moderation Tools Plugin for Robo.js" loading="lazy" width="1244" height="688" srcset="https://blog.waveplay.com/content/images/size/w600/2023/11/Screenshot-2023-11-26-at-3.11.15-PM.png 600w, https://blog.waveplay.com/content/images/size/w1000/2023/11/Screenshot-2023-11-26-at-3.11.15-PM.png 1000w, https://blog.waveplay.com/content/images/2023/11/Screenshot-2023-11-26-at-3.11.15-PM.png 1244w" sizes="(min-width: 720px) 720px"><figcaption>Example use of <em><strong>/mod ban</strong></em></figcaption></figure><h3 id="context-commands">Context Commands</h3><p>Context commands make moderation actions more accessible and user-friendly:</p><ul><li><strong>Report Anonymously</strong> (Message): Facilitate anonymous reporting.</li><li><strong>Audit</strong> (User): Instantly audit user activities.</li></ul><h3 id="moderation-channels">Moderation Channels</h3><p>Organize and track server activities efficiently with specialized moderation channels:</p><ul><li><strong>Moderator Logs</strong>: Keep a detailed record of all moderation actions.</li><li><strong>Moderator Mail</strong>: Centralize and manage user reports effectively.</li></ul><h2 id="easy-setup">Easy Setup</h2><p>Setting up the plugin is hassle-free. Run <code>/mod setup</code> as a moderator to tailor the moderation tools to your server&apos;s needs. Choose your moderation channels, test actions safely with Test Mode, enable Confirmation Mode to avoid unintentional moderation actions, or restrict all commands to only moderators with Lockdown Mode.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.waveplay.com/content/images/2023/11/Screenshot-2023-11-26-at-3.10.19-PM.png" class="kg-image" alt="Introducing the Moderation Tools Plugin for Robo.js" loading="lazy" width="1914" height="734" srcset="https://blog.waveplay.com/content/images/size/w600/2023/11/Screenshot-2023-11-26-at-3.10.19-PM.png 600w, https://blog.waveplay.com/content/images/size/w1000/2023/11/Screenshot-2023-11-26-at-3.10.19-PM.png 1000w, https://blog.waveplay.com/content/images/size/w1600/2023/11/Screenshot-2023-11-26-at-3.10.19-PM.png 1600w, https://blog.waveplay.com/content/images/2023/11/Screenshot-2023-11-26-at-3.10.19-PM.png 1914w" sizes="(min-width: 720px) 720px"><figcaption>Don&apos;t worry, only moderators can change things</figcaption></figure><h2 id="smarter-moderation-with-ai-integration">Smarter Moderation with AI Integration</h2><p>Imagine moderating your server using natural language commands. By integrating the <code>@roboplay/plugin-ai</code>, this becomes a reality:</p><pre><code class="language-bash">npx robo add @roboplay/plugin-ai
</code></pre><p>Direct your Robo in plain language, like &#x201C;<em>SageBot, please ban Baguette for spamming bread</em>,&#x201D; and let the AI take care of the rest.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.waveplay.com/content/images/2023/11/Screenshot-2023-11-26-at-3.38.36-PM.png" class="kg-image" alt="Introducing the Moderation Tools Plugin for Robo.js" loading="lazy" width="2000" height="778" srcset="https://blog.waveplay.com/content/images/size/w600/2023/11/Screenshot-2023-11-26-at-3.38.36-PM.png 600w, https://blog.waveplay.com/content/images/size/w1000/2023/11/Screenshot-2023-11-26-at-3.38.36-PM.png 1000w, https://blog.waveplay.com/content/images/size/w1600/2023/11/Screenshot-2023-11-26-at-3.38.36-PM.png 1600w, https://blog.waveplay.com/content/images/2023/11/Screenshot-2023-11-26-at-3.38.36-PM.png 2328w" sizes="(min-width: 720px) 720px"><figcaption>Just like slash commands, AI bots will only listen to those with the necessary permissions</figcaption></figure><p>This plugin marks a significant leap in our ongoing efforts to make Discord server management more intuitive and efficient. We&apos;re excited for you to try the Enhanced Moderation Tools Plugin and take your server&apos;s moderation to the next level!</p><h2 id="join-the-robojs-journey">Join the Robo.js Journey</h2><p>New to Robo.js? Start building your own feature-rich Discord bot today:</p><pre><code class="language-bash">npx create-robo &lt;name&gt; -p @roboplay/plugin-modtools
</code></pre><p>&#x279E; <a href="https://roboplay.dev/docs?ref=blog.waveplay.com"><strong>Documentation:</strong> Getting started</a></p><p>&#x279E; <a href="https://roboplay.dev/discord?ref=blog.waveplay.com"><strong>Community:</strong> Join our Discord server</a></p><p>Experience an enhanced moderation experience with Robo.js today! &#x1F680;</p>]]></content:encoded></item></channel></rss>