From 05d7ae7b12a3750b1fbc29bd719724a1f3647738 Mon Sep 17 00:00:00 2001 From: Aleksandr Bukhalo Date: Fri, 14 Aug 2020 01:21:33 +0300 Subject: [PATCH 1/6] feat: add new @Update decorator --- lib/decorators/index.ts | 1 + lib/decorators/update.decorator.ts | 8 ++++++++ lib/telegraf.constants.ts | 1 + 3 files changed, 10 insertions(+) create mode 100644 lib/decorators/update.decorator.ts diff --git a/lib/decorators/index.ts b/lib/decorators/index.ts index 37dcea4..76f6f1a 100644 --- a/lib/decorators/index.ts +++ b/lib/decorators/index.ts @@ -14,3 +14,4 @@ export * from './telegraf-cashtag.decorator'; export * from './telegraf-action.decorator'; export * from './telegraf-inline-query.decorator'; export * from './telegraf-game-query.decorator'; +export * from './update.decorator'; diff --git a/lib/decorators/update.decorator.ts b/lib/decorators/update.decorator.ts new file mode 100644 index 0000000..985bb8e --- /dev/null +++ b/lib/decorators/update.decorator.ts @@ -0,0 +1,8 @@ +import { SetMetadata } from '@nestjs/common'; +import { DECORATORS } from '../telegraf.constants'; + +/** + * `@Update` decorator, it's like NestJS `@Controller` decorator, + * only for Telegram Bot API updates. + */ +export const Update = (): ClassDecorator => SetMetadata(DECORATORS.UPDATE, {}); diff --git a/lib/telegraf.constants.ts b/lib/telegraf.constants.ts index 59f27a2..b21ebd4 100644 --- a/lib/telegraf.constants.ts +++ b/lib/telegraf.constants.ts @@ -18,4 +18,5 @@ export const DECORATORS = { ACTION: `${DECORATORS_PREFIX}/ACTION`, INLINE_QUERY: `${DECORATORS_PREFIX}/INLINE_QUERY`, GAME_QUERY: `${DECORATORS_PREFIX}/GAME_QUERY`, + UPDATE: `${DECORATORS_PREFIX}/UPDATE`, }; From 0f06e4b930a218eb6c628f2101ee53e70900f8fb Mon Sep 17 00:00:00 2001 From: Aleksandr Bukhalo Date: Fri, 14 Aug 2020 12:42:57 +0300 Subject: [PATCH 2/6] feat: remove "Telegraf" prefix from decorator names --- README.md | 18 ++++---- ...ction.decorator.ts => action.decorator.ts} | 19 +++++--- lib/decorators/cashtag.decorator.ts | 25 +++++++++++ lib/decorators/command.decorator.ts | 25 +++++++++++ lib/decorators/entity.decorator.ts | 30 +++++++++++++ lib/decorators/game-query.decorator.ts | 19 ++++++++ lib/decorators/hashtag.decorator.ts | 25 +++++++++++ ...-hears.decorator.ts => hears.decorator.ts} | 19 +++++--- lib/decorators/help.decorator.ts | 19 ++++++++ lib/decorators/index.ts | 30 ++++++------- ...decorator.ts => inline-query.decorator.ts} | 19 +++++--- lib/decorators/mention.decorator.ts | 25 +++++++++++ ...legraf-on.decorator.ts => on.decorator.ts} | 19 +++++--- lib/decorators/phone.decorator.ts | 25 +++++++++++ lib/decorators/settings.decorator.ts | 19 ++++++++ lib/decorators/start.decorator.ts | 19 ++++++++ lib/decorators/telegraf-cashtag.decorator.ts | 20 --------- lib/decorators/telegraf-command.decorator.ts | 20 --------- lib/decorators/telegraf-entity.decorator.ts | 23 ---------- .../telegraf-game-query.decorator.ts | 11 ----- lib/decorators/telegraf-hashtag.decorator.ts | 20 --------- lib/decorators/telegraf-help.decorator.ts | 11 ----- lib/decorators/telegraf-mention.decorator.ts | 20 --------- lib/decorators/telegraf-phone.decorator.ts | 18 -------- lib/decorators/telegraf-settings.decorator.ts | 11 ----- lib/decorators/telegraf-start.decorator.ts | 11 ----- lib/decorators/telegraf-use.decorator.ts | 11 ----- lib/decorators/use.decorator.ts | 19 ++++++++ lib/telegraf-metadata.accessor.ts | 43 +++++++++---------- lib/telegraf.explorer.ts | 40 ++++++++--------- 30 files changed, 363 insertions(+), 270 deletions(-) rename lib/decorators/{telegraf-action.decorator.ts => action.decorator.ts} (53%) create mode 100644 lib/decorators/cashtag.decorator.ts create mode 100644 lib/decorators/command.decorator.ts create mode 100644 lib/decorators/entity.decorator.ts create mode 100644 lib/decorators/game-query.decorator.ts create mode 100644 lib/decorators/hashtag.decorator.ts rename lib/decorators/{telegraf-hears.decorator.ts => hears.decorator.ts} (54%) create mode 100644 lib/decorators/help.decorator.ts rename lib/decorators/{telegraf-inline-query.decorator.ts => inline-query.decorator.ts} (51%) create mode 100644 lib/decorators/mention.decorator.ts rename lib/decorators/{telegraf-on.decorator.ts => on.decorator.ts} (57%) create mode 100644 lib/decorators/phone.decorator.ts create mode 100644 lib/decorators/settings.decorator.ts create mode 100644 lib/decorators/start.decorator.ts delete mode 100644 lib/decorators/telegraf-cashtag.decorator.ts delete mode 100644 lib/decorators/telegraf-command.decorator.ts delete mode 100644 lib/decorators/telegraf-entity.decorator.ts delete mode 100644 lib/decorators/telegraf-game-query.decorator.ts delete mode 100644 lib/decorators/telegraf-hashtag.decorator.ts delete mode 100644 lib/decorators/telegraf-help.decorator.ts delete mode 100644 lib/decorators/telegraf-mention.decorator.ts delete mode 100644 lib/decorators/telegraf-phone.decorator.ts delete mode 100644 lib/decorators/telegraf-settings.decorator.ts delete mode 100644 lib/decorators/telegraf-start.decorator.ts delete mode 100644 lib/decorators/telegraf-use.decorator.ts create mode 100644 lib/decorators/use.decorator.ts diff --git a/README.md b/README.md index 0a809e8..d06ae7e 100644 --- a/README.md +++ b/README.md @@ -48,31 +48,31 @@ Now let's try to repeat the example from the Telegraf [documentation page](https import { Injectable } from '@nestjs/common'; import { - TelegrafStart, - TelegrafHelp, - TelegrafOn, - TelegrafHears, + Start, + Help, + On, + Hears, Context, } from 'nestjs-telegraf'; @Injectable() export class AppService { - @TelegrafStart() + @Start() start(ctx: Context) { ctx.reply('Welcome'); } - @TelegrafHelp() + @Help() help(ctx: Context) { ctx.reply('Send me a sticker'); } - @TelegrafOn('sticker') + @On('sticker') on(ctx: Context) { ctx.reply('👍'); } - @TelegrafHears('hi') + @Hears('hi') hears(ctx: Context) { ctx.reply('Hey there'); } @@ -213,4 +213,4 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d -This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! \ No newline at end of file +This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! diff --git a/lib/decorators/telegraf-action.decorator.ts b/lib/decorators/action.decorator.ts similarity index 53% rename from lib/decorators/telegraf-action.decorator.ts rename to lib/decorators/action.decorator.ts index 8345f33..a6c7a99 100644 --- a/lib/decorators/telegraf-action.decorator.ts +++ b/lib/decorators/action.decorator.ts @@ -5,18 +5,23 @@ import { Context } from '../interfaces'; export type TelegrafActionTriggers = HearsTriggers; -export interface TelegrafActionMetadata { +export interface ActionOptions { triggers: TelegrafActionTriggers; } /** * Registers middleware for handling callback_data actions with regular expressions. - * @param triggers Triggers * - * https://telegraf.js.org/#/?id=action + * @see https://telegraf.js.org/#/?id=action */ -export function TelegrafAction( - triggers: TelegrafActionTriggers, -): MethodDecorator { +export const Action = (triggers: TelegrafActionTriggers): MethodDecorator => { return SetMetadata(DECORATORS.ACTION, { triggers }); -} +}; + +/** + * Registers middleware for handling callback_data actions with regular expressions. + * + * @see https://telegraf.js.org/#/?id=action + * @deprecated since v2, use Action decorator instead. + */ +export const TelegrafAction = Action; diff --git a/lib/decorators/cashtag.decorator.ts b/lib/decorators/cashtag.decorator.ts new file mode 100644 index 0000000..e85efb3 --- /dev/null +++ b/lib/decorators/cashtag.decorator.ts @@ -0,0 +1,25 @@ +import { SetMetadata } from '@nestjs/common'; +import { DECORATORS } from '../telegraf.constants'; + +export type TelegrafCashtagCashtag = string | string[]; + +export interface CashtagOptions { + cashtag: TelegrafCashtagCashtag; +} + +/** + * Cashtag handling. + * + * @see https://telegraf.js.org/#/?id=cashtag + */ +export const Cashtag = (cashtag: TelegrafCashtagCashtag): MethodDecorator => { + return SetMetadata(DECORATORS.CASHTAG, { cashtag }); +}; + +/** + * Cashtag handling. + * + * @see https://telegraf.js.org/#/?id=cashtag + * @deprecated since v2, use Cashtag decorator instead. + */ +export const TelegrafCashtag = Cashtag; diff --git a/lib/decorators/command.decorator.ts b/lib/decorators/command.decorator.ts new file mode 100644 index 0000000..6100612 --- /dev/null +++ b/lib/decorators/command.decorator.ts @@ -0,0 +1,25 @@ +import { SetMetadata } from '@nestjs/common'; +import { DECORATORS } from '../telegraf.constants'; + +export type TelegrafCommandCommands = string | string[]; + +export interface CommandOptions { + commands: TelegrafCommandCommands; +} + +/** + * Command handling. + * + * @see https://telegraf.js.org/#/?id=command + */ +export const Command = (commands: TelegrafCommandCommands): MethodDecorator => { + return SetMetadata(DECORATORS.COMMAND, { commands }); +}; + +/** + * Command handling. + * + * @see https://telegraf.js.org/#/?id=command + * @deprecated since v2, use Command decorator instead. + */ +export const TelegrafCommand = Command; diff --git a/lib/decorators/entity.decorator.ts b/lib/decorators/entity.decorator.ts new file mode 100644 index 0000000..53be71f --- /dev/null +++ b/lib/decorators/entity.decorator.ts @@ -0,0 +1,30 @@ +import { SetMetadata } from '@nestjs/common'; +import { DECORATORS } from '../telegraf.constants'; + +export type TelegrafEntityEntity = + | string + | string[] + | RegExp + | RegExp[] + | Function; + +export interface EntityOptions { + entity: TelegrafEntityEntity; +} + +/** + * Entity handling. + * + * @see https://telegraf.js.org/#/?id=entity + */ +export const Entity = (entity: TelegrafEntityEntity): MethodDecorator => { + return SetMetadata(DECORATORS.ENTITY, { entity }); +}; + +/** + * Entity handling. + * + * @see https://telegraf.js.org/#/?id=entity + * @deprecated since v2, use Entity decorator instead. + */ +export const TelegrafEntity = Entity; diff --git a/lib/decorators/game-query.decorator.ts b/lib/decorators/game-query.decorator.ts new file mode 100644 index 0000000..c9d240b --- /dev/null +++ b/lib/decorators/game-query.decorator.ts @@ -0,0 +1,19 @@ +import { SetMetadata } from '@nestjs/common'; +import { DECORATORS } from '../telegraf.constants'; + +/** + * Registers middleware for handling callback_data actions with game query. + * + * @see https://telegraf.js.org/#/?id=inlinequery + */ +export const GameQuery = (): MethodDecorator => { + return SetMetadata(DECORATORS.GAME_QUERY, {}); +}; + +/** + * Registers middleware for handling callback_data actions with game query. + * + * @see https://telegraf.js.org/#/?id=inlinequery + * @deprecated since v2, use Action decorator instead. + */ +export const TelegrafGameQuery = GameQuery; diff --git a/lib/decorators/hashtag.decorator.ts b/lib/decorators/hashtag.decorator.ts new file mode 100644 index 0000000..88e03cb --- /dev/null +++ b/lib/decorators/hashtag.decorator.ts @@ -0,0 +1,25 @@ +import { SetMetadata } from '@nestjs/common'; +import { DECORATORS } from '../telegraf.constants'; + +export type TelegrafHashtagHashtag = string | string[]; + +export interface HashtagOptions { + hashtag: TelegrafHashtagHashtag; +} + +/** + * Hashtag handling. + * + * @see https://telegraf.js.org/#/?id=hashtag + */ +export const Hashtag = (hashtag: TelegrafHashtagHashtag): MethodDecorator => { + return SetMetadata(DECORATORS.HASHTAG, { hashtag }); +}; + +/** + * Hashtag handling. + * + * @see https://telegraf.js.org/#/?id=hashtag + * @deprecated since v2, use Hashtag decorator instead. + */ +export const TelegrafHashtag = Hashtag; diff --git a/lib/decorators/telegraf-hears.decorator.ts b/lib/decorators/hears.decorator.ts similarity index 54% rename from lib/decorators/telegraf-hears.decorator.ts rename to lib/decorators/hears.decorator.ts index 4c0a280..ecb7c56 100644 --- a/lib/decorators/telegraf-hears.decorator.ts +++ b/lib/decorators/hears.decorator.ts @@ -5,18 +5,23 @@ import { Context } from '../interfaces'; export type TelegrafHearsTriggers = HearsTriggers; -export interface TelegrafHearsMetadata { +export interface HearsOptions { triggers: TelegrafHearsTriggers; } /** * Registers middleware for handling text messages. - * @param triggers Triggers * - * https://telegraf.js.org/#/?id=hears + * @see https://telegraf.js.org/#/?id=hears */ -export function TelegrafHears( - triggers: TelegrafHearsTriggers, -): MethodDecorator { +export const Hears = (triggers: TelegrafHearsTriggers): MethodDecorator => { return SetMetadata(DECORATORS.HEARS, { triggers: triggers }); -} +}; + +/** + * Registers middleware for handling text messages. + * + * @see https://telegraf.js.org/#/?id=hears + * @deprecated since v2, use Hears decorator instead. + */ +export const TelegrafHears = Hears; diff --git a/lib/decorators/help.decorator.ts b/lib/decorators/help.decorator.ts new file mode 100644 index 0000000..ced12b1 --- /dev/null +++ b/lib/decorators/help.decorator.ts @@ -0,0 +1,19 @@ +import { SetMetadata } from '@nestjs/common'; +import { DECORATORS } from '../telegraf.constants'; + +/** + * Handler for /help command. + * + * @see https://telegraf.js.org/#/?id=help + */ +export const Help = (): MethodDecorator => { + return SetMetadata(DECORATORS.HELP, {}); +}; + +/** + * Handler for /help command. + * + * @see https://telegraf.js.org/#/?id=help + * @deprecated since v2, use Help decorator instead. + */ +export const TelegrafHelp = Help; diff --git a/lib/decorators/index.ts b/lib/decorators/index.ts index 76f6f1a..4b97f06 100644 --- a/lib/decorators/index.ts +++ b/lib/decorators/index.ts @@ -1,17 +1,17 @@ +export * from './action.decorator'; +export * from './cashtag.decorator'; +export * from './command.decorator'; +export * from './entity.decorator'; +export * from './game-query.decorator'; +export * from './hashtag.decorator'; +export * from './hears.decorator'; +export * from './help.decorator'; export * from './inject-bot.decorator'; -export * from './telegraf-use.decorator'; -export * from './telegraf-on.decorator'; -export * from './telegraf-hears.decorator'; -export * from './telegraf-command.decorator'; -export * from './telegraf-start.decorator'; -export * from './telegraf-help.decorator'; -export * from './telegraf-settings.decorator'; -export * from './telegraf-entity.decorator'; -export * from './telegraf-mention.decorator'; -export * from './telegraf-phone.decorator'; -export * from './telegraf-hashtag.decorator'; -export * from './telegraf-cashtag.decorator'; -export * from './telegraf-action.decorator'; -export * from './telegraf-inline-query.decorator'; -export * from './telegraf-game-query.decorator'; +export * from './inline-query.decorator'; +export * from './mention.decorator'; +export * from './on.decorator'; +export * from './phone.decorator'; +export * from './settings.decorator'; +export * from './start.decorator'; export * from './update.decorator'; +export * from './use.decorator'; diff --git a/lib/decorators/telegraf-inline-query.decorator.ts b/lib/decorators/inline-query.decorator.ts similarity index 51% rename from lib/decorators/telegraf-inline-query.decorator.ts rename to lib/decorators/inline-query.decorator.ts index 1a4cc4f..4345d1b 100644 --- a/lib/decorators/telegraf-inline-query.decorator.ts +++ b/lib/decorators/inline-query.decorator.ts @@ -3,18 +3,25 @@ import { DECORATORS } from '../telegraf.constants'; export type TelegrafInlineQueryTriggers = string | string[] | RegExp | RegExp[]; -export interface TelegrafInlineQueryMetadata { +export interface InlineQueryOptions { triggers: TelegrafInlineQueryTriggers; } /** * Registers middleware for handling inline_query actions with regular expressions. - * @param triggers Triggers * - * https://telegraf.js.org/#/?id=inlinequery + * @see https://telegraf.js.org/#/?id=inlinequery */ -export function TelegrafInlineQuery( +export const InlineQuery = ( triggers: TelegrafInlineQueryTriggers, -): MethodDecorator { +): MethodDecorator => { return SetMetadata(DECORATORS.INLINE_QUERY, { triggers }); -} +}; + +/** + * Registers middleware for handling inline_query actions with regular expressions. + * + * @see https://telegraf.js.org/#/?id=inlinequery + * @deprecated since v2, use InlineQuery decorator instead. + */ +export const TelegrafInlineQuery = InlineQuery; diff --git a/lib/decorators/mention.decorator.ts b/lib/decorators/mention.decorator.ts new file mode 100644 index 0000000..7611c8e --- /dev/null +++ b/lib/decorators/mention.decorator.ts @@ -0,0 +1,25 @@ +import { SetMetadata } from '@nestjs/common'; +import { DECORATORS } from '../telegraf.constants'; + +export type TelegrafMentionUsername = string | string[]; + +export interface MentionOptions { + username: TelegrafMentionUsername; +} + +/** + * Mention handling. + * + * @see https://telegraf.js.org/#/?id=mention + */ +export const Mention = (username: TelegrafMentionUsername): MethodDecorator => { + return SetMetadata(DECORATORS.MENTION, { username }); +}; + +/** + * Mention handling. + * + * @see https://telegraf.js.org/#/?id=mention + * @deprecated since v2, use Mention decorator instead. + */ +export const TelegrafMention = Mention; diff --git a/lib/decorators/telegraf-on.decorator.ts b/lib/decorators/on.decorator.ts similarity index 57% rename from lib/decorators/telegraf-on.decorator.ts rename to lib/decorators/on.decorator.ts index 4fe3ac0..bc36c94 100644 --- a/lib/decorators/telegraf-on.decorator.ts +++ b/lib/decorators/on.decorator.ts @@ -8,18 +8,23 @@ export type TelegrafOnUpdateTypes = | MessageSubTypes | MessageSubTypes[]; -export interface TelegrafOnMetadata { +export interface OnOptions { updateTypes: TelegrafOnUpdateTypes; } /** * Registers middleware for provided update type. - * @param updateTypes Update type * - * https://telegraf.js.org/#/?id=on + * @see https://telegraf.js.org/#/?id=on */ -export function TelegrafOn( - updateTypes: TelegrafOnUpdateTypes, -): MethodDecorator { +export const On = (updateTypes: TelegrafOnUpdateTypes): MethodDecorator => { return SetMetadata(DECORATORS.ON, { updateTypes: updateTypes }); -} +}; + +/** + * Registers middleware for provided update type. + * + * @see https://telegraf.js.org/#/?id=on + * @deprecated since v2, use On decorator instead. + */ +export const TelegrafOn = On; diff --git a/lib/decorators/phone.decorator.ts b/lib/decorators/phone.decorator.ts new file mode 100644 index 0000000..90e6342 --- /dev/null +++ b/lib/decorators/phone.decorator.ts @@ -0,0 +1,25 @@ +import { SetMetadata } from '@nestjs/common'; +import { DECORATORS } from '../telegraf.constants'; + +export type TelegrafPhonePhone = string | string[]; + +export interface PhoneOptions { + phone: TelegrafPhonePhone; +} + +/** + * Phone number handling. + * + * @see https://telegraf.js.org/#/?id=phone + */ +export const Phone = (phone: TelegrafPhonePhone): MethodDecorator => { + return SetMetadata(DECORATORS.PHONE, { phone }); +}; + +/** + * Phone number handling. + * + * @see https://telegraf.js.org/#/?id=phone + * @deprecated since v2, use Phone decorator instead. + */ +export const TelegrafPhone = Phone; diff --git a/lib/decorators/settings.decorator.ts b/lib/decorators/settings.decorator.ts new file mode 100644 index 0000000..674af29 --- /dev/null +++ b/lib/decorators/settings.decorator.ts @@ -0,0 +1,19 @@ +import { SetMetadata } from '@nestjs/common'; +import { DECORATORS } from '../telegraf.constants'; + +/** + * Handler for /settings command. + * + * @see https://telegraf.js.org/#/?id=settings + */ +export const Settings = (): MethodDecorator => { + return SetMetadata(DECORATORS.SETTINGS, {}); +}; + +/** + * Handler for /settings command. + * + * @see https://telegraf.js.org/#/?id=settings + * @deprecated since v2, use Settings decorator instead. + */ +export const TelegrafSettings = Settings; diff --git a/lib/decorators/start.decorator.ts b/lib/decorators/start.decorator.ts new file mode 100644 index 0000000..d11658e --- /dev/null +++ b/lib/decorators/start.decorator.ts @@ -0,0 +1,19 @@ +import { SetMetadata } from '@nestjs/common'; +import { DECORATORS } from '../telegraf.constants'; + +/** + * Handler for /start command. + * + * @see https://telegraf.js.org/#/?id=start + */ +export const Start = (): MethodDecorator => { + return SetMetadata(DECORATORS.START, {}); +}; + +/** + * Handler for /start command. + * + * @see https://telegraf.js.org/#/?id=start + * @deprecated since v2, use Start decorator instead. + */ +export const TelegrafStart = Start; diff --git a/lib/decorators/telegraf-cashtag.decorator.ts b/lib/decorators/telegraf-cashtag.decorator.ts deleted file mode 100644 index 136c8c8..0000000 --- a/lib/decorators/telegraf-cashtag.decorator.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { SetMetadata } from '@nestjs/common'; -import { DECORATORS } from '../telegraf.constants'; - -export type TelegrafCashtagCashtag = string | string[]; - -export interface TelegrafCashtagMetadata { - cashtag: TelegrafCashtagCashtag; -} - -/** - * Cashtag handling. - * @param cashtag Cashtag - * - * https://telegraf.js.org/#/?id=cashtag - */ -export function TelegrafCashtag( - cashtag: TelegrafCashtagCashtag, -): MethodDecorator { - return SetMetadata(DECORATORS.CASHTAG, { cashtag }); -} diff --git a/lib/decorators/telegraf-command.decorator.ts b/lib/decorators/telegraf-command.decorator.ts deleted file mode 100644 index 7f1570c..0000000 --- a/lib/decorators/telegraf-command.decorator.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { SetMetadata } from '@nestjs/common'; -import { DECORATORS } from '../telegraf.constants'; - -export type TelegrafCommandCommands = string | string[]; - -export interface TelegrafCommandMetadata { - commands: TelegrafCommandCommands; -} - -/** - * Command handling. - * @param commands Commands - * - * https://telegraf.js.org/#/?id=command - */ -export function TelegrafCommand( - commands: TelegrafCommandCommands, -): MethodDecorator { - return SetMetadata(DECORATORS.COMMAND, { commands }); -} diff --git a/lib/decorators/telegraf-entity.decorator.ts b/lib/decorators/telegraf-entity.decorator.ts deleted file mode 100644 index b32c173..0000000 --- a/lib/decorators/telegraf-entity.decorator.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { SetMetadata } from '@nestjs/common'; -import { DECORATORS } from '../telegraf.constants'; - -export type TelegrafEntityEntity = - | string - | string[] - | RegExp - | RegExp[] - | Function; - -export interface TelegrafEntityMetadata { - entity: TelegrafEntityEntity; -} - -/** - * Entity handling. - * @param entity Entity name - * - * https://telegraf.js.org/#/?id=entity - */ -export function TelegrafEntity(entity: TelegrafEntityEntity): MethodDecorator { - return SetMetadata(DECORATORS.ENTITY, { entity }); -} diff --git a/lib/decorators/telegraf-game-query.decorator.ts b/lib/decorators/telegraf-game-query.decorator.ts deleted file mode 100644 index 8439345..0000000 --- a/lib/decorators/telegraf-game-query.decorator.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { SetMetadata } from '@nestjs/common'; -import { DECORATORS } from '../telegraf.constants'; - -/** - * Registers middleware for handling callback_data actions with game query. - * - * https://telegraf.js.org/#/?id=inlinequery - */ -export function TelegrafGameQuery(): MethodDecorator { - return SetMetadata(DECORATORS.GAME_QUERY, {}); -} diff --git a/lib/decorators/telegraf-hashtag.decorator.ts b/lib/decorators/telegraf-hashtag.decorator.ts deleted file mode 100644 index 3265213..0000000 --- a/lib/decorators/telegraf-hashtag.decorator.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { SetMetadata } from '@nestjs/common'; -import { DECORATORS } from '../telegraf.constants'; - -export type TelegrafHashtagHashtag = string | string[]; - -export interface TelegrafHashtagMetadata { - hashtag: TelegrafHashtagHashtag; -} - -/** - * Hashtag handling. - * @param hashtag Hashtag - * - * https://telegraf.js.org/#/?id=hashtag - */ -export function TelegrafHashtag( - hashtag: TelegrafHashtagHashtag, -): MethodDecorator { - return SetMetadata(DECORATORS.HASHTAG, { hashtag }); -} diff --git a/lib/decorators/telegraf-help.decorator.ts b/lib/decorators/telegraf-help.decorator.ts deleted file mode 100644 index 7bade62..0000000 --- a/lib/decorators/telegraf-help.decorator.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { SetMetadata } from '@nestjs/common'; -import { DECORATORS } from '../telegraf.constants'; - -/** - * Handler for /help command. - * - * https://telegraf.js.org/#/?id=help - */ -export function TelegrafHelp(): MethodDecorator { - return SetMetadata(DECORATORS.HELP, {}); -} diff --git a/lib/decorators/telegraf-mention.decorator.ts b/lib/decorators/telegraf-mention.decorator.ts deleted file mode 100644 index 90dbc6b..0000000 --- a/lib/decorators/telegraf-mention.decorator.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { SetMetadata } from '@nestjs/common'; -import { DECORATORS } from '../telegraf.constants'; - -export type TelegrafMentionUsername = string | string[]; - -export interface TelegrafMentionMetadata { - username: TelegrafMentionUsername; -} - -/** - * Mention handling. - * @param username Username - * - * https://telegraf.js.org/#/?id=mention - */ -export function TelegrafMention( - username: TelegrafMentionUsername, -): MethodDecorator { - return SetMetadata(DECORATORS.MENTION, { username }); -} diff --git a/lib/decorators/telegraf-phone.decorator.ts b/lib/decorators/telegraf-phone.decorator.ts deleted file mode 100644 index 8182150..0000000 --- a/lib/decorators/telegraf-phone.decorator.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { SetMetadata } from '@nestjs/common'; -import { DECORATORS } from '../telegraf.constants'; - -export type TelegrafPhonePhone = string | string[]; - -export interface TelegrafPhoneMetadata { - phone: TelegrafPhonePhone; -} - -/** - * Phone number handling. - * @param phone Phone number - * - * https://telegraf.js.org/#/?id=phone - */ -export function TelegrafPhone(phone: TelegrafPhonePhone): MethodDecorator { - return SetMetadata(DECORATORS.PHONE, { phone }); -} diff --git a/lib/decorators/telegraf-settings.decorator.ts b/lib/decorators/telegraf-settings.decorator.ts deleted file mode 100644 index aed3741..0000000 --- a/lib/decorators/telegraf-settings.decorator.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { SetMetadata } from '@nestjs/common'; -import { DECORATORS } from '../telegraf.constants'; - -/** - * Handler for /settings command. - * - * https://telegraf.js.org/#/?id=settings - */ -export function TelegrafSettings(): MethodDecorator { - return SetMetadata(DECORATORS.SETTINGS, {}); -} diff --git a/lib/decorators/telegraf-start.decorator.ts b/lib/decorators/telegraf-start.decorator.ts deleted file mode 100644 index 3e0c820..0000000 --- a/lib/decorators/telegraf-start.decorator.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { SetMetadata } from '@nestjs/common'; -import { DECORATORS } from '../telegraf.constants'; - -/** - * Handler for /start command. - * - * https://telegraf.js.org/#/?id=start - */ -export function TelegrafStart(): MethodDecorator { - return SetMetadata(DECORATORS.START, {}); -} diff --git a/lib/decorators/telegraf-use.decorator.ts b/lib/decorators/telegraf-use.decorator.ts deleted file mode 100644 index 2ff0dd7..0000000 --- a/lib/decorators/telegraf-use.decorator.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { SetMetadata } from '@nestjs/common'; -import { DECORATORS } from '../telegraf.constants'; - -/** - * Registers a middleware. - * - * https://telegraf.js.org/#/?id=use - */ -export function TelegrafUse(): MethodDecorator { - return SetMetadata(DECORATORS.USE, {}); -} diff --git a/lib/decorators/use.decorator.ts b/lib/decorators/use.decorator.ts new file mode 100644 index 0000000..8c47461 --- /dev/null +++ b/lib/decorators/use.decorator.ts @@ -0,0 +1,19 @@ +import { SetMetadata } from '@nestjs/common'; +import { DECORATORS } from '../telegraf.constants'; + +/** + * Registers a middleware. + * + * @see https://telegraf.js.org/#/?id=use + */ +export const Use = (): MethodDecorator => { + return SetMetadata(DECORATORS.USE, {}); +}; + +/** + * Registers a middleware. + * + * @see https://telegraf.js.org/#/?id=use + * @deprecated since v2, use Use decorator instead. + */ +export const TelegrafUse = Use; diff --git a/lib/telegraf-metadata.accessor.ts b/lib/telegraf-metadata.accessor.ts index b35b8cf..26ab53e 100644 --- a/lib/telegraf-metadata.accessor.ts +++ b/lib/telegraf-metadata.accessor.ts @@ -1,17 +1,16 @@ import { Injectable, Type } from '@nestjs/common'; import { Reflector } from '@nestjs/core'; import { - TelegrafActionMetadata, - TelegrafCashtagMetadata, - TelegrafCommandMetadata, - TelegrafEntityMetadata, - TelegrafHashtagMetadata, - TelegrafHearsMetadata, - TelegrafInlineQueryMetadata, - TelegrafMentionMetadata, - TelegrafOnMetadata, - TelegrafPhoneMetadata, - TelegrafStart, + ActionOptions, + CashtagOptions, + CommandOptions, + EntityOptions, + HashtagOptions, + HearsOptions, + InlineQueryOptions, + MentionOptions, + OnOptions, + PhoneOptions, } from './decorators'; import { DECORATORS } from './telegraf.constants'; @@ -33,9 +32,7 @@ export class TelegrafMetadataAccessor { return !!this.reflector.get(DECORATORS.ON, target); } - getTelegrafOnMetadata( - target: Type | Function, - ): TelegrafOnMetadata | undefined { + getTelegrafOnMetadata(target: Type | Function): OnOptions | undefined { return this.reflector.get(DECORATORS.ON, target); } @@ -48,7 +45,7 @@ export class TelegrafMetadataAccessor { getTelegrafHearsMetadata( target: Type | Function, - ): TelegrafHearsMetadata | undefined { + ): HearsOptions | undefined { return this.reflector.get(DECORATORS.HEARS, target); } @@ -61,7 +58,7 @@ export class TelegrafMetadataAccessor { getTelegrafCommandMetadata( target: Type | Function, - ): TelegrafCommandMetadata | undefined { + ): CommandOptions | undefined { return this.reflector.get(DECORATORS.COMMAND, target); } @@ -95,7 +92,7 @@ export class TelegrafMetadataAccessor { getTelegrafEntityMetadata( target: Type | Function, - ): TelegrafEntityMetadata | undefined { + ): EntityOptions | undefined { return this.reflector.get(DECORATORS.ENTITY, target); } @@ -108,7 +105,7 @@ export class TelegrafMetadataAccessor { getTelegrafMentionMetadata( target: Type | Function, - ): TelegrafMentionMetadata | undefined { + ): MentionOptions | undefined { return this.reflector.get(DECORATORS.MENTION, target); } @@ -121,7 +118,7 @@ export class TelegrafMetadataAccessor { getTelegrafPhoneMetadata( target: Type | Function, - ): TelegrafPhoneMetadata | undefined { + ): PhoneOptions | undefined { return this.reflector.get(DECORATORS.PHONE, target); } @@ -134,7 +131,7 @@ export class TelegrafMetadataAccessor { getTelegrafHashtagMetadata( target: Type | Function, - ): TelegrafHashtagMetadata | undefined { + ): HashtagOptions | undefined { return this.reflector.get(DECORATORS.HASHTAG, target); } @@ -147,7 +144,7 @@ export class TelegrafMetadataAccessor { getTelegrafCashtagMetadata( target: Type | Function, - ): TelegrafCashtagMetadata | undefined { + ): CashtagOptions | undefined { return this.reflector.get(DECORATORS.CASHTAG, target); } @@ -160,7 +157,7 @@ export class TelegrafMetadataAccessor { getTelegrafActionMetadata( target: Type | Function, - ): TelegrafActionMetadata | undefined { + ): ActionOptions | undefined { return this.reflector.get(DECORATORS.ACTION, target); } @@ -173,7 +170,7 @@ export class TelegrafMetadataAccessor { getTelegrafInlineQueryMetadata( target: Type | Function, - ): TelegrafInlineQueryMetadata | undefined { + ): InlineQueryOptions | undefined { return this.reflector.get(DECORATORS.INLINE_QUERY, target); } diff --git a/lib/telegraf.explorer.ts b/lib/telegraf.explorer.ts index 49292f7..67a0961 100644 --- a/lib/telegraf.explorer.ts +++ b/lib/telegraf.explorer.ts @@ -6,16 +6,16 @@ import { TelegrafMetadataAccessor } from './telegraf-metadata.accessor'; import { TelegrafProvider } from './telegraf.provider'; import { TELEGRAF_PROVIDER } from './telegraf.constants'; import { - TelegrafActionMetadata, - TelegrafCashtagMetadata, - TelegrafCommandMetadata, - TelegrafEntityMetadata, - TelegrafHashtagMetadata, - TelegrafHearsMetadata, - TelegrafInlineQueryMetadata, - TelegrafMentionMetadata, - TelegrafOnMetadata, - TelegrafPhoneMetadata, + ActionOptions, + CashtagOptions, + CommandOptions, + EntityOptions, + HashtagOptions, + HearsOptions, + InlineQueryOptions, + MentionOptions, + OnOptions, + PhoneOptions, } from './decorators'; @Injectable() @@ -127,7 +127,7 @@ export class TelegrafExplorer implements OnModuleInit { instance: object, key: string, telegraf: TelegrafProvider, - metadata: TelegrafOnMetadata, + metadata: OnOptions, ) { telegraf.on(metadata.updateTypes, instance[key].bind(instance)); } @@ -136,7 +136,7 @@ export class TelegrafExplorer implements OnModuleInit { instance: object, key: string, telegraf: TelegrafProvider, - metadata: TelegrafHearsMetadata, + metadata: HearsOptions, ) { telegraf.hears(metadata.triggers, instance[key].bind(instance)); } @@ -145,7 +145,7 @@ export class TelegrafExplorer implements OnModuleInit { instance: object, key: string, telegraf: TelegrafProvider, - metadata: TelegrafCommandMetadata, + metadata: CommandOptions, ) { telegraf.command(metadata.commands, instance[key].bind(instance)); } @@ -179,7 +179,7 @@ export class TelegrafExplorer implements OnModuleInit { instance: object, key: string, telegraf: TelegrafProvider, - metadata: TelegrafEntityMetadata, + metadata: EntityOptions, ) { // @ts-ignore telegraf.entity(metadata.entity, instance[key].bind(instance)); @@ -189,7 +189,7 @@ export class TelegrafExplorer implements OnModuleInit { instance: object, key: string, telegraf: TelegrafProvider, - metadata: TelegrafMentionMetadata, + metadata: MentionOptions, ) { // @ts-ignore telegraf.mention(metadata.username, instance[key].bind(instance)); @@ -199,7 +199,7 @@ export class TelegrafExplorer implements OnModuleInit { instance: object, key: string, telegraf: TelegrafProvider, - metadata: TelegrafPhoneMetadata, + metadata: PhoneOptions, ) { // @ts-ignore telegraf.phone(metadata.phone, instance[key].bind(instance)); @@ -209,7 +209,7 @@ export class TelegrafExplorer implements OnModuleInit { instance: object, key: string, telegraf: TelegrafProvider, - metadata: TelegrafHashtagMetadata, + metadata: HashtagOptions, ) { // @ts-ignore telegraf.hashtag(metadata.hashtag, instance[key].bind(instance)); @@ -219,7 +219,7 @@ export class TelegrafExplorer implements OnModuleInit { instance: object, key: string, telegraf: TelegrafProvider, - metadata: TelegrafCashtagMetadata, + metadata: CashtagOptions, ) { // @ts-ignore telegraf.cashtag(metadata.cashtag, instance[key].bind(instance)); @@ -229,7 +229,7 @@ export class TelegrafExplorer implements OnModuleInit { instance: object, key: string, telegraf: TelegrafProvider, - metadata: TelegrafActionMetadata, + metadata: ActionOptions, ) { telegraf.action(metadata.triggers, instance[key].bind(instance)); } @@ -238,7 +238,7 @@ export class TelegrafExplorer implements OnModuleInit { instance: object, key: string, telegraf: TelegrafProvider, - metadata: TelegrafInlineQueryMetadata, + metadata: InlineQueryOptions, ) { // @ts-ignore telegraf.inlineQuery(metadata.triggers, instance[key].bind(instance)); From 18928f02b9e97c0728338ac4d1e457a350895dc5 Mon Sep 17 00:00:00 2001 From: Aleksandr Bukhalo Date: Fri, 14 Aug 2020 13:55:57 +0300 Subject: [PATCH 3/6] chore: bump version on v1.2.2 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 432f475..55a1068 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "nestjs-telegraf", - "version": "1.2.1", + "version": "1.2.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 148c811..f0ae6de 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "nestjs-telegraf", - "version": "1.2.1", + "version": "1.2.2", "description": "Telegraf module for NestJS", "keywords": [ "nest", From c04794d9ce3890c57d0eea26bea3e1b111f19d03 Mon Sep 17 00:00:00 2001 From: Aleksandr Bukhalo Date: Fri, 14 Aug 2020 14:01:39 +0300 Subject: [PATCH 4/6] fix: allow comments for jsdoc/tsdoc --- tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index c5f6696..bb13608 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,7 +3,7 @@ "module": "commonjs", "declaration": true, "noImplicitAny": false, - "removeComments": true, + "removeComments": false, "noLib": false, "emitDecoratorMetadata": true, "experimentalDecorators": true, From 668aa908a50c66df94ea25dfad9684e27377e681 Mon Sep 17 00:00:00 2001 From: Aleksandr Bukhalo Date: Fri, 14 Aug 2020 14:13:00 +0300 Subject: [PATCH 5/6] fix(deps): add missing dependencies --- lib/index.ts | 1 + package-lock.json | 9 +++++++++ package.json | 1 + 3 files changed, 11 insertions(+) diff --git a/lib/index.ts b/lib/index.ts index deb2848..39b657d 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -4,6 +4,7 @@ export * as BaseScene from 'telegraf/scenes/base'; export * as session from 'telegraf/session'; export * as Stage from 'telegraf/stage'; export * as WizardScene from 'telegraf/scenes/wizard'; +export * as Extra from 'telegraf/extra'; export * from './decorators'; export * from './interfaces'; diff --git a/package-lock.json b/package-lock.json index 55a1068..c5abb98 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2397,6 +2397,15 @@ "glob": "^7.1.3" } }, + "rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, "sandwich-stream": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/sandwich-stream/-/sandwich-stream-2.0.2.tgz", diff --git a/package.json b/package.json index f0ae6de..ba44009 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ "lint-staged": "10.2.11", "prettier": "2.0.5", "reflect-metadata": "0.1.13", + "rxjs": "6.6.2", "typescript": "3.9.7" }, "peerDependencies": { From 8375d1af92be2931083794f03ce9b960a6d9ffc5 Mon Sep 17 00:00:00 2001 From: Aleksandr Bukhalo Date: Fri, 14 Aug 2020 14:27:36 +0300 Subject: [PATCH 6/6] chore: update versions in accordance with SemVer --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index c5abb98..151247e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "nestjs-telegraf", - "version": "1.2.2", + "version": "1.3.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index ba44009..cef0703 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "nestjs-telegraf", - "version": "1.2.2", + "version": "1.3.0", "description": "Telegraf module for NestJS", "keywords": [ "nest",