


This Discord bot is designed to manage and facilitate gym battles for a Pokémon-themed server. It allows administrators to assign Gym Leader roles to users, manage challenges between players and Gym Leaders, and maintain a leaderboard of players who have won gym battles. The bot also supports handling wins and losses, as well as gym badges for challengers who defeat Gym Leaders.
The bot will also handle sending challenge requests, handling challenge acceptances and rejections, and notifying Gym Leaders and challengers about the status of their challenges. Additionally, it provides utilities for managing and displaying gym badges earned by players.
The bot will need the following permissions:
Send Messages
Manage Messages
Manage Threads
Embed Links
Attach Files
Read Message History
Add Reactions
* Make sure to move the bot up underneath moderator roles, etc. so that it can manage the Gym Leader Roles and the Gym Badge Roles.
Here’s a summary of the main bot commands and their usage:
setup_server
: Automatically sets up all Gym Channels and Roles for you. Admin only command.assign
: Assigns the Gym Leader role to a user. Usage:.assign @User GymType
. Only “League Manager” role can use this command. It will create a new role if not made already called “Gym Leader – Type” Type will be replaced by Fire, Water, Grass, Psychic, etc.challenge
: Challenges a Gym Leader to a battle. Usage:.challenge @GymLeader GymType
.cancel
: Cancels an ongoing challenge. Usage:.cancel
.winner
: Reports the winner of a challenge. Usage:.winner @Winner
.
– When you report a winner, the winner will be logged and assigned the appropriate gym badge.
– Only the Gym Leader can report the winner.
– The badge that will be assigned to the user will be that of the Gym Leaders Gym Type. Example: If the Gym leader of the Fire gym with a role of “Gym Leader – Fire” runs the .winner command, the user will be assigned the “Fire Gym Badge”.
– The Gym Leader cannot report themselves the winner. They must either .winner or .loser the challenger only.loser
: If the challenger loses, type .loser @challenger to clear the challenge. No win will be logged and no badge given.redact_win
: Redacts a win for a user in case a winner is recorded incorrectly. Usage:.redact_win @Winner
. Only Gym Leaders can use this command.add_win
: Adds a win to a user. Usage:.add_win @Winner
. Only Gym Leaders can use this command.leaderboard
: Displays the gym battle leaderboard. Usage:.leaderboard [page]
.wins
: Shows the number of wins for a specific user. Usage:.wins @User
.reset_wins
: Resets all recorded wins. Usage:.reset_wins
. Only “League Manager” role can use this command.removebadges
: Remove all Badges from ALL members. To reset the Season. The bot needs to be above the Gym Badge roles in hierarchy to do this command. “League Manager” role only command.gymbadges
: Displays a png image of all of the users current badges defined in the bot script.stats
: Displays the specified users stats. Example: .stats @User will show their challenge requests, wins, losses, and win/loss ratio.reset_stats
: Usage: .reset_stats @User Will reset that users stats back to 0.new_season
: Resets everything and starts a new season. “League Manager” role command only. Cleans out all files, stats, challenges, and winners.create_gyms
: Creates a category named “Pokemon League” and automatically adds all of the gym type channels for you. Just be sure to set the permissions correctly in the Pokemon Leage category when finished. By default the @everyone permission will have view channel, send messages, and read message history on.create_gym_leader_roles
: This command will create all 18 gym type roles for you automatically. Make sure your bot has “Manage Roles” permissions. It will assign a badge icon, and color for you automatically as well. This can be changed later on. NOTE: This requires your server boost to be level 2 to unlock icons. If you are not level 2, run the command create_gym_leader_roles_no_iconscreate_gym_badge_roles
: This command will create all 18 gym badge roles for you automatically. Make sure your bot has “Manage Roles” permissions. It will assign a badge icon, and color for you automatically as well. This can be changed later on. NOTE: This requires your server boost to be level 2 to unlock icons. If you are not level 2, run the command create_gym_badge_roles_no_iconsset_gym_leaders
: This command will set all permissions to the Gym Channels that were created for each gym leader to now have Manage Channel Permissions, Manage Messages, Manage Roles, and Manage Webhooks over their perspective channel. Example: Gym Leader – Rock will now have the correct perms in channel “Rock Gym”.
Add this bot to your server today! Contact Gengar via DM on https://genpkm.com (link to discord)
Bot Rental is $3 per month to help me cover the hosting fees each month. Your bot is on a dedicated server and will be up 24/7 with no interruption. I will set everything up in your server for you when the bot joins, I will also customize your gym badge background as well for the .gymbadges command to suit your server.

