mirror of
				https://github.com/vastxie/99AI.git
				synced 2025-11-04 15:53:43 +08:00 
			
		
		
		
	fix: 修复 badWords 文件名大小写问题导致的部署错误
This commit is contained in:
		
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -3,4 +3,5 @@ logs
 | 
			
		||||
pnpm-lock.yaml
 | 
			
		||||
.env
 | 
			
		||||
/public/file
 | 
			
		||||
.DS_Store
 | 
			
		||||
.DS_Store
 | 
			
		||||
data
 | 
			
		||||
							
								
								
									
										100
									
								
								dist/modules/badWords/badWords.controller.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								dist/modules/badWords/badWords.controller.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,100 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
 | 
			
		||||
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
 | 
			
		||||
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
 | 
			
		||||
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
 | 
			
		||||
    return c > 3 && r && Object.defineProperty(target, key, r), r;
 | 
			
		||||
};
 | 
			
		||||
var __metadata = (this && this.__metadata) || function (k, v) {
 | 
			
		||||
    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
 | 
			
		||||
};
 | 
			
		||||
var __param = (this && this.__param) || function (paramIndex, decorator) {
 | 
			
		||||
    return function (target, key) { decorator(target, key, paramIndex); }
 | 
			
		||||
};
 | 
			
		||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
exports.BadWordsController = void 0;
 | 
			
		||||
const adminAuth_guard_1 = require("../../common/auth/adminAuth.guard");
 | 
			
		||||
const superAuth_guard_1 = require("../../common/auth/superAuth.guard");
 | 
			
		||||
const common_1 = require("@nestjs/common");
 | 
			
		||||
const swagger_1 = require("@nestjs/swagger");
 | 
			
		||||
const badWords_service_1 = require("./badWords.service");
 | 
			
		||||
const addBadWords_dto_1 = require("./dto/addBadWords.dto");
 | 
			
		||||
const delBadWords_dto_1 = require("./dto/delBadWords.dto");
 | 
			
		||||
const queryBadWords_dto_1 = require("./dto/queryBadWords.dto");
 | 
			
		||||
const queryViolation_dto_1 = require("./dto/queryViolation.dto");
 | 
			
		||||
const updateBadWords_dto_1 = require("./dto/updateBadWords.dto");
 | 
			
		||||
