feat: create dyn antifraud

Closes #278

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-02-18 21:46:01 +08:00
parent 3191ae27a5
commit 6bc33795a3
7 changed files with 99 additions and 15 deletions

View File

@@ -1,4 +1,5 @@
import 'package:PiliPlus/http/loading_state.dart';
import 'package:dio/dio.dart';
import '../models/dynamics/result.dart';
import '../models/dynamics/up.dart';
@@ -84,17 +85,23 @@ class DynamicsHttp {
//
static Future dynamicDetail({
String? id,
dynamic id,
dynamic rid,
dynamic type,
bool? clearCookie,
}) async {
var res = await Request().get(Api.dynamicDetail, queryParameters: {
'timezone_offset': -480,
if (id != null) 'id': id,
if (rid != null) 'rid': rid,
if (type != null) 'type': type,
'features': 'itemOpusStyle',
});
var res = await Request().get(
Api.dynamicDetail,
queryParameters: {
'timezone_offset': -480,
if (id != null) 'id': id,
if (rid != null) 'rid': rid,
if (type != null) 'type': type,
'features': 'itemOpusStyle',
},
options:
clearCookie == true ? Options(extra: {'clearCookie': true}) : null,
);
if (res.data['code'] == 0) {
try {
return {

View File

@@ -212,7 +212,10 @@ class MsgHttp {
},
);
if (res.data['code'] == 0) {
return {'status': true};
return {
'status': true,
'data': res.data['data'],
};
} else {
return {
'status': false,

View File

@@ -1,10 +1,15 @@
import 'package:PiliPlus/http/dynamics.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/http/msg.dart';
import 'package:PiliPlus/models/dynamics/result.dart';
import 'package:PiliPlus/pages/common/common_publish_page.dart';
import 'package:PiliPlus/pages/dynamics/tab/controller.dart';
import 'package:PiliPlus/pages/dynamics/view.dart';
import 'package:PiliPlus/pages/emote/controller.dart';
import 'package:PiliPlus/pages/emote/view.dart';
import 'package:PiliPlus/pages/video/detail/reply_new/toolbar_icon_button.dart';
import 'package:PiliPlus/utils/storage.dart';
import 'package:PiliPlus/utils/utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';
@@ -483,12 +488,36 @@ class _CreateDynPanelState extends CommonPublishPageState<CreateDynPanel> {
replyOption: _replyOption,
privatePub: _isPrivate ? 1 : null,
);
SmartDialog.dismiss();
if (result['status']) {
Get.back();
SmartDialog.dismiss();
SmartDialog.showToast('发布成功');
try {
// insert
dynamic id = result['data']['dyn_id'];
if (id != null) {
await Future.delayed(const Duration(milliseconds: 200));
dynamic res = await DynamicsHttp.dynamicDetail(id: id);
if (res['status']) {
final ctr = Get.find<DynamicsTabController>(tag: 'all');
List list = ctr.loadingState.value is Success
? (ctr.loadingState.value as Success).response
: <DynamicItemModel>[];
list.insert(0, res['data']);
ctr.loadingState.value = LoadingState.success(list);
}
}
} catch (e) {
debugPrint('create dyn $e');
}
if (GStorage.enableCreateDynAntifraud) {
try {
Utils.checkCreatedDyn(result['data']['dyn_id'], editController.text);
} catch (e) {
SmartDialog.showToast(e.toString());
}
}
} else {
SmartDialog.dismiss();
SmartDialog.showToast(result['msg']);
debugPrint('failed to publish: ${result['msg']}');
}

View File

@@ -7,6 +7,7 @@ import 'package:PiliPlus/pages/emote/view.dart';
import 'package:PiliPlus/pages/video/detail/reply_new/toolbar_icon_button.dart';
import 'package:PiliPlus/utils/extension.dart';
import 'package:PiliPlus/utils/storage.dart';
import 'package:PiliPlus/utils/utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';
@@ -385,6 +386,13 @@ class _RepostPanelState extends CommonPublishPageState<RepostPanel> {
Get.back();
SmartDialog.showToast('转发成功');
widget.callback?.call();
if (GStorage.enableCreateDynAntifraud) {
try {
Utils.checkCreatedDyn(result['data']['dyn_id'], editController.text);
} catch (e) {
SmartDialog.showToast(e.toString());
}
}
} else {
SmartDialog.showToast(result['msg']);
}

View File

@@ -1957,11 +1957,10 @@ List<SettingsModel> get extraSettings => [
leading: Stack(
alignment: Alignment.center,
children: [
const Icon(Icons.shield),
const Icon(Icons.shield_outlined),
Icon(
Icons.reply,
size: 16,
color: Theme.of(Get.context!).colorScheme.surface,
size: 14,
),
],
),
@@ -1972,10 +1971,30 @@ List<SettingsModel> get extraSettings => [
settingsType: SettingsType.sw1tch,
title: '使用「哔哩发评反诈」检查评论',
subtitle: '仅对Android生效',
leading: Icon(FontAwesomeIcons.b),
leading: Icon(
FontAwesomeIcons.b,
size: 22,
),
setKey: SettingBoxKey.biliSendCommAntifraud,
defaultVal: false,
),
SettingsModel(
settingsType: SettingsType.sw1tch,
title: '发布/转发动态反诈',
subtitle: '发布/转发动态后检查动态是否可见',
leading: Stack(
alignment: Alignment.center,
children: [
const Icon(Icons.shield_outlined),
Icon(
Icons.motion_photos_on,
size: 12,
),
],
),
setKey: SettingBoxKey.enableCreateDynAntifraud,
defaultVal: false,
),
SettingsModel(
settingsType: SettingsType.sw1tch,
title: '屏蔽带货动态',

View File

@@ -369,6 +369,9 @@ class GStorage {
static bool get biliSendCommAntifraud => GStorage.setting
.get(SettingBoxKey.biliSendCommAntifraud, defaultValue: false);
static bool get enableCreateDynAntifraud => GStorage.setting
.get(SettingBoxKey.enableCreateDynAntifraud, defaultValue: false);
static bool get coinWithLike =>
GStorage.setting.get(SettingBoxKey.coinWithLike, defaultValue: false);
@@ -613,6 +616,7 @@ class SettingBoxKey {
showDmChart = 'showDmChart',
enableCommAntifraud = 'enableCommAntifraud',
biliSendCommAntifraud = 'biliSendCommAntifraud',
enableCreateDynAntifraud = 'enableCreateDynAntifraud',
coinWithLike = 'coinWithLike',
isPureBlackTheme = 'isPureBlackTheme',
antiGoodsDyn = 'antiGoodsDyn',

View File

@@ -46,6 +46,20 @@ class Utils {
static const channel = MethodChannel("PiliPlus");
static void checkCreatedDyn(id, dynText) async {
if (id != null) {
dynamic res = await DynamicsHttp.dynamicDetail(id: id, clearCookie: true);
showDialog(
context: Get.context!,
builder: (context) => AlertDialog(
title: Text('动态检查结果'),
content: SelectableText(
'${res['status'] ? '无账号状态下找到了你的动态,动态正常!' : '你的动态被shadow ban仅自己可见'} \n\n动态内容: $dynText'),
),
);
}
}
// 动态点赞
static Future onLikeDynamic(item, VoidCallback callback) async {
feedBack();