新自动拉黑机制,阈值可配置
This commit is contained in:
@@ -428,7 +428,7 @@ export class ConfigUI extends PureComponent {
|
|||||||
<p>
|
<p>
|
||||||
新功能建议或问题反馈请在
|
新功能建议或问题反馈请在
|
||||||
<a
|
<a
|
||||||
href="https://git.thu.monster/newthuhole/hole_thu_backend/issues"
|
href="https://git.thu.monster/newthuhole/hole-backend-rust/issues"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
>
|
>
|
||||||
Gitea
|
Gitea
|
||||||
|
|||||||
@@ -566,7 +566,7 @@ class FlowSidebar extends PureComponent {
|
|||||||
API.block(type, id, this.props.token)
|
API.block(type, id, this.props.token)
|
||||||
.then((json) => {
|
.then((json) => {
|
||||||
let data = json.data;
|
let data = json.data;
|
||||||
alert(`操作成功,其成为危险用户进度 ${data.curr}/${data.threshold}`);
|
alert(`操作成功,当前拉黑数 ${data.curr}`);
|
||||||
!!on_complete && on_complete();
|
!!on_complete && on_complete();
|
||||||
})
|
})
|
||||||
.catch((e) => {
|
.catch((e) => {
|
||||||
@@ -1355,6 +1355,7 @@ class SubFlow extends PureComponent {
|
|||||||
localStorage['_LATEST_POST_ID'] = '' + max_id;
|
localStorage['_LATEST_POST_ID'] = '' + max_id;
|
||||||
}
|
}
|
||||||
window.TITLE = json.custom_title;
|
window.TITLE = json.custom_title;
|
||||||
|
window.AUTO_BLCOK = json.auto_block_rank;
|
||||||
json.data.forEach((x) => {
|
json.data.forEach((x) => {
|
||||||
if (x.comments) {
|
if (x.comments) {
|
||||||
let comment_json = {
|
let comment_json = {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import { ColorPicker } from './color_picker';
|
|||||||
import { ConfigUI } from './Config';
|
import { ConfigUI } from './Config';
|
||||||
import copy from 'copy-to-clipboard';
|
import copy from 'copy-to-clipboard';
|
||||||
import { cache } from './cache';
|
import { cache } from './cache';
|
||||||
import { API, get_json } from './flows_api';
|
import { get_json } from './flows_api';
|
||||||
import { save_attentions } from './Attention';
|
import { save_attentions } from './Attention';
|
||||||
|
|
||||||
import './UserAction.css';
|
import './UserAction.css';
|
||||||
@@ -42,7 +42,7 @@ export function InfoSidebar(props) {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<span className="icon icon-settings" />
|
<span className="icon icon-settings" />
|
||||||
<label>设置</label>
|
<label>本地设置</label>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a href="/policy.html" target="_blank">
|
<a href="/policy.html" target="_blank">
|
||||||
@@ -150,6 +150,7 @@ export class LoginForm extends Component {
|
|||||||
super(props);
|
super(props);
|
||||||
this.state = {
|
this.state = {
|
||||||
custom_title: window.TITLE || '',
|
custom_title: window.TITLE || '',
|
||||||
|
auto_block_rank: window.AUTO_BLCOK || 2,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,16 +159,43 @@ export class LoginForm extends Component {
|
|||||||
alert('无变化');
|
alert('无变化');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
API.set_title(title, token)
|
let data = new FormData();
|
||||||
.then((json) => {
|
data.append('title', title);
|
||||||
if (json.code === 0) {
|
fetch(API_BASE + '/title', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: { 'User-Token': token },
|
||||||
|
body: data,
|
||||||
|
})
|
||||||
|
.then(get_json)
|
||||||
|
.then((j) => {
|
||||||
|
if (j.code !== 0) {
|
||||||
|
throw new Error(j.msg);
|
||||||
|
}
|
||||||
window.TITLE = title;
|
window.TITLE = title;
|
||||||
alert('专属头衔设置成功');
|
alert('专属头衔设置成功');
|
||||||
}
|
|
||||||
})
|
})
|
||||||
.catch((err) => alert('设置头衔出错了:\n' + err));
|
.catch((err) => alert('设置头衔出错了:\n' + err));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
update_auto_block(rank, token) {
|
||||||
|
let data = new FormData();
|
||||||
|
data.append('rank', rank);
|
||||||
|
fetch(API_BASE + '/auto_block', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: { 'User-Token': token },
|
||||||
|
body: data,
|
||||||
|
})
|
||||||
|
.then(get_json)
|
||||||
|
.then((j) => {
|
||||||
|
if (j.code !== 0) {
|
||||||
|
throw new Error(j.msg);
|
||||||
|
}
|
||||||
|
window.AUTO_BLCOK = rank;
|
||||||
|
alert('设置自动拉黑阈值成功');
|
||||||
|
})
|
||||||
|
.catch((err) => alert('设置自动拉黑出错了:\n' + err));
|
||||||
|
}
|
||||||
|
|
||||||
copy_token(token) {
|
copy_token(token) {
|
||||||
if (copy(token)) alert('复制成功!\n请一定不要泄露哦');
|
if (copy(token)) alert('复制成功!\n请一定不要泄露哦');
|
||||||
}
|
}
|
||||||
@@ -232,12 +260,48 @@ export class LoginForm extends Component {
|
|||||||
onClick={(e) => {
|
onClick={(e) => {
|
||||||
this.update_title(this.state.custom_title, token.value);
|
this.update_title(this.state.custom_title, token.value);
|
||||||
}}
|
}}
|
||||||
|
disabled={!this.state.custom_title}
|
||||||
>
|
>
|
||||||
提交
|
提交
|
||||||
</button>
|
</button>
|
||||||
<br />
|
<br />
|
||||||
设置专属头衔后,可在发言时选择使用。重置后需重新设置。临时用户如需保持头衔请使用相同后缀。
|
设置专属头衔后,可在发言时选择使用。重置后需重新设置。临时用户如需保持头衔请使用相同后缀。
|
||||||
</p>
|
</p>
|
||||||
|
<p>
|
||||||
|
自动拉黑阈值:
|
||||||
|
<span style={{ display: 'inline-block', width: '3rem' }}>
|
||||||
|
<b>{this.state.auto_block_rank * 5}</b>
|
||||||
|
</span>
|
||||||
|
<input
|
||||||
|
value={this.state.auto_block_rank}
|
||||||
|
type="range"
|
||||||
|
min="1"
|
||||||
|
max="10"
|
||||||
|
list="autoBlock"
|
||||||
|
onChange={(e) => {
|
||||||
|
this.setState({ auto_block_rank: e.target.value });
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<button
|
||||||
|
className="update-title-btn"
|
||||||
|
type="button"
|
||||||
|
onClick={(e) => {
|
||||||
|
this.update_auto_block(
|
||||||
|
this.state.auto_block_rank,
|
||||||
|
token.value,
|
||||||
|
);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
提交
|
||||||
|
</button>
|
||||||
|
<datalist id="autoBlock">
|
||||||
|
<option>1</option>
|
||||||
|
<option>2</option>
|
||||||
|
<option>3</option>
|
||||||
|
</datalist>
|
||||||
|
<br />
|
||||||
|
自动不展示被拉黑次数较多用户发布的内容,包括自己。对每个洞及其评论的可见性会有1小时缓存,频繁修改无效。
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
<LoginPopup token_callback={token.set_value}>
|
<LoginPopup token_callback={token.set_value}>
|
||||||
|
|||||||
Reference in New Issue
Block a user