/3DS-RPC

Connect your 3DS playing status to Discord!

Primary LanguagePython

3DS Discord Rich Presence

Display your 3DS game status on Discord!

This README will be split into two sections:

Notice

By using this app, you agree to the terms listed in TERMS.md.

Credits

This project connects to a self-hosted API (or one provided by me) and fetches data received by mimicking a real 3DS connecting to the friends service and receiving friend data.
I'd like to thank:

  • kinnay and his NintendoClients
    • NintendoClients is what this program uses to pretend to be a real 3DS.
  • hax0kartik and his 3dsdb
    • 3dsdb is an open-source project that includes data about games on the eShop. A modified version of it is used to retrieve the game's name and icon url.
  • HEYimHeroic and her mii2studio
    • mii2studio is a command line tool written in Python that allows the user to convert between various versions of Nintendo Mii formats. I have created a modified version of it internally to convert CFSD (really, MiiData) to Mii Studio code.
  • jaames and his mii-qr.py
    • mii-qr.py is a Python script that converts from the encrypted QR code format to normal CFSD. For whatever reason, a direct connection to the friends service on the 3DS returns a QR code, so this is insanely useful. Thank you.
  • qwerty for her pypresence
    • pypresence is a useful Python module that allows developers to connect their games to Discord via Python. It is how 3DS-RPC sends Rich Presence data to Discord.
  • StartBootstrap for their startbootstrap-sb-admin
    • startbootstrap-sb-admin is a template using bootstrap which is how I created the friends network website!
  • MrGameCub3 for resource design!
    • He made all of the pretty things :) -- except for the app's GUI. I did that. But the pretty logos were his!

Quickstart Guide

3DS-RPC has been updated to support Mobile users and to work without a Desktop client open!

  1. Open the website 3dsrpc.com and click on the icon in the top right-hand corner, then choose Register. By following the steps on the website, you will be able to connect your target Discord account to 3DS-RPC.

  2. After doing so, enter your consoles menu by clicking on your PFP in the top-right corner and choosing "'s consoles".

  3. In the consoles menu, select "Register Friend Code" and follow the on-screen instructions. After doing so, click "Add To Consoles".

  4. You can change which consoles you'd like to enable, if any, in the consoles menu!

Tutorial GIF (which is STILL pronounced 'gif', not 'jif')

If you'd still like to use the Desktop Client instead of linking your Discord account, that's still an option! You can do so by following the instructions below:

Using the Desktop Client

Download the app from the latest release and run!
Once ran, the app will ask for you to add a friend on your Nintendo 3DS. This is for the express purpose of pulling your currently playing Nintendo game.

  1. Open Discord first, and then open 3DS-RPC

  2. Add the bot's friend code provided

  3. Enter your own friend code when prompted

  4. Profit! - Each update is around every ~30 seconds (keep in mind, the backend is updating at a different rate than the client, so this may vary). They are automatic, but it may take upwards of one minute after the program begins. To make certain that everything is in order, check your 3DS' friends list to verify the bot account has added you back.

Tutorial GIF (which is pronounced 'gif', not 'jif')

FAQ

If none of the below Qs and As help with your problem, feel free to file an issue. Alternatively, you can join the 3DS-RPC Discord server for a better back-and-forth method of communication with me!

Q: Whenever I play a game, 3DS-RPC won't change from the home screen!
A: Firstly, try waiting ~30 seconds, as the application has a fairly slow response time. Secondly, make sure that you've enabled "Show friends what you're playing?" on your 3DS' friends app.

Please don't DDoS me...

In-depth guide

Building

For Windows, run

cd .\3DS-RPC\client\scripts
.\build.bat

For MacOS, run

cd ./3DS-RPC/client/scripts
chmod +x build.sh
./build.sh

*(Make sure you have python3 and pip installed)

Understanding

The intricacies of this project are deep and innumerable. I started this project some weeks before October 16th (at least since kinnay/NintendoClients#88), when I published the first commit on this repository. I have records of the sheer amount of pain I have undergone to create this (see 2d1ad37, everything on Feb 11th, this thing, and oh so much more), but somehow, I prevailed.

Anywho, none of this matters for the in-depth 'guide'. If you are looking at this guide because you can't figure something out or are having an error, please check the FAQ, join my Discord server, or file an issue. Instead, we're going to be looking at the inner-workings of the project.

So sit back, relax, and wait because, chances are, this guide is either unfinished or out-of-date.

The Beast

Let's get to the good part, shall we?

Basic control structure:

just a diagram