diff --git a/src/api/http/index.ts b/src/api/http/index.ts index b34744f..d2faae8 100644 --- a/src/api/http/index.ts +++ b/src/api/http/index.ts @@ -11,8 +11,8 @@ import { corsMiddleware, errorMiddleware } from "./middleware"; import { WebhookConfig } from "../../service/telegram/types"; export class HttpApi { - app: Express; - webhook: WebhookConfig; + app!: Express; + webhook!: WebhookConfig; constructor( private props: HttpConfig, diff --git a/src/api/telegram/index.ts b/src/api/telegram/index.ts index 69df60e..0b376a1 100644 --- a/src/api/telegram/index.ts +++ b/src/api/telegram/index.ts @@ -1,4 +1,6 @@ import { TelegramService } from "../../service/telegram"; +import axios from "axios"; +import logger from "../../service/logger"; export class TelegramApi { constructor(private telegram: TelegramService) {} @@ -16,4 +18,25 @@ export class TelegramApi { "CAACAgIAAxkBAAIB6F82KSeJBEFer895bb7mFI7_GzYoAAISAAOwODIrOXeFNb5v4aEaBA" ); } + + /** + * Probes webhook url and falls back to polling mode on error + */ + public probe = async () => { + if (!this.telegram.webhook.enabled || !this.telegram.webhook.url) { + return; + } + + try { + await axios.get(this.telegram.webhook.url); + logger.info( + `probing telegram webhook at ${this.telegram.webhook.url} succeeded` + ); + } catch (e) { + logger.warn( + `probing telegram webhook at ${this.telegram.webhook.url} failed, falling back to polling mode` + ); + await this.telegram.bot.launch(); + } + }; } diff --git a/src/index.ts b/src/index.ts index 56c7d78..f00c594 100644 --- a/src/index.ts +++ b/src/index.ts @@ -16,10 +16,15 @@ async function main() { const telegram = new TelegramService(config.telegram); const vkService = new VkService(config.vk, telegram, config.templates, db); - const telegramApi = new TelegramApi(telegram).listen(); + const telegramApi = new TelegramApi(telegram); + telegramApi.listen(); + await telegram.start(); - const httpApi = new HttpApi(config.http, telegram, vkService).listen(); + const httpApi = new HttpApi(config.http, telegram, vkService); + + await httpApi.listen(); + await telegramApi.probe(); } catch (e) { logger.error(e.message); } diff --git a/templates/post_new.md b/templates/post_new.md index b7b467b..19165f7 100644 --- a/templates/post_new.md +++ b/templates/post_new.md @@ -10,9 +10,11 @@ likes: ['😱','🤔','😃'] --- {{!-- + use handlebars template here available variables are: text, user, group, type - (see PostNewHandler) + (see PostNewHandler) + --}} {{#ifEq type 'suggest'}} Предложка: