NestJS의 Telegram 봇에서 유명한 사람들의 임의 인용을 생성하기 위한 모듈 생성
23654 단어 telegramquotesnestjskaufmanbot
연결
https://github.com/EndyKaufman/kaufman-bot - 봇의 소스 코드
https://telegram.me/DevelopKaufmanBot - 전보의 현재 봇
https://www.forismatic.com/ - 영어 및 러시아어로 된 임의의 인용문을 생성하는 사이트
작품 설명
사람들의 명언과 농담에 두 모듈을 한번에 추가한 것에 대해 설명하면 엄청나게 큰 글이 나온다.
작업을 두 개의 별도 게시물로 나누기로 결정했습니다.
이 모듈은 팩트 생성기의 복사본이며 데이터 구문 분석 및 기타 설정을 위해 다른 사이트를 사용합니다.
이 모듈은 이전에 사용되지 않았던 스크래퍼 모듈의 기능을 사용합니다.
1) 구문 분석을 위해 페이지 주소에서 사용자의 로케일 사용
2) 다중 요소 선택자
3) 미리 설치된 안티 안티 ddos 헤더 수정
QuoteModule 만들기
새 라이브러리 플러그인 추가
npm run -- nx g @nrwl/nest:lib quotes-generator/server
endy@endy-virtual-machine:~/Projects/current/kaufman-bot$ npm run -- nx g @nrwl/nest:lib quotes-generator/server
> kaufman-bot@0.0.0 nx
> nx "g" "@nrwl/nest:lib" "quotes-generator/server"
CREATE libs/quotes-generator/server/README.md
CREATE libs/quotes-generator/server/.babelrc
CREATE libs/quotes-generator/server/src/index.ts
CREATE libs/quotes-generator/server/tsconfig.json
CREATE libs/quotes-generator/server/tsconfig.lib.json
UPDATE tsconfig.base.json
CREATE libs/quotes-generator/server/project.json
UPDATE workspace.json
CREATE libs/quotes-generator/server/.eslintrc.json
CREATE libs/quotes-generator/server/jest.config.js
CREATE libs/quotes-generator/server/tsconfig.spec.json
CREATE libs/quotes-generator/server/src/lib/quotes-generator-server.module.ts
QuoteGeneratorService 추가
libs/quotes-generator/server/src/lib/quotes-generator-services/quotes-generator.service.ts
import {
BotCommandsEnum,
BotCommandsProvider,
BotCommandsProviderActionMsg,
BotCommandsProviderActionResultType,
BotСommandsToolsService,
} from '@kaufman-bot/core/server';
import { ScraperService } from '@kaufman-bot/html-scraper/server';
import { Injectable } from '@nestjs/common';
@Injectable()
export class QuotesGeneratorService implements BotCommandsProvider {
constructor(
private readonly scraperService: ScraperService,
private readonly botСommandsToolsService: BotСommandsToolsService
) {}
async onHelp<
TMsg extends BotCommandsProviderActionMsg = BotCommandsProviderActionMsg
>(msg: TMsg) {
return await this.scraperService.onHelp(msg);
}
async onMessage<
TMsg extends BotCommandsProviderActionMsg = BotCommandsProviderActionMsg
>(msg: TMsg): Promise<BotCommandsProviderActionResultType<TMsg>> {
let locale = msg.from?.language_code;
if (!locale?.includes('ru') || !locale?.includes('en')) {
locale = 'en';
}
if (
this.botСommandsToolsService.checkCommands(
msg.text,
[...Object.keys(BotCommandsEnum)],
locale
)
) {
const result = await this.scraperService.onMessage(msg);
try {
if (result?.type === 'text') {
return {
type: 'text',
text: result.text.split('\\"').join('"').split('\n').join(' '),
};
}
return result;
} catch (err) {
console.debug(result);
console.error(err, err.stack);
throw err;
}
}
return null;
}
}
QuotesGeneratorModule 추가
libs/quotes-generator/server/src/lib/quotes-generator.module.ts
import {
BotCommandsModule,
BOT_COMMANDS_PROVIDER,
} from '@kaufman-bot/core/server';
import { ScraperModule } from '@kaufman-bot/html-scraper/server';
import { DynamicModule, Module } from '@nestjs/common';
import { getText } from 'class-validator-multi-lang';
import { TranslatesModule } from 'nestjs-translates';
import { QuotesGeneratorService } from './quotes-generator-services/quotes-generator.service';
@Module({
imports: [TranslatesModule, BotCommandsModule],
exports: [TranslatesModule, BotCommandsModule],
})
export class QuotesGeneratorModule {
static forRoot(): DynamicModule {
return {
module: QuotesGeneratorModule,
imports: [
ScraperModule.forRoot({
name: getText('Quotes generator'),
descriptions: getText(
'Command to generate text with a random quotes'
),
usage: [getText('get quote'), getText('quotes help')],
contentSelector:
'forismatic > quote > quotetext, forismatic > quote > quoteauthor',
spyWords: [getText('quotes'), getText('quote')],
removeWords: [getText('get'), getText('please')],
uri: 'https://api.forismatic.com/api/1.0/?method=getQuote&format=xml&lang={{locale}}',
contentCodepage: 'utf8',
headers: [{}],
}),
],
providers: [
{
provide: BOT_COMMANDS_PROVIDER,
useClass: QuotesGeneratorService,
},
],
exports: [ScraperModule],
};
}
}
파일 준비
포 편집기로 모든 단어 번역
모든 사전 목록 보기
필요한 모든 번역 추가
po 사전을 json으로 변환하기 위한 파일 준비
npm run generate
AppModule에 QuotesGeneratorModule 추가
앱/서버/src/app/app.module.ts
@Module({
imports: [
...
QuotesGeneratorModule.forRoot(),
...
],
...
})
export class AppModule {}
텔레그램 봇의 새로운 로직 확인
일반적인 도움말 메시지
영어로 견적 받기
러시아어로 견적 받기
다음 게시물에서는 영어와 러시아어에 대한 농담을 추가하겠습니다...
Reference
이 문제에 관하여(NestJS의 Telegram 봇에서 유명한 사람들의 임의 인용을 생성하기 위한 모듈 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/endykaufman/create-module-for-generate-random-quote-of-famus-people-in-telegram-bot-on-nestjs-2cm4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)