096c4d0a2d
Серверная часть (Go): - WebSocket сервер с бинарным протоколом - XChaCha20-Poly1305 шифрование - zstd сжатие с дедупликацией (64KB чанки) - SQLite хранилище (WAL режим) - Управление гильдиями, каналами, ролями - Федерация между серверами (ed25519) - REST API + WebSocket endpoints Клиентская часть (Flutter): - Material Design 3 тёмная тема (Discord-like) - WebSocket соединение с сервером - Экраны: сплэш, логин, домашний, гильдии, чат - Модели: пользователи, гильдии, каналы, сообщения, роли - Сервисы: соединение, API, криптография, тема - Виджеты: иконки гильдий, сообщения, ввод чата - Web сборка (PWA) Документация: - AGENTS.md — контекст для ИИ ассистентов - docs/protocol.md — спецификация протокола
36 lines
904 B
Dart
36 lines
904 B
Dart
class Role {
|
|
final String id;
|
|
final String guildId;
|
|
final String name;
|
|
final int color;
|
|
final int position;
|
|
final List<String> permissions;
|
|
final bool isDefault;
|
|
|
|
Role({
|
|
required this.id,
|
|
required this.guildId,
|
|
required this.name,
|
|
this.color = 0,
|
|
this.position = 0,
|
|
List<String>? permissions,
|
|
this.isDefault = false,
|
|
}) : permissions = permissions ?? [];
|
|
|
|
factory Role.fromJson(Map<String, dynamic> json) {
|
|
return Role(
|
|
id: json['id'] as String,
|
|
guildId: json['guild_id'] as String,
|
|
name: json['name'] as String,
|
|
color: json['color'] as int? ?? 0,
|
|
position: json['position'] as int? ?? 0,
|
|
permissions: (json['permissions'] as List<dynamic>?)
|
|
?.cast<String>() ??
|
|
[],
|
|
isDefault: json['is_default'] as bool? ?? false,
|
|
);
|
|
}
|
|
|
|
int get colorValue => color == 0 ? 0xFFB5BAC1 : color;
|
|
}
|