buildServerState method
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(),
);
}