Skip to content

The basics of user accounts management with SLDB

Yaribz edited this page Jun 18, 2022 · 1 revision

Principle

User accounts management in SLDB relies on two main data structures: "accounts" and "users".

  • Accounts are mapped one-to-one to the lobby accounts implemented by the lobby server. Accounts are identified uniquely by the accountId number, as specified by the lobby protocol. The accounts structures are the ones which contain the actual lobby data:

    • base data: rank, admin flag, bot flag, last seen timestamp...
    • historized data: name, country, hardware ID, system ID...
  • Users represent human players. One user can be mapped to several accounts: the main account of the player + his secondary "smurf" accounts. Users are identified uniqueley by the userId number, which is SLDB-specific and is equal to the accountId number of what is considered as the main account of the player by SLDB.

So, to sum up: one account is always mapped to exactly one user, but one user can be mapped to several accounts.

When a new account is seen, SLDB creates both an account entity and a user entity. The new account is associated to the new user and vice versa (initially there is always a one-to-one association between accounts and users). This system allows all actions performed in SLDB to be reversible: lobby data are attached to the accounts entities, they are never really impacted by the join/split actions, which only operate on the user/account association level (in SLDB, the "attach" and "detach" words would be more accurate than "join" and "split"). Other data such as the detected dynamic IP ranges of the user, the user preferences and rankings, are associated to user entities. When join/split actions occur, these data are automatically regenerated transparently.

Smurf detection

SLDB is able to detect most smurf accounts automatically, but it also allows manual accounts checks/actions in order to provide versatile smurf mitigation.

The automatic smurf detection is based on various indicators, which are cross-checked in order to decide if actions (split/join) must be automatically performed:

  • system ID
  • hardware ID
  • IP address (with special handling of dynamic IP addresses through automatic discovery of dynamic IP ranges)
  • account age/in-game time
  • simultaneous play occurrences (with additional checks to prevent easy abuse of this indicator)

Most of the time the actions performed by SLDB are correct, even if sometimes they seem dubious (I have myself been surprised by some findings on some accounts, when reviewing automatics actions which seemed very dubious to me).

However, of course it is impossible to have a 100% accurate system, so all automatic SLDB actions can be reviewed and cancelled manually, and manual join/split actions can also be performed.

Main account management commands

TO BE COMPLETED

!searchUser <nameString>|@<ipAddr>|&<hardwareId> - searches users using name, IP address, or hardware ID filters [alias: !su]

!setName <oldName>|#<userId> <newName> - renames the user named <userName> or whose user ID is <userId> to <newName> [alias: !sn]

!checkProbSmurfs [<maxAge>] - list probable smurfs (default <maxAge> is 6m) [alias: !cps]

!whois [-f] <name>|#<accountId> - show information for the account identified uniquely by name <name> or ID <accountId>, "-f" = full [alias: !w]

!uwhois [-f] <name>|#<accountId> - show information for the user account identified uniquely by name <name> or ID <accountId>, "-f" = full [alias: !uw]

!checkIps <name>|#<accountId> - list known in-game IPs for the account identified uniquely by his name <name> or by his ID <accountId> [alias: !ips]

!checkUserIps <name>|#<accountId> - list known in-game IPs for the user identified uniquely by his name <name> or by his ID <accountId> [alias: !uips]

!adminEvents [<filterName1>=<filterValue1> [<filterName2>=<filterValue2> [...]]] - lists recent admin events with optional filters (default maxAge is "1w" = 1 week) [alias: !ae]

!notSmurf <accountName1>|#<accountId1> <accountName2>|#<accountId2> - removes a probable smurf entry between two accounts and replaces it by a "not-smurf" entry [alias: !ns]

!joinAcc [-f] [-s] [-t] <userName1>|#<userId1> <userName2>|#<userId2> - joins the two users (order has no importance), "-f" = force, "-s" = sticky, "-t" = test [alias: !ja]

!splitAcc [-f] [-s] [-t] <userName>|#<userId> <accountName>|#<accountId> - detaches the account from the user, "-f" = force, "-s" = sticky, "-t" = test [alias: !sa]

!topSkill <modShortName> [<gameType> [-][<nbPlayers>]] - shows a top <nbPlayers> leaderboard for a given MOD and gameType, using estimated skill [alias: !ts]