From ad5d2f0a6700a6f0e8eccf52453d35fcb44d51d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=87=8C=E8=8E=9E?= Date: Thu, 17 Feb 2022 17:32:30 +0800 Subject: [PATCH] feat: WaitForInputHelper --- .idea/{misc.xml => discord.xml} | 0 src/client/Telegram.ts | 22 ++++++++++++++++------ src/helpers/WaitForInputHelper.ts | 30 ++++++++++++++++++++++++++++++ src/index.ts | 13 +++++++------ 4 files changed, 53 insertions(+), 12 deletions(-) rename .idea/{misc.xml => discord.xml} (100%) create mode 100644 src/helpers/WaitForInputHelper.ts diff --git a/.idea/misc.xml b/.idea/discord.xml similarity index 100% rename from .idea/misc.xml rename to .idea/discord.xml diff --git a/src/client/Telegram.ts b/src/client/Telegram.ts index 032aad7..09a1b64 100644 --- a/src/client/Telegram.ts +++ b/src/client/Telegram.ts @@ -4,12 +4,14 @@ import { BotAuthParams, UserAuthParams } from 'telegram/client/auth'; import { NewMessage, NewMessageEvent } from 'telegram/events'; import { EditedMessage, EditedMessageEvent } from 'telegram/events/EditedMessage'; import { DeletedMessage, DeletedMessageEvent } from 'telegram/events/DeletedMessage'; -import { EntityLike } from 'telegram/define'; +import { Entity, EntityLike } from 'telegram/define'; import { SendMessageParams } from 'telegram/client/messages'; import { CustomFile } from 'telegram/client/uploads'; +import WaitForInputHelper from '../helpers/WaitForInputHelper'; export class Telegram { private readonly client: TelegramClient; + private waitForInputHelper: WaitForInputHelper; private constructor(stringSession = '') { this.client = new TelegramClient( @@ -30,6 +32,7 @@ export class Telegram { public static async create(startArgs: UserAuthParams | BotAuthParams, stringSession = '') { const bot = new this(stringSession); await bot.client.start(startArgs); + bot.waitForInputHelper = new WaitForInputHelper(bot); return bot; } @@ -39,8 +42,9 @@ export class Telegram { return bot; } - public addNewMessageEventHandler(handler: (event: NewMessageEvent) => any) { - this.client.addEventHandler(handler, new NewMessage({})); + public addNewMessageEventHandler(handler: (event: Api.Message) => any) { + // 能用的东西基本都在 message 里面,直接调用 event 里的会 undefined + this.client.addEventHandler(event => handler(event.message), new NewMessage({})); } public addEditedMessageEventHandler(handler: (event: EditedMessageEvent) => any) { @@ -52,12 +56,14 @@ export class Telegram { } public async getChat(entity: EntityLike) { - return new TelegramChat(this.client, await this.client.getInputEntity(entity)); + return new TelegramChat(this.client, await this.client.getEntity(entity), this.waitForInputHelper); } } export class TelegramChat { - constructor(private client: TelegramClient, private entity: Api.TypeInputPeer) { + constructor(private client: TelegramClient, + private entity: Entity, + private waitForInputHelper: WaitForInputHelper) { } public async sendMessage(params: SendMessageParams) { @@ -71,8 +77,12 @@ export class TelegramChat { file: photo, workers: 1, }), - ttlSeconds + ttlSeconds, }); return await this.client.sendMessage(this.entity, params); } + + public async waitForInput() { + return this.waitForInputHelper.waitForInput(this.entity.id); + } } diff --git a/src/helpers/WaitForInputHelper.ts b/src/helpers/WaitForInputHelper.ts new file mode 100644 index 0000000..befa733 --- /dev/null +++ b/src/helpers/WaitForInputHelper.ts @@ -0,0 +1,30 @@ +import { Telegram } from '../client/Telegram'; +import { BigInteger } from 'big-integer'; +import { Api } from 'telegram'; + +export default class WaitForInputHelper { + // BugInteger 好像不能用 === 判断,Telegram 的 ID 还没有超过 number + private map = new Map any>(); + + constructor(private tg: Telegram) { + tg.addNewMessageEventHandler(e => { + const handler = this.map.get(Number(e.chat.id)); + if (handler) { + this.map.delete(Number(e.chat.id)); + handler(e); + } + }); + } + + public waitForInput(chatId: BigInteger | number) { + return new Promise(resolve => { + chatId = Number(chatId); + console.log(chatId); + this.map.set(chatId, resolve); + }); + } + + public cancel(chatId: BigInteger | number | string) { + this.map.delete(Number(chatId)); + } +} diff --git a/src/index.ts b/src/index.ts index 3af6bea..0e6ebb3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,14 +1,15 @@ import { Telegram } from './client/Telegram'; -import { CustomFile } from 'telegram/client/uploads'; -import fs from 'fs'; (async () => { const bot = await Telegram.create({ botAuthToken: process.env.TG_BOT_TOKEN, }); const me = await bot.getChat('@Clansty'); - await me.sendSelfDestructingPhoto({}, - new CustomFile('test.jpg', - fs.statSync('/Users/clansty/Pictures/stickers/0.png').size, - '/Users/clansty/Pictures/stickers/0.png'), 10); + const a = await me.waitForInput(); + console.log(a); + const b = await me.waitForInput(); + console.log(b); + await me.sendMessage({ + message: a.message + b.message, + }); })();