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 { NewMessage, NewMessageEvent } from 'telegram/events';
|
||||||
import { EditedMessage, EditedMessageEvent } from 'telegram/events/EditedMessage';
|
import { EditedMessage, EditedMessageEvent } from 'telegram/events/EditedMessage';
|
||||||
import { DeletedMessage, DeletedMessageEvent } from 'telegram/events/DeletedMessage';
|
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 { SendMessageParams } from 'telegram/client/messages';
|
||||||
import { CustomFile } from 'telegram/client/uploads';
|
import { CustomFile } from 'telegram/client/uploads';
|
||||||
|
import WaitForInputHelper from '../helpers/WaitForInputHelper';
|
||||||
|
|
||||||
export class Telegram {
|
export class Telegram {
|
||||||
private readonly client: TelegramClient;
|
private readonly client: TelegramClient;
|
||||||
|
private waitForInputHelper: WaitForInputHelper;
|
||||||
|
|
||||||
private constructor(stringSession = '') {
|
private constructor(stringSession = '') {
|
||||||
this.client = new TelegramClient(
|
this.client = new TelegramClient(
|
||||||
|
@ -30,6 +32,7 @@ export class Telegram {
|
||||||
public static async create(startArgs: UserAuthParams | BotAuthParams, stringSession = '') {
|
public static async create(startArgs: UserAuthParams | BotAuthParams, stringSession = '') {
|
||||||
const bot = new this(stringSession);
|
const bot = new this(stringSession);
|
||||||
await bot.client.start(startArgs);
|
await bot.client.start(startArgs);
|
||||||
|
bot.waitForInputHelper = new WaitForInputHelper(bot);
|
||||||
return bot;
|
return bot;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,8 +42,9 @@ export class Telegram {
|
||||||
return bot;
|
return bot;
|
||||||
}
|
}
|
||||||
|
|
||||||
public addNewMessageEventHandler(handler: (event: NewMessageEvent) => any) {
|
public addNewMessageEventHandler(handler: (event: Api.Message) => any) {
|
||||||
this.client.addEventHandler(handler, new NewMessage({}));
|
// 能用的东西基本都在 message 里面,直接调用 event 里的会 undefined
|
||||||
|
this.client.addEventHandler(event => handler(event.message), new NewMessage({}));
|
||||||
}
|
}
|
||||||
|
|
||||||
public addEditedMessageEventHandler(handler: (event: EditedMessageEvent) => any) {
|
public addEditedMessageEventHandler(handler: (event: EditedMessageEvent) => any) {
|
||||||
|
@ -52,12 +56,14 @@ export class Telegram {
|
||||||
}
|
}
|
||||||
|
|
||||||
public async getChat(entity: EntityLike) {
|
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 {
|
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) {
|
public async sendMessage(params: SendMessageParams) {
|
||||||
|
@ -71,8 +77,12 @@ export class TelegramChat {
|
||||||
file: photo,
|
file: photo,
|
||||||
workers: 1,
|
workers: 1,
|
||||||
}),
|
}),
|
||||||
ttlSeconds
|
ttlSeconds,
|
||||||
});
|
});
|
||||||
return await this.client.sendMessage(this.entity, params);
|
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 { Telegram } from './client/Telegram';
|
||||||
import { CustomFile } from 'telegram/client/uploads';
|
|
||||||
import fs from 'fs';
|
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
const bot = await Telegram.create({
|
const bot = await Telegram.create({
|
||||||
botAuthToken: process.env.TG_BOT_TOKEN,
|
botAuthToken: process.env.TG_BOT_TOKEN,
|
||||||
});
|
});
|
||||||
const me = await bot.getChat('@Clansty');
|
const me = await bot.getChat('@Clansty');
|
||||||
await me.sendSelfDestructingPhoto({},
|
const a = await me.waitForInput();
|
||||||
new CustomFile('test.jpg',
|
console.log(a);
|
||||||
fs.statSync('/Users/clansty/Pictures/stickers/0.png').size,
|
const b = await me.waitForInput();
|
||||||
'/Users/clansty/Pictures/stickers/0.png'), 10);
|
console.log(b);
|
||||||
|
await me.sendMessage({
|
||||||
|
message: a.message + b.message,
|
||||||
|
});
|
||||||
})();
|
})();
|
||||||
|
|
Loading…
Reference in New Issue