buildServerState method

ServerState buildServerState(
  1. Channel viewer,
  2. WorldBloc world, {
  3. Iterable<SetonixUser> bannedUsers = const [],
})

Implementation

ServerState buildServerState(
  Channel viewer,
  WorldBloc world, {
  Iterable<SetonixUser> bannedUsers = const [],
}) {
  final viewerRoles = userManager.getUser(viewer)?.roles ?? const <String>{};
  final permissions = permissionsForRoles(
    viewerRoles,
    configManager.serverRoles,
  );
  return ServerState(
    players: userManager
        .getUsers()
        .where((entry) => getUserWorld(entry.key) == world)
        .map(
          (entry) => PlayerInfo(
            id: entry.key,
            name: entry.value.name,
            serverRoles: entry.value.roles,
            gameRoles: world.state.getGameRoles(entry.key),
            registered: entry.value.fingerprint != null,
            manageable: canManageServerRoles(
              viewerRoles,
              entry.value.roles,
              configManager.serverRoles,
            ),
          ),
        )
        .toList(growable: false),
    bannedUsers: permissions.contains(ServerPermission.banPlayers)
        ? bannedUsers
              .where((user) => user.fingerprint != null && user.isBanned)
              .map(
                (user) => BannedUserInfo(
                  id: user.fingerprint!,
                  name: user.name,
                  expiresAt: user.bannedUntil,
                  reason: user.banReason,
                ),
              )
              .toList(growable: false)
        : const [],
    serverRoles: configManager.serverRoles,
    permissions: permissions,
    assignableServerRoles: configManager.serverRoles.keys
        .where(
          (role) => canAssignServerRole(
            viewerRoles,
            role,
            configManager.serverRoles,
          ),
        )
        .toSet(),
  );
}