feat: WaitForInputHelper

This commit is contained in:
凌莞 2022-02-17 17:32:30 +08:00
parent 87e8cdd805
commit ad5d2f0a67
No known key found for this signature in database
GPG Key ID: 05F8479BA63A8E92
4 changed files with 53 additions and 12 deletions

View File

@ -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);
}
}

View File

@ -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<number, (event: Api.Message) => 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<Api.Message>(resolve => {
chatId = Number(chatId);
console.log(chatId);
this.map.set(chatId, resolve);
});
}
public cancel(chatId: BigInteger | number | string) {
this.map.delete(Number(chatId));
}
}

View File

@ -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,
});
})();