Files
PiliPlus/lib/models/user/danmaku_rule.dart
bggRGjQaUbCoE 4f3f01d80a opt dm filter
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
2025-06-11 18:25:16 +08:00

40 lines
1.1 KiB
Dart

import 'package:PiliPlus/grpc/bilibili/community/service/dm/v1.pb.dart';
import 'package:PiliPlus/models/user/danmaku_block.dart';
class RuleFilter {
static final _regExp = RegExp(r'^/(.*)/$');
List<String> dmFilterString = [];
List<RegExp> dmRegExp = [];
Set<String> dmUid = {};
int count = 0;
RuleFilter(this.dmFilterString, this.dmRegExp, this.dmUid, [int? count]) {
this.count =
count ?? dmFilterString.length + dmRegExp.length + dmUid.length;
}
RuleFilter.fromRuleTypeEntires(List<List<SimpleRule>> rules) {
dmFilterString = rules[0].map((e) => e.filter).toList();
dmRegExp = rules[1]
.map((e) => RegExp(
_regExp.matchAsPrefix(e.filter)?.group(1) ?? e.filter,
caseSensitive: false))
.toList();
dmUid = rules[2].map((e) => e.filter).toSet();
count = dmFilterString.length + dmRegExp.length + dmUid.length;
}
RuleFilter.empty();
bool remove(DanmakuElem elem) {
return dmUid.contains(elem.midHash) ||
dmFilterString.any((i) => elem.content.contains(i)) ||
dmRegExp.any((i) => i.hasMatch(elem.content));
}
}