If you have a trade bot and are wanting to update the main files that produce legal pokemon that are newly released (Charizard, Cinderace) you need to download 2 files and replace them in your Sysbot folder
- https://projectpokemon.org/home/files/file/2445-pkhex-development-build/ You only need pkhex.core.dll from the download. Send that to your sysbot folder.
- https://github.com/architdate/PKHeX-Plugins Download and only move the PKHeX.Core.AutoMod folder and paste that whole folder in your sysbot folder.

This tutorial is for people that already are familiar with a CFW Switch (Custom Firmware). Items you need to download
- PKHeX: https://projectpokemon.org/home/files/file/1-pkhex/
- Sysbot: https://github.com/zyro670/NotForkBot.NET/tree/NotKoiTest
Click the green check mark next to zyro670 Misc fixes to various files… Click Details > Click the Link that has 0 errors / 68 warnings (Could be different when you view it) Under “related” click on 1 published. Click on Sysbotx64 and to the right you will see 3 dots. Click it > Download Artifacts. 2b. Sysbot Base – https://github.com/olliz0r/sys-botbase/releases/tag/v2.2 This needs to go into the root of your SD Card.
- RaidCrawler.zip: https://github.com/LegoFigure11/RaidCrawler/releases
- RaidCalc.zip: https://github.com/MewTracker/sv-research/releases
- ALM Plugin for PKHeX: https://github.com/architdate/PKHeX-Plugins/releases
A. Download and execute almsetup_stable.exe
OR
B: Download the PKHeX-Plugins.zip file and upload AutoModPlugins.dll and QRPlugins.dll to a new folder called “Plugins” that is in the same folder as PKHeX.
Extract RaidCrawler, and RaidCalc into a Folder on your desktop, preferably together.
Setting up your bot for Discord
Go to the Discord Developer Portal and make a new bot; https://discord.com/developers/applications Click New Application > Name it and agree to terms. Click Create. Go to Bot > Add Bot. Public Bot > Disable. Scroll down to Privileged Gateway Intents. Make sure all 3 are enabled. PRESENCE INTENT, SERVER MEMBERS INTENT, and MESSAGE CONTENT INTENT. Under text permissions check: Send Messages, Manage Messages, Embed Links, Attach Files and Read Message History. Save Changes. Scroll back to top, and click on reset token. Grab and copy your token. Save this token somewhere safe because you will need it again in the future. This token will be going into our Discord Settings in our Sysbot. Next, go to Oauth2 above Bot in your Discord Developer Portal. Click URL Generator. Under Scopes, check bot. Scroll to the bottom and copy that URL. Paste that into your browser and add the bot to your server. Setting up our sysbot: Open sysbot.exe in your Sysbotx64 folder.
Once the program opens, click the HUB tab. Go to the bottom and find Integration > Discord. Expand it. Click in the empty box next to Token and paste in the token you copied earlier in your bot set up. Under RoleSudo > List, go in and add your role that can run commands for the bot. (There is a button to the far right when you click in the box next to it. Click that) You will need to add your role ID and the name of the role. To get the role ID in discord, you must enable developer options. User settings > Advanced > Enable Developer Mode. Go to the Roles you want to be able to run commands for the but such as $resv to start the raid embeds and add those roles in. Go to Server Settings > Roles > Find your Role > Click More > Copy ID.
How to fix error code: 2155-8007 when connecting online in SysCFW
This is happening because you followed a guide that told you to block online access on SysCFW. The guide you should be following is https://switchgui.de/.
1. Navigate to /atmosphere/hosts/
and look for the files named default.txt
or emummc.txt
. default.txt
blocks connections for both SysCFW and EmuNAND. emummc.txt
blocks connections for EmuNAND only.
2. Remove the default.txt
to enable connections on SysCFW. You do not need an EmuNAND, but if you have one, you should leave connections blocked.
You should NOT go online on EmuNAND in any case. Do not unblock EmuNAND and then go online because this can cause mismatched logs and get your Switch banned.
But won’t I be banned if I go online on SysCFW? Not if you own legitimate games and are only doing simple things like save editing. Read the other pins in this channel for more information about ban risks.
Before you get started
You must have a modded switch with Custom Firmware on it. See https://discord.com/channels/1061273462016061470/1073622603677302825 for info.
Setting up your bot for Discord
Go to the Discord Developer Portal and make a new bot; https://discord.com/developers/applications Click New Application > Name it and agree to terms. Click Create. Go to Bot > Add Bot. Public Bot > Disable. Scroll down to Privileged Gateway Intents. Make sure all 3 are enabled. PRESENCE INTENT, SERVER MEMBERS INTENT, and MESSAGE CONTENT INTENT. Under text permissions check: Send Messages, Manage Messages, Embed Links, Attach Files and Read Message History. Save Changes. Scroll back to top, and click on reset token. Grab and copy your token. Save this token somewhere safe because you will need it again in the future. This token will be going into our Discord Settings in our Sysbot. Next, go to Oauth2 above Bot in your Discord Developer Portal. Click URL Generator. Under Scopes, check bot. Scroll to the bottom and copy that URL. Paste that into your browser and add the bot to your server.
Downloading & Installing Sysbot Base for your Switch
- Go to https://github.com/olliz0r/sys-botbase/releases/tag/v2.2 and download the latest .zip file.
Extract the atmosphere file on your desktop. Put your SD card into the reader on your computer. Drag and drop the atmosphere folder on your desktop to the SD card. Eject SD card and put back into your switch. Put your switch into RCM mode by sliding your RCM jig into your right joycon rail and pressing volume + and power button, and inject your payload to boot your switch. Boot into cfw sysnand.
Downloading and Installing Sysbot Computer Program
- Go to https://berichan.github.io/GetNHSE/?sv and download the file. Extract to your desktop.
Open sysbot.exe Now that you have the program opened, you will need to configure your settings. First put in your switches IP address. You can get your switches IP address by going to system settings > internet > IP address. Leave the port at 6000, Leave it on WiFi and set the trade mode to FlexTrade
- Click the Hub tab. Go to the BotTrade section and expand the trade section.
Most of these settings can remain the same, and if you want to learn more about these settings, go to the official wiki I post at the end. TradeWaitTime set to 45 or 50. This will give members more time to put in the code before the bot decides to quit the trade because it can’t find trainer.
- In the Hub tab, scroll down and find Anti Idle set to true.
- In the Hub tab, scroll down and find Discord and expand the settings.
Token put in your bots token you copied from step 1.
Command Prefix default command is $ to make your command $trade
. But you can change it to whatever you want. Role Can Trade Put in the roles name and role ID you want to be allowed to use your bot and trade commands.
RoleSudo Put in your ID so that you are admin over the bot and can use admin commands. Click on List and click the … box next to (collection) to add. ChannelWhitelist Put in the channel ID in which you want the bot to listen to commands in. Or when you have the bot installed on discord go to your channel and type $addchannel
. LoggingChannels Put in the channel ID where you want to log all trading events.
TradeStartingChannels Put in the channel ID where you want to log trade starting output. Normally this is the same channel ID as LoggingChannels
- In the Hub tab, scroll down and find Legality settings and expand.
Follow all the steps on the Wiki page here: https://github.com/kwsch/SysBot.NET/wiki/Legality
- Once you have all the settings complete, your switch is booted into cfw sysnand, you can click the Start All button on your sysbot.exe program. It should light up green.
Troubleshooting
How to fix error code: 2155-8007 when connecting online in SysCFW
This is happening because you followed a guide that told you to block online access on SysCFW. The guide you should be following is https://switchgui.de/.
1. Navigate to /atmosphere/hosts/
and look for the files named default.txt
or emummc.txt
. default.txt
blocks connections for both SysCFW and EmuNAND. emummc.txt
blocks connections for EmuNAND only.
2. Remove the default.txt
to enable connections on SysCFW. You do not need an EmuNAND, but if you have one, you should leave connections blocked.
You should NOT go online on EmuNAND in any case.
Do not unblock EmuNAND and then go online because this can cause mismatched logs and get your Switch banned.
But won’t I be banned if I go online on SysCFW? Not if you own legitimate games and are only doing simple things like save editing.

