Commands, Permission Groups, Player Statistics, Reports, Roles, Scenario, Server UPS and Module Utilities get a readme covering their config, permissions, commands, web pages and Lua and Node API. The existing readmes are brought up to date: Auto Restart now that clusterio marks a restart after a plugin install, Discord Auth gets the code timeout, command aliases and its Lua API, and the GUI guide says what the plugin is and has its toolbar examples and an iterator name fixed. The main readme gets a Plugins section listing each plugin by name and package with a one line description. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2.8 KiB
ExpGaming - Discord Auth
Lets players log in to the web interface with Discord, and links their Factorio accounts to a Discord account. It only uses the OAuth2 identify scope, so no bot is needed.
Setup
- Create an application in the Discord developer portal.
- Under OAuth2, copy the Client ID and reset the Client Secret to get one.
- Under OAuth2 → Redirects, add
<controller.public_url>api/exp_discord_auth/callback. For a controller withcontroller.public_urlset tohttps://example.com/cluster/that ishttps://example.com/cluster/api/exp_discord_auth/callback. It must match exactly, including the trailing path and http or https. - Set the config on the controller:
npx clusterioctl controller config set controller.public_url https://example.com/cluster/
npx clusterioctl controller config set exp_discord_auth.client_id <client id>
npx clusterioctl controller config set exp_discord_auth.client_secret <client secret>
controller.public_url has to be set, because the redirect URL is built from it and Discord rejects any URL that isn't registered.
Config
All fields are on the controller.
| Field | Default | Description |
|---|---|---|
exp_discord_auth.client_id |
Application ID of the Discord application. | |
exp_discord_auth.client_secret |
OAuth2 client secret of the Discord application. Only readable on the controller. | |
exp_discord_auth.max_accounts |
3 | How many Factorio accounts one Discord account can link. |
Linking
There are two ways to link a Factorio account:
- On the user page, a logged in user clicks Link Discord and approves it on Discord.
- On the login page, a player logs in with Discord and gets a code, then types
/link-discord CODEon any server within 10 minutes. This is how a player who can't log in to the web interface yet links their account.
Linking a Factorio account that is already linked to another Discord account moves it. /link-discord without a code shows the current link, and /unlink-discord removes it. /link and /unlink are aliases. The user page has an Unlink button too.
Users can always see and remove their own link. The exp_discord_auth.link.get and exp_discord_auth.link.delete permissions allow it for other users.
Once linked, the Discord tab on the login page has a "Log in as" button for each linked account. Banned users can't log in this way.
Links are stored in database/exp_discord_auth/accounts.json on the controller.
Lua
Each call goes to the controller, and the player gets the answer printed once it arrives.
local ExpDiscordAuth = require("modules/exp_discord_auth")
ExpDiscordAuth.link(player, code)
ExpDiscordAuth.unlink(player)
ExpDiscordAuth.get_linked(player) -- Prints the Discord account the player is linked to