mirror of https://github.com/Nofated095/Q2TG.git
feat: WaitForInputHelper
This commit is contained in:
parent
87e8cdd805
commit
ad5d2f0a67
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
13
src/index.ts
13
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,
|
||||
});
|
||||
})();
|
||||
|
|
Loading…
Reference in New Issue