To have the egg appear as if you received it from a picnic, use this: .Egg_Location=30023
This will also work for egg formats as well, but be sure to include your trainer info, example:
.Egg_Location=30023
.Met_Location=values
a crystal cavern | 30024
a distant land | 30007
a picnic | 30023
Alfornada | 96
Alfornada Cavern | 67
Area Zero (1) | 110
Area Zero (2) | 112
Area Zero (3) | 114
Area Zero (4) | 116
Area Zero (5) | 124
Area Zero (6) | 126
Area Zero (7) | 128
Artazon | 86
Asado Desert | 24
Cabo Poco | 80
Caph Squad’s Base | 99
Cascarrafa | 76
Casseroya Lake (1) | 40
Casseroya Lake (2) | 108
Cortondo | 84
Dalizapa Passage | 69
East Paldean Sea | 60
East Province (Area One) (1) | 34
East Province (Area One) (2) | 104
East Province (Area Two) | 36
East Province (Area Three) | 32
Faraway place | 4
Glaseado Mountain (1) | 38
Glaseado Mountain (2) | 42
Glaseado Mountain (3) | 68
Great Crater of Paldea | 50
Inlet Grotto | 64
Levincia | 78
Los Platos | 82
Medali | 90
Mesagoza (1) | 8
Mesagoza (2) | 72
Mesagoza (3) | 74
Montenevera | 94
Mystery Zone | 2
Naranja Academy | 130
Navi Squad’s Base | 107
North Paldean Sea | 62
North Province (Area One) | 46
North Province (Area Three) (1) | 44
North Province (Area Three) (2) | 102
North Province (Area Two) | 48
North Province (Area Two) (2) | 98
Poco Path | 70
Pokémon League | 10
Porto Marinada | 88
Research Station No. 1 | 111
Research Station No. 2 | 113
Research Station No. 3 | 115
Research Station No. 4 | 117
Ruchbah Squad’s Base | 103
Schedar Squad’s Base | 105
Segin Squad’s Base | 101
Socarrat Trail | 109
South Paldean Sea | 56
South Province (Area Five) | 18
South Province (Area Four) | 14
South Province (Area One) | 6
South Province (Area Six) (1) | 16
South Province (Area Six) (2) | 66
South Province (Area Three) | 20
South Province (Area Two) | 12
Tagtree Thicket (1) | 30
Tagtree Thicket (2) | 106
Uva Academy | 131
West Paldean Sea | 58
West Province (Area One) (1) | 22
West Province (Area Three) | 28
West Province (Area Two) | 26
Zapapico | 92
Zero Gate (1) | 52
Zero Gate (2) | 54
Zero Lab (1) | 118
Zero Lab (2) | 120
Zero Lab (3) | 122

