runAsync method
Implementation
@override
Future<void> runAsync(String label, List<String> args) async {
if (args.isEmpty || (!banned && args.length != 1)) {
throw const CommandUsageException();
}
final channel = await server.userManager.getUserIdByReference(args.first);
final minutes = args.length > 1 ? int.tryParse(args[1]) : null;
final reasonStart = minutes == null ? 1 : 2;
final reason = args.length > reasonStart
? args.skip(reasonStart).join(' ')
: null;
final until = minutes == null
? null
: DateTime.now().add(Duration(minutes: minutes));
final changed = await server.userManager.changeBan(
args.first,
banned: banned,
until: until,
reason: reason,
);
if (!changed) {
server.log(
"User not found or has no fingerprint: ${args.first}",
level: LogLevel.error,
);
return;
}
if (banned && channel != null) {
server.kick(
channel,
KickMessage(reason: KickReason.ban, message: reason),
);
}
await server.broadcastAllServerStates();
server.log(
(banned ? "Banned ${args.first}." : "Unbanned ${args.first}."),
level: LogLevel.info,
);
}