SlickShift
Slickshift is a Discord Bot to automatically redeem SHiFT codes for Borderlands 4!
It uses simple HTTP requests to authenticate with SHiFT Rewards, and then store user cookies in order to redeem SHiFT codes on their behalf.
User cookies are encrypted in a sqlite database, and SHiFT codes can be provided at whim using the API server on port 8080, or via the Discord Slash Command /add.
SlickShift is not affiliated with, endorsed by, or approved by Gearbox Software, 2K Games, or the SHiFT service in any way. To see more details, see LIABILITY.md
Installation
If you're just looking to use the Bot functionality, the easiest method is to join the official SlickShift discord server, and invoke the bot commands in there.
But if you're looking to run/install the bot locally:
Install Go 1.25+, then run go build -o bot-exec cmd/server.go. Then run the output bot-exec
executable with the Environment Variables specified below
TODO: Add Github workflow to generate executables automatically
Docker
SlickShift is available as a Docker image in Dockerhub under denverquane/slickshift.
See Environment Variables for required runtime information and config.
Environment Variables
| Variable |
Required |
Default |
Description |
ENCRYPTION_KEY_B64 |
✅ Yes |
None |
Base64-encoded 32-byte secret key used to encrypt user data. The program will exit if this is not set or invalid. Generate this with openssl rand -base64 32 |
DISCORD_BOT_TOKEN |
✅ Yes |
None |
Discord bot token used to authenticate with the Discord API. The program will exit if this is not set. |
DISCORD_GUILD_ID |
❌ No |
None |
The ID of the Discord guild (server) where the bot will operate. If not set, slash commands will be registered globally (not recommended for development). |
REDEEM_INTERVAL |
❌ No |
30 (minutes) |
Interval (in minutes) between redemption attempts. Must be ≥ 1. (Adding codes or registering new users will always trigger the redemption loop, so this can be a high value) |
DATABASE_FILE_PATH |
❌ No |
./sqlite.db |
Path to the SQLite database file. If not set, it defaults to a local file. |
API_SERVER_PORT |
❌ No |
8080 |
Port that the API server will be accessible on. |