To make any of the traded pokemon look like yours, you may assign OT, TID, and SID to each Pokemon you trade. That way it looks like you caught it yourself instead of traded it.
HOW TO OBTAIN YOUR TID/SID
1) Type “$dump” into one of the bots.
2) Wait for your DM from the bot with a Link Trade Code.
3) Once received, enter Link Trade Code in Switch. Join when the Bot says to.
4) Select a Pokemon you caught yourself in-game to the bot.
5) Upon finishing, the bot will send you a dump file with your TID/SID info in it.
As of 2/1/2023 some of our bots will give you the trainer info in your DM when you trade a Pokemon now
NOW WHAT?
Ok so you finally have your SID and TID. Now let’s put it in your template to make this Pokémon yours!
Let’s take this example showdown template here:
Great Tusk @ Booster Energy
Ability: Protosynthesis
Level: 80
Shiny: Yes
Tera Type: Steel
EVs: 252 Atk / 6 SpD / 252 Spe
Adamant Nature
– Body Press
– Headlong Rush
– Bulk Up
– Rapid Spin
Let’s enter in our trainer name, trainer ID and Secret ID to it.
Great Tusk @ Booster Energy
Ability: Protosynthesis
Level: 80
Shiny: Yes
Tera Type: Steel
EVs: 252 Atk / 6 SpD / 252 Spe
OT: YourNameHere
OTGender: Male
TID: 123456
SID: 1234
Adamant Nature
– Body Press
– Headlong Rush
– Bulk Up
– Rapid Spin
Below you will learn how to use batch commands, a way to customize your Showdown format Pokemon. Use the following commands below, and make sure the commands go above the moves in your template. Here is an example:
OT: YourNameHere
TID: 125123
SID: 2133
OTGender: Male
Language: English
EVs: 252 HP / 252 Atk / 6 Def
Ability: Oblivious
Tera Type: Psychic
Shiny: Yes
Ball: Love Ball
Adamant Nature
.Scale=255
.CurrentFriendLevel=255
.Ribbons=$suggestAll
– Slack Off
– Belly Drum
– Trick Room
– Zen Headbutt
Trainer name
.OT_Name=(Your OT Here)
SID & TID
.TrainerID7=(Your TID Here)
.TrainerSID7=(Your SID Here)
Gender
.OT_Gender=0 Male
.OT_Gender=1 Female
Pokemon language
.Language=1 Japanese
.Language=2 English
.Language=3 French
.Language=4 Italian
.Language=5 German
.Language=7 Spanish
.Language=8 Korean
.Language=9 Chinese Simplified
.Language=10 Chinese Traditional
IV
.IV_HP=31
.IV_ATK=31
.IV_DEF=31
.IV_SPA=31
.IV_SPD=31
.IV_SPE=31
EV
.EV_HP=252
.EV_ATK=252
.EV_DEF=252
.EV_SPA=252
.EV_SPD=252
.EV_SPE=252
Ganbaru values (effort levels) – PLA
.GV_HP=7
.GV_ATK=7
.GV_DEF=7
.GV_SPA=7
.GV_SPD=7
.GV_SPE=7
Define Level
.CurrentLevel=100
Make all mons shiny
.PID=$shiny
Make All Mons Non Shiny
.PID=$rand
Ball codes
.Ball=1 Master Ball
.Ball=2 Ultra Ball
.Ball=3 Great Ball
.Ball=4 Poke Ball
.Ball=5 Safari Ball
.Ball=6 Net Ball
.Ball=7 Dive Ball
.Ball=8 Nest Ball
.Ball=9 Repeat Ball
.Ball=10 Timer Ball
.Ball=11 Luxury Ball
.Ball=12 Premier Ball
.Ball=13 Dusk Ball
.Ball=14 Love Ball
.Ball=15 Quick Ball
.Ball=16 Cherish Ball
.Ball=17 Fast Ball
.Ball=18 Level Ball
.Ball=19 Lure Ball
.Ball=20 Heavy Ball
.Ball=21 Love Ball
.Ball=22 Friend Ball
.Ball=23 Moon Ball
.Ball=24 Sport Ball
.Ball=25 Dream Ball
.Ball=26 Beast Ball
PLA ONLY poke ball codes
.Ball=27 Strange Ball
.Ball=28 Poke Ball
.Ball=29 Great Ball
.Ball=30 Ultra Ball
.Ball=31 Feather Ball
.Ball=32 Wing Ball
.Ball=33 Jet Ball
.Ball=34 Heavy Ball
.Ball=35 Leaden Ball
.Ball=36 Gigaton Ball
.Ball=37 Origin Ball
Suggested Moves
.Moves=$suggestAll
.RelearnMoves=$suggestAll
PP Ups
.Move1_PPUps=3
.Move2_PPUps=3
.Move3_PPUps=3
.Move4_PPUps=3
Hyper Train
.HyperTrainFlags=$suggest
.HyperTrainFlags=0
— This will disable HyperTraining on a Pokemon that is Level 100.
Max Friendship
.CurrentFriendship=255
All Ribbons
.Ribbons=$suggestAll
Met Date
.MetDate=20230122 (Year/Month/Day)

