wuyi 1 年間 前
コミット
c179505c51
2 ファイル変更52 行追加10 行削除
  1. 10 0
      src/task/entities/task.entity.ts
  2. 42 10
      src/task/task.service.ts

+ 10 - 0
src/task/entities/task.entity.ts

@@ -18,6 +18,13 @@ export enum RequestMode {
     RESTORE_FIRST = 'restore_first'
 }
 
+export enum ConfusionType {
+   NONE = 'none',
+   HEAD = 'head',
+   END = 'end',
+   BOTH = 'both'
+}
+
 @Entity()
 export class Task {
     @PrimaryGeneratedColumn()
@@ -103,4 +110,7 @@ export class Task {
 
     @Column({ default: 0 })
     e2eeTimeout: number
+
+    @Column({ default: 'none' })
+    confusion: string
 }

+ 42 - 10
src/task/task.service.ts

@@ -10,7 +10,7 @@ import {
     OnModuleInit
 } from '@nestjs/common'
 import { InjectRepository } from '@nestjs/typeorm'
-import { Task, TaskStatus } from './entities/task.entity'
+import { ConfusionType, Task, TaskStatus } from './entities/task.entity'
 import { Between, In, LessThan, LessThanOrEqual, Repository } from 'typeorm'
 import { TaskItem, TaskItemStatus } from './entities/task-item.entity'
 import { PageRequest } from '../common/dto/page-request'
@@ -64,7 +64,8 @@ export class TaskService implements OnModuleInit {
         private readonly balanceService: BalanceService,
         private readonly userService: UsersService,
         private readonly operatorConfigService: OperatorConfigService
-    ) {}
+    ) {
+    }
 
     onModuleInit() {
         this.lock.acquire('dispatchTask', async () => {
@@ -132,6 +133,10 @@ export class TaskService implements OnModuleInit {
         if (task.country) {
             task.e2ee = (await this.operatorConfigService.findByCountry(task.country))?.e2ee || 0
         }
+        // 任务混淆
+        if (task.confusion && task.confusion.includes('head') && task.confusion.includes('end')) {
+            task.confusion = 'both'
+        }
         // 定时任务
         let cost = 0
         if (task.startedAt) {
@@ -203,6 +208,26 @@ export class TaskService implements OnModuleInit {
                 message = message.replaceAll(`${dm.key}`, dm.values[Math.floor(Math.random() * dm.values.length)])
             }
         })
+        // 内容混淆
+        if (task.confusion !== ConfusionType.NONE) {
+            const timestamp = Math.round(Date.now() / 1000)
+            const confusionText = `${task.id}-msg-${timestamp}`
+
+            switch (task.confusion) {
+                case ConfusionType.HEAD:
+                    message = `${confusionText}\n` + message
+                    break
+                case ConfusionType.END:
+                    message += `\n${confusionText}`
+                    break
+                case ConfusionType.BOTH:
+                    message = `${confusionText}\n` + message + `\n${confusionText}`
+                    break
+                default:
+            }
+        }
+
+
         return this.refineContent(message)
     }
 
@@ -661,7 +686,8 @@ export class TaskService implements OnModuleInit {
                     if (durianRes.data.code === 200) {
                         res.durian = durianRes.data.data.score
                     }
-                } catch (e) {}
+                } catch (e) {
+                }
             })(),
             (async () => {
                 try {
@@ -675,7 +701,8 @@ export class TaskService implements OnModuleInit {
                     if (parts[0] === '0') {
                         res.xyz = parts[1] < 0 ? 0 : parts[1]
                     }
-                } catch (e) {}
+                } catch (e) {
+                }
             })(),
             (async () => {
                 try {
@@ -688,7 +715,8 @@ export class TaskService implements OnModuleInit {
                     if (cloud033Res.data.code === '1001') {
                         res.cloud033 = cloud033Res.data.data.integral
                     }
-                } catch (e) {}
+                } catch (e) {
+                }
             })(),
             (async () => {
                 try {
@@ -701,7 +729,8 @@ export class TaskService implements OnModuleInit {
                     if (cloud034Res.data.code === '1001') {
                         res.cloud034 = cloud034Res.data.data.integral
                     }
-                } catch (e) {}
+                } catch (e) {
+                }
             })(),
             (async () => {
                 try {
@@ -714,7 +743,8 @@ export class TaskService implements OnModuleInit {
                     if (cloud037Res.data.code === '1001') {
                         res.cloud037 = cloud037Res.data.data.integral
                     }
-                } catch (e) {}
+                } catch (e) {
+                }
             })()
         ])
         return res
@@ -726,7 +756,7 @@ export class TaskService implements OnModuleInit {
 
         return await this.taskItemRepository
             .createQueryBuilder()
-            .select(['COUNT(*) AS sent', "DATE_FORMAT(sendAt, '%Y-%m-%d %H:00:00') AS hour"])
+            .select(['COUNT(*) AS sent', 'DATE_FORMAT(sendAt, \'%Y-%m-%d %H:00:00\') AS hour'])
             .where('sendAt BETWEEN :start AND :end', { start: twelveHoursAgo, end: new Date() })
             .groupBy('hour')
             .orderBy('hour', 'DESC')
@@ -751,7 +781,8 @@ export class TaskService implements OnModuleInit {
                         .andWhere('task.startedAt < CURDATE()')
                         .getRawOne()
                     res.orderCountYesterday = yesterdayOrderCount.sum
-                } catch (e) {}
+                } catch (e) {
+                }
             })(),
             (async () => {
                 try {
@@ -763,7 +794,8 @@ export class TaskService implements OnModuleInit {
                         .andWhere('task.startedAt < CURDATE() + INTERVAL 1 DAY')
                         .getRawOne()
                     res.orderCountToday = todayOrderCount.sum
-                } catch (e) {}
+                } catch (e) {
+                }
             })()
         ])