6 files changed
+67
-43
No files matched your search
+12
-11
@@ -75,20 +75,21 @@ export interface StudioEntity {
|
||||
tid: number;
|
||||
cover: string;
|
||||
title: string;
|
||||
desc: string;
|
||||
description: string;
|
||||
dynamic: string;
|
||||
tags: string;
|
||||
dtime?: number;
|
||||
interactive: number;
|
||||
tags: string[];
|
||||
dtime: number;
|
||||
// interactive: number;
|
||||
mission_id?: number;
|
||||
dolby: number;
|
||||
lossless_music: number;
|
||||
no_reprint?: number;
|
||||
up_selection_reply: boolean;
|
||||
up_close_reply: boolean;
|
||||
up_close_danmu: boolean;
|
||||
open_elec?: number;
|
||||
credits?: Credit[];
|
||||
hires: number;
|
||||
no_reprint: number;
|
||||
up_selection_reply: number;
|
||||
up_close_reply: number;
|
||||
up_close_danmu: number;
|
||||
open_elec: number;
|
||||
credits: Credit[];
|
||||
uploader: string;
|
||||
}
|
||||
|
||||
export interface LiveStreamerEntity {
|
||||
|
||||
@@ -24,7 +24,7 @@ const TemplateFields: React.FC<FormFCChild> = ({ formState, formApi, values }) =
|
||||
const collapsed = (<>
|
||||
<CheckboxGroup field='sound' options={[
|
||||
{ label: '杜比音效', value: 'dolby' },
|
||||
{ label: 'Hi-Res无损音质', value: 'lossless_music' },
|
||||
{ label: 'Hi-Res无损音质', value: 'hires' },
|
||||
]} direction='horizontal' label='音效设置' />
|
||||
<CheckboxGroup field='interaction' options={[
|
||||
{ label: '关闭弹幕', value: 'up_close_danmu' },
|
||||
@@ -32,6 +32,19 @@ const TemplateFields: React.FC<FormFCChild> = ({ formState, formApi, values }) =
|
||||
{ label: '开启精选评论', value: 'up_selection_reply' },
|
||||
]} direction='horizontal' label='互动设置' />
|
||||
<Input field='dynamic' label='粉丝动态' style={{ width: 464 }} />
|
||||
<Form.Select
|
||||
field="uploader"
|
||||
label='上传插件'
|
||||
style={{ width: 250 }} showClear>
|
||||
<Form.Select.Option value="bili_web">bili_web</Form.Select.Option>
|
||||
<Form.Select.Option value="biliup-rs">biliup-rs</Form.Select.Option>
|
||||
<Form.Select.Option value="Noop">Noop</Form.Select.Option>
|
||||
</Form.Select>
|
||||
<Switch field='no_reprint' label='自制声明' />
|
||||
<Form.Switch
|
||||
field="open_elec"
|
||||
label="开启充电面板"
|
||||
/>
|
||||
<ArrayField field='credits'>
|
||||
{({ add, arrayFields }) => (
|
||||
<Form.Section text="简介@替换">
|
||||
@@ -121,7 +134,7 @@ const TemplateFields: React.FC<FormFCChild> = ({ formState, formApi, values }) =
|
||||
]}
|
||||
/>
|
||||
<TagInput
|
||||
field="tag"
|
||||
field="tags"
|
||||
label='标签'
|
||||
placeholder='输入标签,Enter 确定'
|
||||
onChange={v => console.log(v)}
|
||||
|
||||
@@ -48,20 +48,21 @@ export default function Add() {
|
||||
tid: values.tid[1],
|
||||
cover: values.cover ?? '',
|
||||
title: values.title ?? '',
|
||||
desc: values.desc ?? '',
|
||||
description: values.description ?? '',
|
||||
dynamic: values.dynamic ?? '',
|
||||
tags: values.tag ?? '',
|
||||
interactive: values.interactive ?? 0,
|
||||
dolby: values.dolby ?? 0,
|
||||
lossless_music: values.lossless_music ?? 0,
|
||||
up_selection_reply: values.up_selection_reply ?? false,
|
||||
up_close_reply: values.up_close_reply ?? false,
|
||||
up_close_danmu: values.up_close_danmu ?? false,
|
||||
open_elec: values.open_elec,
|
||||
no_reprint: values.no_reprint,
|
||||
tags: values.tags ?? [],
|
||||
// interactive: values.interactive ?? 0,
|
||||
dolby: values.sound.includes("dolby") ? 1 : 0,
|
||||
hires: values.sound.includes("hires") ? 1 : 0,
|
||||
up_selection_reply: values.interaction.includes("up_selection_reply") ? 1 : 0,
|
||||
up_close_reply: values.interaction.includes("up_close_reply") ? 1 : 0,
|
||||
up_close_danmu: values.interaction.includes("up_close_danmu") ? 1 : 0,
|
||||
open_elec: values.open_elec ? 1 : 0,
|
||||
no_reprint: values.no_reprint ? 1 : 0,
|
||||
mission_id: values.mission_id,
|
||||
dtime: values.dtime,
|
||||
dtime: values.isDtime ? values?.dtime : null,
|
||||
credits: values.credits,
|
||||
uploader: values.uploader,
|
||||
}
|
||||
|
||||
const result = await trigger(studioEntity);
|
||||
|
||||
@@ -38,10 +38,17 @@ const EditTemplate: React.FC = () => {
|
||||
if (!data || !typeTree) return null;
|
||||
let uploadStreamers = {
|
||||
...data,
|
||||
tag: data.tags?.length === 0 ? [] : data.tags?.split(','),
|
||||
tid: [typeTree.find((tt: BiliType) => {
|
||||
return tt.children.some(ct => ct.id === data?.tid);
|
||||
})?.value, data.tid]
|
||||
})?.value, data.tid],
|
||||
sound: (data.dolby === 1 ? ["dolby"] : [])
|
||||
.concat(data.hires === 1 ? ["hires"] : []),
|
||||
interaction: (data.up_close_danmu === 1 ? ["up_close_danmu"] : [])
|
||||
.concat(data.up_close_reply === 1 ? ["up_close_reply"] : [])
|
||||
.concat(data.up_selection_reply === 1 ? ["up_selection_reply"] : []),
|
||||
open_elec: data.open_elec === 1,
|
||||
no_reprint: data.no_reprint === 1,
|
||||
isDtime: data.dtime ? true : false,
|
||||
};
|
||||
return (<>
|
||||
<div style={{display: 'flex', flexDirection: 'row-reverse', paddingRight: 12}}>
|
||||
@@ -59,18 +66,19 @@ const EditTemplate: React.FC = () => {
|
||||
title: values?.title ?? '',
|
||||
description: values?.description ?? '',
|
||||
dynamic: values?.dynamic ?? '',
|
||||
tag: values?.tag ?? '',
|
||||
interactive: values?.interactive ?? 0,
|
||||
dolby: values?.dolby ?? 0,
|
||||
lossless_music: values?.lossless_music ?? 0,
|
||||
up_selection_reply: values?.up_selection_reply ?? false,
|
||||
up_close_reply: values?.up_close_reply ?? false,
|
||||
up_close_danmu: values?.up_close_danmu ?? false,
|
||||
open_elec: values?.open_elec,
|
||||
no_reprint: values?.no_reprint,
|
||||
tags: values?.tags ?? [],
|
||||
// interactive: values?.interactive ?? 0,
|
||||
dolby: values?.sound.includes("dolby") ? 1 : 0,
|
||||
hires: values?.sound.includes("hires") ? 1 : 0,
|
||||
up_selection_reply: values?.interaction.includes("up_selection_reply") ? 1 : 0,
|
||||
up_close_reply: values?.interaction.includes("up_close_reply") ? 1 : 0,
|
||||
up_close_danmu: values?.interaction.includes("up_close_danmu") ? 1 : 0,
|
||||
open_elec: values?.open_elec ? 1 : 0,
|
||||
no_reprint: values?.no_reprint ? 1 : 0,
|
||||
mission_id: values?.mission_id,
|
||||
dtime: values?.dtime,
|
||||
dtime: values?.isDtime ? values?.dtime : null,
|
||||
credits: values?.credits,
|
||||
uploader: values?.uploader,
|
||||
}
|
||||
const result = await trigger(studioEntity);
|
||||
await mutate(result);
|
||||
|
||||
@@ -30,12 +30,10 @@ class DB:
|
||||
UploadStreamers.create_table_()
|
||||
Configuration.create_table_()
|
||||
with db.connection_context():
|
||||
columns_name_list = [column_meta.name for column_meta in db.get_columns('streamerinfo')]
|
||||
if 'id' not in columns_name_list:
|
||||
try:
|
||||
cls.migrate_streamer_info()
|
||||
except OperationalError as e:
|
||||
logger.error(f"迁移失败: {e},请手动删除旧数据库后重试")
|
||||
columns_name_list = [column_meta.name for column_meta in db.get_columns('uploadstreamers')]
|
||||
if 'up_selection_reply' not in columns_name_list:
|
||||
logger.error(f"检测到旧数据库,请手动删除data文件夹后重试")
|
||||
return False
|
||||
return run
|
||||
|
||||
@classmethod
|
||||
|
||||
@@ -118,8 +118,11 @@ class UploadStreamers(BaseModel):
|
||||
no_reprint = IntegerField(null=True) # 自制声明, 1为未经允许禁止转载
|
||||
uploader = CharField(null=True) # 覆盖全局默认上传插件,Noop为不上传,但会执行后处理
|
||||
user_cookie = CharField(null=True) # 使用指定的账号上传
|
||||
tags = CharField() # 标签
|
||||
tags = JSONField() # 标签
|
||||
credits = JSONField(null=True) # 简介@模板
|
||||
up_selection_reply = IntegerField(null=True) # 精选评论
|
||||
up_close_reply = IntegerField(null=True) # 关闭评论
|
||||
up_close_danmu = IntegerField(null=True) # 精选评论
|
||||
|
||||
class LiveStreamers(BaseModel):
|
||||
"""每个直播间的配置"""
|
||||
|
||||
Reference in new issue
Block a user