Files
x-news-ai/src/app.module.ts
T
2026-05-31 06:21:54 +00:00

120 lines
4.6 KiB
TypeScript

import {Module} from '@nestjs/common';
import {ConfigModule} from '@nestjs/config';
import {BullModule} from '@nestjs/bullmq';
import {AppController} from './app.controller';
import {AppService} from './app.service';
import {ManagerModule} from "./modules/manager/manager.module";
import {TelegramModule} from "./modules/telegram/telegram.module";
import {SocialModule} from "./modules/social-api/social.module";
import {AIService} from "./shared/ai.service";
import {TelegrafModule} from "nestjs-telegraf";
import {BullBoardModule} from "@bull-board/nestjs";
import {ExpressAdapter} from "@bull-board/express";
import {PrismaService} from "../prisma/prisma.service";
import {PgPostService} from "./shared/pg.post.service";
import {PrismaModule} from "../prisma/prisma.module";
import {CacheModule} from "@nestjs/cache-manager";
import KeyvRedis from "@keyv/redis";
import {XReaderModule} from './modules/x-reader/x-reader.module';
import {CollectorModule} from "./modules/collector/collector.module";
import {TrendsModule} from "./modules/trends/trends.module";
import configuration from "./common/config/configuration";
import {SchedulerModule} from "./modules/scheduler/scheduler.module";
import {ContentWriterModule} from "./modules/content-writer/content-writer.module";
import {TeleGrammYModule} from "./modules/tele-grammY/tele-grammY.module";
import {session} from "telegraf";
import {Redis} from '@telegraf/session/redis';
import {XUploaderModule} from "./modules/x-uploader/x-uploader.module";
import {TiktokDownloadModule} from "./modules/tiktok-download/tiktok.download.module";
import {XCacheModule} from "./modules/x-cache/x-cache.module";
import {SqsModule} from "./modules/sqs-module/sqs.module";
import {SqsPostService} from "./modules/sqs-module/sqs.post.service";
@Module({
imports: [
// DevtoolsModule.register({
// http: process.env.NODE_ENV !== 'production',
// }),
ConfigModule.forRoot(
{
isGlobal: true,
load: [configuration],
},
),
CacheModule.registerAsync({
isGlobal: true,
useFactory: () => ({
stores: [
new KeyvRedis(`redis://${process.env.REDIS_URL}:6379/1`)
],
}),
}),
BullModule.forRoot({
connection: {
host: process.env.REDIS_URL,
port: 6379,
},
}),
//register the bull-board module forRoot in your app.module
BullBoardModule.forRoot({
route: "/queues",
adapter: ExpressAdapter
}),
TelegrafModule.forRoot({
token: process.env.TELEGRAM_BOT_TOKEN!,
middlewares: [
session({
store: Redis({
url: `redis://${process.env.REDIS_URL}/3`, // Dùng DB 2 để tách biệt với CacheModule`
})
}), // BẮT BUỘC: Phải có store này thì Wizard mới nhảy bước được
(ctx, next) => {
const allowedIds = (process.env.TELEGRAM_ALLOW_CHAT_IDS || '').split(',');
if (allowedIds.includes(''+ctx.chat?.id)) {
return next();
}
return ctx.reply('Xin lỗi, bạn không có quyền sử dụng bot này.');
},
],
}),
// TelegrafModule.forRootAsync({
// useFactory: () => {
// // NestJS CacheManager stores (Keyv) usually expose the client
//
// return {
// token: process.env.TELEGRAM_BOT_TOKEN!,
// middlewares: [
// session({
// store: new KeyvRedis({
// url: 'redis://127.0.0.1:6379/3', // Dùng DB 2 để tách biệt với CacheModule
// })
// }),
// ],
// };
// },
// // token: process.env.TELEGRAM_BOT_TOKEN!,
// // middlewares: [session()],
// }),
XCacheModule,
PrismaModule,
ManagerModule,
SocialModule,
ContentWriterModule,
CollectorModule,
TrendsModule,
TelegramModule,
TeleGrammYModule,
XReaderModule,
SchedulerModule,
XUploaderModule,
TiktokDownloadModule,
SqsModule,
],
controllers: [AppController],
providers: [AppService, AIService, PrismaService, PgPostService, SqsPostService],
exports: [],
})
export class AppModule {
}