runAsync method

  1. @override
Future<void> runAsync(
  1. String label,
  2. List<String> args
)

Implementation

@override
Future<void> runAsync(String label, List<String> args) async {
  if (args.isEmpty || (!banned && args.length != 1)) {
    server.log('Wrong usage, use ${getUsage()}', level: LogLevel.error);
    return;
  }
  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' : 'Unbanned'} ${args.first}',
    level: LogLevel.info,
  );
}