let BadWordsController = class BadWordsController {
 | 
			
		||||
    constructor(badWordsService) {
 | 
			
		||||
        this.badWordsService = badWordsService;
 | 
			
		||||
    }
 | 
			
		||||
    queryBadWords(query) {
 | 
			
		||||
        return this.badWordsService.queryBadWords(query);
 | 
			
		||||
    }
 | 
			
		||||
    delBadWords(body) {
 | 
			
		||||
        return this.badWordsService.delBadWords(body);
 | 
			
		||||
    }
 | 
			
		||||
    updateBadWords(body) {
 | 
			
		||||
        return this.badWordsService.updateBadWords(body);
 | 
			
		||||
    }
 | 
			
		||||
    addBadWord(body) {
 | 
			
		||||
        return this.badWordsService.addBadWord(body);
 | 
			
		||||
    }
 | 
			
		||||
    violation(req, query) {
 | 
			
		||||
        return this.badWordsService.violation(req, query);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
__decorate([
 | 
			
		||||
    (0, common_1.Get)('query'),
 | 
			
		||||
    (0, swagger_1.ApiOperation)({ summary: '查询所有敏感词' }),
 | 
			
		||||
    __param(0, (0, common_1.Query)()),
 | 
			
		||||
    __metadata("design:type", Function),
 | 
			
		||||
    __metadata("design:paramtypes", [queryBadWords_dto_1.QueryBadWordsDto]),
 | 
			
		||||
    __metadata("design:returntype", void 0)
 | 
			
		||||
], BadWordsController.prototype, "queryBadWords", null);
 | 
			
		||||
__decorate([
 | 
			
		||||
    (0, common_1.Post)('del'),
 | 
			
		||||
    (0, swagger_1.ApiOperation)({ summary: '删除敏感词' }),
 | 
			
		||||
    (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
 | 
			
		||||
    (0, swagger_1.ApiBearerAuth)(),
 | 
			
		||||
    __param(0, (0, common_1.Body)()),
 | 
			
		||||
    __metadata("design:type", Function),
 | 
			
		||||
    __metadata("design:paramtypes", [delBadWords_dto_1.DelBadWordsDto]),
 | 
			
		||||
    __metadata("design:returntype", void 0)
 | 
			
		||||
], BadWordsController.prototype, "delBadWords", null);
 | 
			
		||||
__decorate([
 | 
			
		||||
    (0, common_1.Post)('update'),
 | 
			
		||||
    (0, swagger_1.ApiOperation)({ summary: '更新敏感词' }),
 | 
			
		||||
    (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
 | 
			
		||||
    (0, swagger_1.ApiBearerAuth)(),
 | 
			
		||||
    __param(0, (0, common_1.Body)()),
 | 
			
		||||
    __metadata("design:type", Function),
 | 
			
		||||
    __metadata("design:paramtypes", [updateBadWords_dto_1.UpdateBadWordsDto]),
 | 
			
		||||
    __metadata("design:returntype", void 0)
 | 
			
		||||
], BadWordsController.prototype, "updateBadWords", null);
 | 
			
		||||
__decorate([
 | 
			
		||||
    (0, common_1.Post)('add'),
 | 
			
		||||
    (0, swagger_1.ApiOperation)({ summary: '新增敏感词' }),
 | 
			
		||||
    (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
 | 
			
		||||
    (0, swagger_1.ApiBearerAuth)(),
 | 
			
		||||
    __param(0, (0, common_1.Body)()),
 | 
			
		||||
    __metadata("design:type", Function),
 | 
			
		||||
    __metadata("design:paramtypes", [addBadWords_dto_1.AddBadWordDto]),
 | 
			
		||||
    __metadata("design:returntype", void 0)
 | 
			
		||||
], BadWordsController.prototype, "addBadWord", null);
 | 
			
		||||
__decorate([
 | 
			
		||||
    (0, common_1.Get)('violation'),
 | 
			
		||||
    (0, swagger_1.ApiOperation)({ summary: '查询违规记录' }),
 | 
			
		||||
    (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard),
 | 
			
		||||
    (0, swagger_1.ApiBearerAuth)(),
 | 
			
		||||
    __param(0, (0, common_1.Req)()),
 | 
			
		||||
    __param(1, (0, common_1.Query)()),
 | 
			
		||||
    __metadata("design:type", Function),
 | 
			
		||||
    __metadata("design:paramtypes", [Object, queryViolation_dto_1.QueryViolationDto]),
 | 
			
		||||
    __metadata("design:returntype", void 0)
 | 
			
		||||
], BadWordsController.prototype, "violation", null);
 | 
			
		||||
BadWordsController = __decorate([
 | 
			
		||||
    (0, swagger_1.ApiTags)('badWords'),
 | 
			
		||||
    (0, common_1.Controller)('badWords'),
 | 
			
		||||
    __metadata("design:paramtypes", [badWords_service_1.BadWordsService])
 | 
			
		||||
], BadWordsController);
 | 
			
		||||
exports.BadWordsController = BadWordsController;
 | 
			
		||||
							
								
								
									
										32
									
								
								dist/modules/badWords/badWords.entity.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								dist/modules/badWords/badWords.entity.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
 | 
			
		||||
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
 | 
			
		||||
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
 | 
			
		||||
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
 | 
			
		||||
    return c > 3 && r && Object.defineProperty(target, key, r), r;
 | 
			
		||||
};
 | 
			
		||||
var __metadata = (this && this.__metadata) || function (k, v) {
 | 
			
		||||
    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
 | 
			
		||||
};
 | 
			
		||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
exports.BadWordsEntity = void 0;
 | 
			
		||||
const baseEntity_1 = require("../../common/entity/baseEntity");
 | 
			
		||||
const typeorm_1 = require("typeorm");
 | 
			
		||||
let BadWordsEntity = class BadWordsEntity extends baseEntity_1.BaseEntity {
 | 
			
		||||
};
 | 
			
		||||
__decorate([
 | 
			
		||||
    (0, typeorm_1.Column)({ length: 20, comment: '敏感词' }),
 | 
			
		||||
    __metadata("design:type", String)
 | 
			
		||||
], BadWordsEntity.prototype, "word", void 0);
 | 
			
		||||
__decorate([
 | 
			
		||||
    (0, typeorm_1.Column)({ default: 1, comment: '敏感词开启状态' }),
 | 
			
		||||
    __metadata("design:type", Number)
 | 
			
		||||
], BadWordsEntity.prototype, "status", void 0);
 | 
			
		||||
__decorate([
 | 
			
		||||
    (0, typeorm_1.Column)({ default: 0, comment: '敏感词触发次数' }),
 | 
			
		||||
    __metadata("design:type", Number)
 | 
			
		||||
], BadWordsEntity.prototype, "count", void 0);
 | 
			
		||||
BadWordsEntity = __decorate([
 | 
			
		||||
    (0, typeorm_1.Entity)({ name: 'bad_words' })
 | 
			
		||||
], BadWordsEntity);
 | 
			
		||||
exports.BadWordsEntity = BadWordsEntity;
 | 
			
		||||
							
								
								
									
										30
									
								
								dist/modules/badWords/badWords.module.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								dist/modules/badWords/badWords.module.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
 | 
			
		||||
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
 | 
			
		||||
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
 | 
			
		||||
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
 | 
			
		||||
    return c > 3 && r && Object.defineProperty(target, key, r), r;
 | 
			
		||||
};
 | 
			
		||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
exports.BadWordsModule = void 0;
 | 
			
		||||
const common_1 = require("@nestjs/common");
 | 
			
		||||
const typeorm_1 = require("@nestjs/typeorm");
 | 
			
		||||
const user_entity_1 = require("../user/user.entity");
 | 
			
		||||
const badWords_controller_1 = require("./badWords.controller");
 | 
			
		||||
const badWords_entity_1 = require("./badWords.entity");
 | 
			
		||||
const badWords_service_1 = require("./badWords.service");
 | 
			
		||||
const violationLog_entity_1 = require("./violationLog.entity");
 | 
			
		||||
let BadWordsModule = class BadWordsModule {
 | 
			
		||||
};
 | 
			
		||||
BadWordsModule = __decorate([
 | 
			
		||||
    (0, common_1.Global)(),
 | 
			
		||||
    (0, common_1.Module)({
 | 
			
		||||
        imports: [
 | 
			
		||||
            typeorm_1.TypeOrmModule.forFeature([badWords_entity_1.BadWordsEntity, violationLog_entity_1.ViolationLogEntity, user_entity_1.UserEntity]),
 | 
			
		||||
        ],
 | 
			
		||||
        providers: [badWords_service_1.BadWordsService],
 | 
			
		||||
        controllers: [badWords_controller_1.BadWordsController],
 | 
			
		||||
        exports: [badWords_service_1.BadWordsService],
 | 
			
		||||
    })
 | 
			
		||||
], BadWordsModule);
 | 
			
		||||
exports.BadWordsModule = BadWordsModule;
 | 
			
		||||
							
								
								
									
										208
									
								
								dist/modules/badWords/badWords.service.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										208
									
								
								dist/modules/badWords/badWords.service.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,208 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
 | 
			
		||||
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
 | 
			
		||||
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
 | 
			
		||||
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
 | 
			
		||||
    return c > 3 && r && Object.defineProperty(target, key, r), r;
 | 
			
		||||
};
 | 
			
		||||
var __metadata = (this && this.__metadata) || function (k, v) {
 | 
			
		||||
    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
 | 
			
		||||
};
 | 
			
		||||
var __param = (this && this.__param) || function (paramIndex, decorator) {
 | 
			
		||||
    return function (target, key) { decorator(target, key, paramIndex); }
 | 
			
		||||
};
 | 
			
		||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
exports.BadWordsService = void 0;
 | 
			
		||||
const utils_1 = require("../../common/utils");
 | 
			
		||||
const common_1 = require("@nestjs/common");
 | 
			
		||||
const typeorm_1 = require("@nestjs/typeorm");
 | 
			
		||||
const axios_1 = require("axios");
 | 
			
		||||
const typeorm_2 = require("typeorm");
 | 
			
		||||
const globalConfig_service_1 = require("../globalConfig/globalConfig.service");
 | 
			
		||||
const user_entity_1 = require("../user/user.entity");
 | 
			
		||||
const badWords_entity_1 = require("./badWords.entity");
 | 
			
		||||
const violationLog_entity_1 = require("./violationLog.entity");
 | 
			
		||||
let BadWordsService = class BadWordsService {
 | 
			
		||||
    constructor(badWordsEntity, violationLogEntity, userEntity, globalConfigService) {
 | 
			
		||||
        this.badWordsEntity = badWordsEntity;
 | 
			
		||||
        this.violationLogEntity = violationLogEntity;
 | 
			
		||||
        this.userEntity = userEntity;
 | 
			
		||||
        this.globalConfigService = globalConfigService;
 | 
			
		||||
        this.badWords = [];
 | 
			
		||||
    }
 | 
			
		||||
    async onModuleInit() {
 | 
			
		||||
        this.loadBadWords();
 | 
			
		||||
    }
 | 
			
		||||
    async customSensitiveWords(content, userId) {
 | 
			
		||||
        const triggeredWords = [];
 | 
			
		||||
        for (let i = 0; i < this.badWords.length; i++) {
 | 
			
		||||
            const word = this.badWords[i];
 | 
			
		||||
            if (content.includes(word)) {
 | 
			
		||||
                triggeredWords.push(word);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (triggeredWords.length) {
 | 
			
		||||
            await this.recordUserBadWords(userId, content, triggeredWords, ['自定义'], '自定义检测');
 | 
			
		||||
        }
 | 
			
		||||
        return triggeredWords;
 | 
			
		||||
    }
 | 
			
		||||
    async checkBadWords(content, userId) {
 | 
			
		||||
        const config = await this.globalConfigService.getSensitiveConfig();
 | 
			
		||||
        if (config) {
 | 
			
		||||
            await this.checkBadWordsByConfig(content, config, userId);
 | 
			
		||||
        }
 | 
			
		||||
        return await this.customSensitiveWords(content, userId);
 | 
			
		||||
    }
 | 
			
		||||
    async checkBadWordsByConfig(content, config, userId) {
 | 
			
		||||
        const { useType } = config;
 | 
			
		||||
        useType === 'baidu' &&
 | 
			
		||||
            (await this.baiduCheckBadWords(content, config.baiduTextAccessToken, userId));
 | 
			
		||||
    }
 | 
			
		||||
    extractContent(str) {
 | 
			
		||||
        const pattern = /存在(.*?)不合规/;
 | 
			
		||||
        const match = str.match(pattern);
 | 
			
		||||
        return match ? match[1] : '';
 | 
			
		||||
    }
 | 
			
		||||
    async baiduCheckBadWords(content, accessToken, userId) {
 | 
			
		||||
        if (!accessToken)
 | 
			
		||||
            return;
 | 
			
		||||
        const url = `https://aip.baidubce.com/rest/2.0/solution/v1/text_censor/v2/user_defined?access_token=${accessToken}}`;
 | 
			
		||||
        const headers = {
 | 
			
		||||
            'Content-Type': 'application/x-www-form-urlencoded',
 | 
			
		||||
            Accept: 'application/json',
 | 
			
		||||
        };
 | 
			
		||||
        const response = await axios_1.default.post(url, { text: content }, { headers });
 | 
			
		||||
        const { conclusion, error_code, error_msg, conclusionType, data } = response.data;
 | 
			
		||||
        if (error_code) {
 | 
			
		||||
            console.log('百度文本检测出现错误、请查看配置信息: ', error_msg);
 | 
			
		||||
        }
 | 
			
		||||
        if (conclusionType !== 1) {
 | 
			
		||||
            const types = [
 | 
			
		||||
                ...new Set(data.map((item) => this.extractContent(item.msg))),
 | 
			
		||||
            ];
 | 
			
		||||
            await this.recordUserBadWords(userId, content, ['***'], types, '百度云检测');
 | 
			
		||||
            const tips = `您提交的信息中包含${types.join(',')}的内容、我们已对您的账户进行标记、请合规使用!`;
 | 
			
		||||
            throw new common_1.HttpException(tips, common_1.HttpStatus.BAD_REQUEST);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    formarTips(wordList) {
 | 
			
		||||
        const categorys = wordList.map((t) => t.category);
 | 
			
		||||
        const unSet = [...new Set(categorys)];
 | 
			
		||||
        return `您提交的内容中包含${unSet.join(',')}的信息、我们已对您账号进行标记、请合规使用!`;
 | 
			
		||||
    }
 | 
			
		||||
    async loadBadWords() {
 | 
			
		||||
        const data = await this.badWordsEntity.find({
 | 
			
		||||
            where: { status: 1 },
 | 
			
		||||
            select: ['word'],
 | 
			
		||||
        });
 | 
			
		||||
        this.badWords = data.map((t) => t.word);
 | 
			
		||||
    }
 | 
			
		||||
    async queryBadWords(query) {
 | 
			
		||||
        const { page = 1, size = 500, word, status } = query;
 | 
			
		||||
        const where = {};
 | 
			
		||||
        [0, 1, '0', '1'].includes(status) && (where.status = status);
 | 
			
		||||
        word && (where.word = (0, typeorm_2.Like)(`%${word}%`));
 | 
			
		||||
        const [rows, count] = await this.badWordsEntity.findAndCount({
 | 
			
		||||
            where,
 | 
			
		||||
            skip: (page - 1) * size,
 | 
			
		||||
            take: size,
 | 
			
		||||
            order: { id: 'ASC' },
 | 
			
		||||
        });
 | 
			
		||||
        return { rows, count };
 | 
			
		||||
    }
 | 
			
		||||
    async delBadWords(body) {
 | 
			
		||||
        const b = await this.badWordsEntity.findOne({ where: { id: body.id } });
 | 
			
		||||
        if (!b) {
 | 
			
		||||
            throw new common_1.HttpException('敏感词不存在,请检查您的提交信息', common_1.HttpStatus.BAD_REQUEST);
 | 
			
		||||
        }
 | 
			
		||||
        const res = await this.badWordsEntity.delete({ id: body.id });
 | 
			
		||||
        if (res.affected > 0) {
 | 
			
		||||
            await this.loadBadWords();
 | 
			
		||||
            return '删除敏感词成功';
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            throw new common_1.HttpException('删除敏感词失败', common_1.HttpStatus.BAD_REQUEST);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    async updateBadWords(body) {
 | 
			
		||||
        const { id, word, status } = body;
 | 
			
		||||
        const b = await this.badWordsEntity.findOne({ where: { word } });
 | 
			
		||||
        if (b) {
 | 
			
		||||
            throw new common_1.HttpException('敏感词已经存在了、请勿重复添加', common_1.HttpStatus.BAD_REQUEST);
 | 
			
		||||
        }
 | 
			
		||||
        const res = await this.badWordsEntity.update({ id }, { word, status });
 | 
			
		||||
        if (res.affected > 0) {
 | 
			
		||||
            await this.loadBadWords();
 | 
			
		||||
            return '更新敏感词成功';
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            throw new common_1.HttpException('更新敏感词失败', common_1.HttpStatus.BAD_REQUEST);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    async addBadWord(body) {
 | 
			
		||||
        const { word } = body;
 | 
			
		||||
        const b = await this.badWordsEntity.findOne({ where: { word } });
 | 
			
		||||
        if (b) {
 | 
			
		||||
            throw new common_1.HttpException('敏感词已存在,请检查您的提交信息', common_1.HttpStatus.BAD_REQUEST);
 | 
			
		||||
        }
 | 
			
		||||
        await this.badWordsEntity.save({ word });
 | 
			
		||||
        await this.loadBadWords();
 | 
			
		||||
        return '添加敏感词成功';
 | 
			
		||||
    }
 | 
			
		||||
    async recordUserBadWords(userId, content, words, typeCn, typeOriginCn) {
 | 
			
		||||
        const data = {
 | 
			
		||||
            userId,
 | 
			
		||||
            content,
 | 
			
		||||
            words: JSON.stringify(words),
 | 
			
		||||
            typeCn: JSON.stringify(typeCn),
 | 
			
		||||
            typeOriginCn,
 | 
			
		||||
        };
 | 
			
		||||
        try {
 | 
			
		||||
            await this.userEntity
 | 
			
		||||
                .createQueryBuilder()
 | 
			
		||||
                .update(user_entity_1.UserEntity)
 | 
			
		||||
                .set({ violationCount: () => 'violationCount + 1' })
 | 
			
		||||
                .where('id = :userId', { userId })
 | 
			
		||||
                .execute();
 | 
			
		||||
            await this.violationLogEntity.save(data);
 | 
			
		||||
        }
 | 
			
		||||
        catch (error) {
 | 
			
		||||
            console.log('error: ', error);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    async violation(req, query) {
 | 
			
		||||
        const { role } = req.user;
 | 
			
		||||
        const { page = 1, size = 10, userId, typeOriginCn } = query;
 | 
			
		||||
        const where = {};
 | 
			
		||||
        userId && (where['userId'] = userId);
 | 
			
		||||
        typeOriginCn && (where['typeOriginCn'] = typeOriginCn);
 | 
			
		||||
        const [rows, count] = await this.violationLogEntity.findAndCount({
 | 
			
		||||
            where,
 | 
			
		||||
            skip: (page - 1) * size,
 | 
			
		||||
            take: size,
 | 
			
		||||
            order: { id: 'DESC' },
 | 
			
		||||
        });
 | 
			
		||||
        const userIds = [...new Set(rows.map((t) => t.userId))];
 | 
			
		||||
        const usersInfo = await this.userEntity.find({
 | 
			
		||||
            where: { id: (0, typeorm_2.In)(userIds) },
 | 
			
		||||
            select: ['id', 'avatar', 'username', 'email', 'violationCount', 'status'],
 | 
			
		||||
        });
 | 
			
		||||
        rows.forEach((t) => {
 | 
			
		||||
            const user = usersInfo.find((u) => u.id === t.userId) || {};
 | 
			
		||||
            role !== 'super' && (user.email = (0, utils_1.hideString)(user.email));
 | 
			
		||||
            t.userInfo = user;
 | 
			
		||||
        });
 | 
			
		||||
        return { rows, count };
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
BadWordsService = __decorate([
 | 
			
		||||
    (0, common_1.Injectable)(),
 | 
			
		||||
    __param(0, (0, typeorm_1.InjectRepository)(badWords_entity_1.BadWordsEntity)),
 | 
			
		||||
    __param(1, (0, typeorm_1.InjectRepository)(violationLog_entity_1.ViolationLogEntity)),
 | 
			
		||||
    __param(2, (0, typeorm_1.InjectRepository)(user_entity_1.UserEntity)),
 | 
			
		||||
    __metadata("design:paramtypes", [typeorm_2.Repository,
 | 
			
		||||
        typeorm_2.Repository,
 | 
			
		||||
        typeorm_2.Repository,
 | 
			
		||||
        globalConfig_service_1.GlobalConfigService])
 | 
			
		||||
], BadWordsService);
 | 
			
		||||
exports.BadWordsService = BadWordsService;
 | 
			
		||||
							
								
								
									
										20
									
								
								dist/modules/badWords/dto/addBadWords.dto.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								dist/modules/badWords/dto/addBadWords.dto.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
 | 
			
		||||
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
 | 
			
		||||
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
 | 
			
		||||
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
 | 
			
		||||
    return c > 3 && r && Object.defineProperty(target, key, r), r;
 | 
			
		||||
};
 | 
			
		||||
var __metadata = (this && this.__metadata) || function (k, v) {
 | 
			
		||||
    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
 | 
			
		||||
};
 | 
			
		||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
exports.AddBadWordDto = void 0;
 | 
			
		||||
const swagger_1 = require("@nestjs/swagger");
 | 
			
		||||
class AddBadWordDto {
 | 
			
		||||
}
 | 
			
		||||
__decorate([
 | 
			
		||||
    (0, swagger_1.ApiProperty)({ example: 'test', description: '敏感词', required: true }),
 | 
			
		||||
    __metadata("design:type", String)
 | 
			
		||||
], AddBadWordDto.prototype, "word", void 0);
 | 
			
		||||
exports.AddBadWordDto = AddBadWordDto;
 | 
			
		||||
							
								
								
									
										20
									
								
								dist/modules/badWords/dto/delBadWords.dto.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								dist/modules/badWords/dto/delBadWords.dto.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
 | 
			
		||||
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
 | 
			
		||||
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
 | 
			
		||||
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
 | 
			
		||||
    return c > 3 && r && Object.defineProperty(target, key, r), r;
 | 
			
		||||
};
 | 
			
		||||
var __metadata = (this && this.__metadata) || function (k, v) {
 | 
			
		||||
    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
 | 
			
		||||
};
 | 
			
		||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
exports.DelBadWordsDto = void 0;
 | 
			
		||||
const swagger_1 = require("@nestjs/swagger");
 | 
			
		||||
class DelBadWordsDto {
 | 
			
		||||
}
 | 
			
		||||
__decorate([
 | 
			
		||||
    (0, swagger_1.ApiProperty)({ example: 1, description: '敏感词id', required: true }),
 | 
			
		||||
    __metadata("design:type", Number)
 | 
			
		||||
], DelBadWordsDto.prototype, "id", void 0);
 | 
			
		||||
exports.DelBadWordsDto = DelBadWordsDto;
 | 
			
		||||
							
								
								
									
										37
									
								
								dist/modules/badWords/dto/queryBadWords.dto.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								dist/modules/badWords/dto/queryBadWords.dto.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
 | 
			
		||||
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
 | 
			
		||||
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
 | 
			
		||||
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
 | 
			
		||||
    return c > 3 && r && Object.defineProperty(target, key, r), r;
 | 
			
		||||
};
 | 
			
		||||
var __metadata = (this && this.__metadata) || function (k, v) {
 | 
			
		||||
    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
 | 
			
		||||
};
 | 
			
		||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
exports.QueryBadWordsDto = void 0;
 | 
			
		||||
const class_validator_1 = require("class-validator");
 | 
			
		||||
const swagger_1 = require("@nestjs/swagger");
 | 
			
		||||
class QueryBadWordsDto {
 | 
			
		||||
}
 | 
			
		||||
__decorate([
 | 
			
		||||
    (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }),
 | 
			
		||||
    (0, class_validator_1.IsOptional)(),
 | 
			
		||||
    __metadata("design:type", Number)
 | 
			
		||||
], QueryBadWordsDto.prototype, "page", void 0);
 | 
			
		||||
__decorate([
 | 
			
		||||
    (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }),
 | 
			
		||||
    (0, class_validator_1.IsOptional)(),
 | 
			
		||||
    __metadata("design:type", Number)
 | 
			
		||||
], QueryBadWordsDto.prototype, "size", void 0);
 | 
			
		||||
__decorate([
 | 
			
		||||
    (0, swagger_1.ApiProperty)({ example: 'test', description: '敏感词内容', required: false }),
 | 
			
		||||
    (0, class_validator_1.IsOptional)(),
 | 
			
		||||
    __metadata("design:type", String)
 | 
			
		||||
], QueryBadWordsDto.prototype, "word", void 0);
 | 
			
		||||
__decorate([
 | 
			
		||||
    (0, swagger_1.ApiProperty)({ example: 1, description: '关键词状态', required: false }),
 | 
			
		||||
    (0, class_validator_1.IsOptional)(),
 | 
			
		||||
    __metadata("design:type", Number)
 | 
			
		||||
], QueryBadWordsDto.prototype, "status", void 0);
 | 
			
		||||
exports.QueryBadWordsDto = QueryBadWordsDto;
 | 
			
		||||
							
								
								
									
										37
									
								
								dist/modules/badWords/dto/queryViolation.dto.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								dist/modules/badWords/dto/queryViolation.dto.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
 | 
			
		||||
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
 | 
			
		||||
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
 | 
			
		||||
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
 | 
			
		||||
    return c > 3 && r && Object.defineProperty(target, key, r), r;
 | 
			
		||||
};
 | 
			
		||||
var __metadata = (this && this.__metadata) || function (k, v) {
 | 
			
		||||
    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
 | 
			
		||||
};
 | 
			
		||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
exports.QueryViolationDto = void 0;
 | 
			
		||||
const class_validator_1 = require("class-validator");
 | 
			
		||||
const swagger_1 = require("@nestjs/swagger");
 | 
			
		||||
class QueryViolationDto {
 | 
			
		||||
}
 | 
			
		||||
__decorate([
 | 
			
		||||
    (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }),
 | 
			
		||||
    (0, class_validator_1.IsOptional)(),
 | 
			
		||||
    __metadata("design:type", Number)
 | 
			
		||||
], QueryViolationDto.prototype, "page", void 0);
 | 
			
		||||
__decorate([
 | 
			
		||||
    (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }),
 | 
			
		||||
    (0, class_validator_1.IsOptional)(),
 | 
			
		||||
    __metadata("design:type", Number)
 | 
			
		||||
], QueryViolationDto.prototype, "size", void 0);
 | 
			
		||||
__decorate([
 | 
			
		||||
    (0, swagger_1.ApiProperty)({ example: 1, description: '用户ID', required: false }),
 | 
			
		||||
    (0, class_validator_1.IsOptional)(),
 | 
			
		||||
    __metadata("design:type", Number)
 | 
			
		||||
], QueryViolationDto.prototype, "userId", void 0);
 | 
			
		||||
__decorate([
 | 
			
		||||
    (0, swagger_1.ApiProperty)({ example: '百度云检测', description: '检测平台来源', required: false }),
 | 
			
		||||
    (0, class_validator_1.IsOptional)(),
 | 
			
		||||
    __metadata("design:type", String)
 | 
			
		||||
], QueryViolationDto.prototype, "typeOriginCn", void 0);
 | 
			
		||||
exports.QueryViolationDto = QueryViolationDto;
 | 
			
		||||
							
								
								
									
										32
									
								
								dist/modules/badWords/dto/updateBadWords.dto.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								dist/modules/badWords/dto/updateBadWords.dto.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
 | 
			
		||||
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
 | 
			
		||||
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
 | 
			
		||||
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
 | 
			
		||||
    return c > 3 && r && Object.defineProperty(target, key, r), r;
 | 
			
		||||
};
 | 
			
		||||
var __metadata = (this && this.__metadata) || function (k, v) {
 | 
			
		||||
    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
 | 
			
		||||
};
 | 
			
		||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
exports.UpdateBadWordsDto = void 0;
 | 
			
		||||
const class_validator_1 = require("class-validator");
 | 
			
		||||
const swagger_1 = require("@nestjs/swagger");
 | 
			
		||||
class UpdateBadWordsDto {
 | 
			
		||||
}
 | 
			
		||||
__decorate([
 | 
			
		||||
    (0, swagger_1.ApiProperty)({ example: 1, description: '敏感词id', required: true }),
 | 
			
		||||
    (0, class_validator_1.IsOptional)(),
 | 
			
		||||
    __metadata("design:type", Number)
 | 
			
		||||
], UpdateBadWordsDto.prototype, "id", void 0);
 | 
			
		||||
__decorate([
 | 
			
		||||
    (0, swagger_1.ApiProperty)({ example: 'test', description: '敏感词内容', required: false }),
 | 
			
		||||
    (0, class_validator_1.IsOptional)(),
 | 
			
		||||
    __metadata("design:type", String)
 | 
			
		||||
], UpdateBadWordsDto.prototype, "word", void 0);
 | 
			
		||||
__decorate([
 | 
			
		||||
    (0, swagger_1.ApiProperty)({ example: 1, description: '关键词状态', required: false }),
 | 
			
		||||
    (0, class_validator_1.IsOptional)(),
 | 
			
		||||
    __metadata("design:type", Number)
 | 
			
		||||
], UpdateBadWordsDto.prototype, "status", void 0);
 | 
			
		||||
exports.UpdateBadWordsDto = UpdateBadWordsDto;
 | 
			
		||||
							
								
								
									
										40
									
								
								dist/modules/badWords/violationLog.entity.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								dist/modules/badWords/violationLog.entity.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
 | 
			
		||||
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
 | 
			
		||||
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
 | 
			
		||||
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
 | 
			
		||||
    return c > 3 && r && Object.defineProperty(target, key, r), r;
 | 
			
		||||
};
 | 
			
		||||
var __metadata = (this && this.__metadata) || function (k, v) {
 | 
			
		||||
    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
 | 
			
		||||
};
 | 
			
		||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
exports.ViolationLogEntity = void 0;
 | 
			
		||||
const typeorm_1 = require("typeorm");
 | 
			
		||||
const baseEntity_1 = require("../../common/entity/baseEntity");
 | 
			
		||||
let ViolationLogEntity = class ViolationLogEntity extends baseEntity_1.BaseEntity {
 | 
			
		||||
};
 | 
			
		||||
__decorate([
 | 
			
		||||
    (0, typeorm_1.Column)({ comment: '用户id' }),
 | 
			
		||||
    __metadata("design:type", Number)
 | 
			
		||||
], ViolationLogEntity.prototype, "userId", void 0);
 | 
			
		||||
__decorate([
 | 
			
		||||
    (0, typeorm_1.Column)({ comment: '违规内容', type: 'text' }),
 | 
			
		||||
    __metadata("design:type", String)
 | 
			
		||||
], ViolationLogEntity.prototype, "content", void 0);
 | 
			
		||||
__decorate([
 | 
			
		||||
    (0, typeorm_1.Column)({ comment: '敏感词', type: 'text' }),
 | 
			
		||||
    __metadata("design:type", String)
 | 
			
		||||
], ViolationLogEntity.prototype, "words", void 0);
 | 
			
		||||
__decorate([
 | 
			
		||||
    (0, typeorm_1.Column)({ comment: '违规类型' }),
 | 
			
		||||
    __metadata("design:type", String)
 | 
			
		||||
], ViolationLogEntity.prototype, "typeCn", void 0);
 | 
			
		||||
__decorate([
 | 
			
		||||
    (0, typeorm_1.Column)({ comment: '违规检测失败于哪个平台' }),
 | 
			
		||||
    __metadata("design:type", String)
 | 
			
		||||
], ViolationLogEntity.prototype, "typeOriginCn", void 0);
 | 
			
		||||
ViolationLogEntity = __decorate([
 | 
			
		||||
    (0, typeorm_1.Entity)({ name: 'violation_log' })
 | 
			
		||||
], ViolationLogEntity);
 | 
			
		||||
exports.ViolationLogEntity = ViolationLogEntity;
 | 
			
		||||
@@ -31,6 +31,7 @@ services:
 | 
			
		||||
 | 
			
		||||
  99ai:
 | 
			
		||||
    build: ./
 | 
			
		||||
    # image: vastxie/99ai:latest
 | 
			
		||||
    container_name: 99ai
 | 
			
		||||
    restart: always
 | 
			
		||||
    ports:
 | 
			
		||||
 
 | 
			
		||||
@@ -9,10 +9,8 @@ import { NestFactory } from '@nestjs/core';
 | 
			
		||||
import * as compression from 'compression';
 | 
			
		||||
import { randomBytes } from 'crypto';
 | 
			
		||||
import * as Dotenv from 'dotenv';
 | 
			
		||||
// import * as express from 'express';
 | 
			
		||||
import * as xmlBodyParser from 'express-xml-bodyparser';
 | 
			
		||||
import Redis from 'ioredis';
 | 
			
		||||
// import { join } from 'path';
 | 
			
		||||
import { AppModule } from './app.module';
 | 
			
		||||
Dotenv.config({ path: '.env' });
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user