What is a trade bot?
Trade bots allow you to use a command to trade any pokemon you would like across several games. It’s just like trading a person in game, except you get to pick every attribute and customize the pokemon yourself that you want traded.
Is it free?
Yes, trading with our trade bots are free. Some people paywall them.
Where can I find the trade bots?
Go to our discord server. https://discord.gg/mewtwoscloning and look for the trade bots for the specific game you are playing.
How do I trade with the bots?
To start trading, you first need to familiarize yourself with Pokemon Showdown. Showdown is used by the bots to configure your trade.
Go to play.pokemonshowdown.com and go to the Team Builder. Click on to begin.
Click on the format you want. Choose the game you are playing [Gen 9 for Sc/Vi] and anything goes.
Then click Add Pokemon.
Choose the Pokemon you want to trade and click on it from the list.
Configure everything to your liking. Once done, click on the Import/Export link.
Copy the text in the textbox.
Now let’s go to the Discord server and start our trade.
Find the bot you want to use and type $trade and then paste your copied text.
Press enter to submit your text into the chat. The bot will then DM you a trade code.
This is the process:
Once you get your trade code, go to your switch and go to Link Trade. Make sure you’re online!
The Bot will then send you another DM when your trade is ready.
Wait until it says “I’m Waiting for you!” before you press search!
Your trade will now start!
Easy, right?!
Alternatively you can also copy a pokemon from my Pokepaste instead of using Showdown and edit your own attributes here.