求片增加开关和冷却

This commit is contained in:
mtvpls
2026-01-12 21:06:45 +08:00
parent 3807f4cf60
commit 2c805e2522
8 changed files with 194 additions and 42 deletions

View File

@@ -40,6 +40,9 @@ export interface AdminConfig {
TurnstileSiteKey?: string; // Cloudflare Turnstile Site Key
TurnstileSecretKey?: string; // Cloudflare Turnstile Secret Key
DefaultUserTags?: string[]; // 新注册用户的默认用户组
// 求片功能配置
EnableMovieRequest?: boolean; // 启用求片功能
MovieRequestCooldown?: number; // 求片冷却时间默认3600
// OIDC配置
EnableOIDCLogin?: boolean; // 启用OIDC登录
EnableOIDCRegistration?: boolean; // 启用OIDC注册

View File

@@ -659,6 +659,7 @@ export abstract class BaseRedisStorage implements IStorage {
playrecord_migrated?: boolean;
favorite_migrated?: boolean;
skip_migrated?: boolean;
last_movie_request_time?: number;
} | null> {
const userInfo = await this.withRetry(() =>
this.client.hGetAll(this.userInfoKey(userName))
@@ -678,6 +679,7 @@ export abstract class BaseRedisStorage implements IStorage {
playrecord_migrated: userInfo.playrecord_migrated === 'true',
favorite_migrated: userInfo.favorite_migrated === 'true',
skip_migrated: userInfo.skip_migrated === 'true',
last_movie_request_time: userInfo.last_movie_request_time ? parseInt(userInfo.last_movie_request_time, 10) : undefined,
};
}

View File

@@ -65,7 +65,12 @@ export class UpstashRedisStorage implements IStorage {
this._client = getUpstashRedisClient();
// 创建兼容Redis API的client包装器支持camelCase和lowercase
this.client = {
hSet: (key: string, data: Record<string, any>) => this._client.hset(key, data),
hSet: (key: string, field: string | Record<string, any>, value?: string) => {
if (typeof field === 'string' && value !== undefined) {
return this._client.hset(key, { [field]: value });
}
return this._client.hset(key, field as Record<string, any>);
},
hset: (key: string, data: Record<string, any>) => this._client.hset(key, data),
zAdd: (key: string, member: { score: number; value: string }) => this._client.zadd(key, { score: member.score, member: member.value }),
zadd: (key: string, member: { score: number; value: string }) => this._client.zadd(key, { score: member.score, member: member.value }),
@@ -584,6 +589,7 @@ export class UpstashRedisStorage implements IStorage {
playrecord_migrated?: boolean;
favorite_migrated?: boolean;
skip_migrated?: boolean;
last_movie_request_time?: number;
} | null> {
// 先从缓存获取
const cached = userInfoCache?.get(userName);
@@ -677,6 +683,11 @@ export class UpstashRedisStorage implements IStorage {
playrecord_migrated,
favorite_migrated,
skip_migrated,
last_movie_request_time: userInfo.last_movie_request_time
? (typeof userInfo.last_movie_request_time === 'number'
? userInfo.last_movie_request_time
: parseInt(userInfo.last_movie_request_time as string, 10))
: undefined,
};
// 存入缓存