Files
BYW-VoiceHub/server/api/blacklist/check.post.ts
T
Henry_Du 4ce4649aaf
Build VoiceHub FPK / build-fpk (push) Failing after 56m5s
Build and Push Docker Image / build-and-push (push) Canceled after 1h9m35s
初次提交
2026-09-06 08:19:02 +08:00

71 lines
2.0 KiB
TypeScript

import { createError, defineEventHandler, readBody } from 'h3'
import { db } from '~/drizzle/db'
import { songBlacklists, systemSettings } from '~/drizzle/schema'
import { eq } from 'drizzle-orm'
export default defineEventHandler(async (event) => {
const body = await readBody(event)
const { title, artist } = body
if (!title) {
throw createError({
statusCode: 400,
message: '歌曲标题不能为空'
})
}
try {
// 获取系统设置
const systemSettingsResult = await db.select().from(systemSettings).limit(1)
const systemSettingsData = systemSettingsResult[0]
const showBlacklistKeywords = systemSettingsData?.showBlacklistKeywords ?? false
// 获取所有活跃的黑名单项
const blacklistItems = await db
.select()
.from(songBlacklists)
.where(eq(songBlacklists.isActive, true))
const songFullName = `${title} - ${artist || ''}`.toLowerCase()
const blocked = []
for (const item of blacklistItems) {
if (item.type === 'SONG') {
// 检查具体歌曲
if (songFullName.includes(item.value.toLowerCase())) {
blocked.push({
type: 'song',
value: item.value,
reason: item.reason || '该歌曲已被加入黑名单'
})
}
} else if (item.type === 'KEYWORD') {
// 检查关键词
if (songFullName.includes(item.value.toLowerCase())) {
blocked.push({
type: 'keyword',
value: showBlacklistKeywords ? item.value : null, // 根据设置决定是否显示具体关键词
reason:
item.reason || (showBlacklistKeywords ? `包含关键词:${item.value}` : '包含关键词')
})
}
}
}
return {
isBlocked: blocked.length > 0,
reasons: blocked,
song: {
title,
artist
}
}
} catch (error) {
console.error('检查黑名单失败:', error)
throw createError({
statusCode: 500,
message: '检查黑名单失败'
})
}
})