fix checks for memberships
This commit is contained in:
parent
f38715c8ef
commit
185ee37f04
3 changed files with 35 additions and 14 deletions
|
|
@ -21,22 +21,40 @@ class PowerLevelController extends Notifier<bool> {
|
||||||
final users = (event.content["users"] as Map<String, dynamic>? ?? {});
|
final users = (event.content["users"] as Map<String, dynamic>? ?? {});
|
||||||
final events = (event.content["events"] as Map<String, dynamic>? ?? {});
|
final events = (event.content["events"] as Map<String, dynamic>? ?? {});
|
||||||
|
|
||||||
final userLevel = users.containsKey(user)
|
int powerLevelOf(String userId) => users.containsKey(userId)
|
||||||
? (users[user] as int)
|
? (users[userId] as int)
|
||||||
: (event.content["users_default"] as int? ?? 0);
|
: (event.content["users_default"] as int? ?? 0);
|
||||||
|
|
||||||
final requiredLevel = switch (config.action) {
|
final userLevel = powerLevelOf(user);
|
||||||
MembershipAction.ban ||
|
final targetLevel = config.targetUser != null
|
||||||
MembershipAction.unban => (event.content["ban"] as int? ?? 50),
|
? powerLevelOf(config.targetUser!)
|
||||||
MembershipAction.kick => (event.content["kick"] as int? ?? 50),
|
: null;
|
||||||
MembershipAction.invite => (event.content["invite"] as int? ?? 0),
|
|
||||||
null =>
|
if (config.action != null) {
|
||||||
events.containsKey(config.eventType)
|
return switch (config.action!) {
|
||||||
|
MembershipAction.invite =>
|
||||||
|
userLevel >= (event.content["invite"] as int? ?? 0),
|
||||||
|
|
||||||
|
MembershipAction.kick =>
|
||||||
|
targetLevel != null &&
|
||||||
|
userLevel >= (event.content["kick"] as int? ?? 50) &&
|
||||||
|
userLevel > targetLevel,
|
||||||
|
|
||||||
|
MembershipAction.ban =>
|
||||||
|
targetLevel != null &&
|
||||||
|
userLevel >= (event.content["ban"] as int? ?? 50) &&
|
||||||
|
userLevel > targetLevel,
|
||||||
|
|
||||||
|
MembershipAction.unban =>
|
||||||
|
userLevel >= (event.content["ban"] as int? ?? 50),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
final requiredLevel = events.containsKey(config.eventType)
|
||||||
? (events[config.eventType] as int)
|
? (events[config.eventType] as int)
|
||||||
: (config.isStateEvent
|
: (config.isStateEvent
|
||||||
? (event.content["state_default"] as int? ?? 50)
|
? (event.content["state_default"] as int? ?? 50)
|
||||||
: (event.content["events_default"] as int? ?? 0)),
|
: (event.content["events_default"] as int? ?? 0));
|
||||||
};
|
|
||||||
|
|
||||||
return userLevel >= requiredLevel;
|
return userLevel >= requiredLevel;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ abstract class PowerLevelConfig with _$PowerLevelConfig {
|
||||||
@Default(false) bool isStateEvent,
|
@Default(false) bool isStateEvent,
|
||||||
required String eventType,
|
required String eventType,
|
||||||
MembershipAction? action,
|
MembershipAction? action,
|
||||||
|
String? targetUser,
|
||||||
}) = _PowerLevelConfig;
|
}) = _PowerLevelConfig;
|
||||||
|
|
||||||
factory PowerLevelConfig.fromJson(Map<String, Object?> json) =>
|
factory PowerLevelConfig.fromJson(Map<String, Object?> json) =>
|
||||||
|
|
|
||||||
|
|
@ -160,6 +160,7 @@ class UserPopover extends ConsumerWidget {
|
||||||
eventType: "m.room.member",
|
eventType: "m.room.member",
|
||||||
action: MembershipAction.kick,
|
action: MembershipAction.kick,
|
||||||
isStateEvent: true,
|
isStateEvent: true,
|
||||||
|
targetUser: member.userId,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
) &&
|
) &&
|
||||||
|
|
@ -183,6 +184,7 @@ class UserPopover extends ConsumerWidget {
|
||||||
eventType: "m.room.member",
|
eventType: "m.room.member",
|
||||||
action: MembershipAction.ban,
|
action: MembershipAction.ban,
|
||||||
isStateEvent: true,
|
isStateEvent: true,
|
||||||
|
targetUser: member.userId,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
))
|
))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue