mirror of https://github.com/Nofated095/Q2TG.git
feat: 封装 TG Client 模块
This commit is contained in:
parent
88c8555444
commit
87e8cdd805
|
@ -10,6 +10,7 @@
|
|||
"devDependencies": {
|
||||
"@types/node": "^17.0.18",
|
||||
"prisma": "^3.9.2",
|
||||
"ts-node": "^10.5.0",
|
||||
"tsc": "^2.0.4",
|
||||
"typescript": "^4.5.5"
|
||||
},
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
import { Api, TelegramClient } from 'telegram';
|
||||
import { StringSession } from 'telegram/sessions';
|
||||
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 { SendMessageParams } from 'telegram/client/messages';
|
||||
import { CustomFile } from 'telegram/client/uploads';
|
||||
|
||||
export class Telegram {
|
||||
private readonly client: TelegramClient;
|
||||
|
||||
private constructor(stringSession = '') {
|
||||
this.client = new TelegramClient(
|
||||
new StringSession(stringSession),
|
||||
parseInt(process.env.TG_API_ID),
|
||||
process.env.TG_API_HASH,
|
||||
{
|
||||
connectionRetries: 5,
|
||||
proxy: process.env.PROXY_IP ? {
|
||||
socksType: 5,
|
||||
ip: process.env.PROXY_IP,
|
||||
port: parseInt(process.env.PROXY_PORT),
|
||||
} : undefined,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
public static async create(startArgs: UserAuthParams | BotAuthParams, stringSession = '') {
|
||||
const bot = new this(stringSession);
|
||||
await bot.client.start(startArgs);
|
||||
return bot;
|
||||
}
|
||||
|
||||
public static async connect(stringSession: string) {
|
||||
const bot = new this(stringSession);
|
||||
await bot.client.connect();
|
||||
return bot;
|
||||
}
|
||||
|
||||
public addNewMessageEventHandler(handler: (event: NewMessageEvent) => any) {
|
||||
this.client.addEventHandler(handler, new NewMessage({}));
|
||||
}
|
||||
|
||||
public addEditedMessageEventHandler(handler: (event: EditedMessageEvent) => any) {
|
||||
this.client.addEventHandler(handler, new EditedMessage({}));
|
||||
}
|
||||
|
||||
public addDeletedMessageEventHandler(handler: (event: DeletedMessageEvent) => any) {
|
||||
this.client.addEventHandler(handler, new DeletedMessage({}));
|
||||
}
|
||||
|
||||
public async getChat(entity: EntityLike) {
|
||||
return new TelegramChat(this.client, await this.client.getInputEntity(entity));
|
||||
}
|
||||
}
|
||||
|
||||
export class TelegramChat {
|
||||
constructor(private client: TelegramClient, private entity: Api.TypeInputPeer) {
|
||||
}
|
||||
|
||||
public async sendMessage(params: SendMessageParams) {
|
||||
return await this.client.sendMessage(this.entity, params);
|
||||
}
|
||||
|
||||
public async sendSelfDestructingPhoto(params: SendMessageParams, photo: CustomFile, ttlSeconds: number) {
|
||||
// @ts-ignore 定义不好好写的?你家 `FileLike` 明明可以是 `TypeInputMedia`
|
||||
params.file = new Api.InputMediaUploadedPhoto({
|
||||
file: await this.client.uploadFile({
|
||||
file: photo,
|
||||
workers: 1,
|
||||
}),
|
||||
ttlSeconds
|
||||
});
|
||||
return await this.client.sendMessage(this.entity, params);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
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);
|
||||
})();
|
|
@ -0,0 +1,25 @@
|
|||
import fs from 'fs';
|
||||
|
||||
type UserConfig = {
|
||||
userBotSession: string;
|
||||
qqUin: number;
|
||||
qqPassword: string;
|
||||
isSetup: boolean;
|
||||
}
|
||||
|
||||
const CONFIG_PATH = './data/config.json';
|
||||
|
||||
const defaultConfig: UserConfig = {
|
||||
userBotSession: '',
|
||||
qqUin: 0,
|
||||
qqPassword: '',
|
||||
isSetup: false,
|
||||
};
|
||||
|
||||
export const config: UserConfig = fs.existsSync(CONFIG_PATH) ?
|
||||
JSON.parse(fs.readFileSync(CONFIG_PATH, 'utf8')) :
|
||||
defaultConfig;
|
||||
|
||||
export const saveConfig = () => {
|
||||
fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 0), 'utf8');
|
||||
};
|
140
yarn.lock
140
yarn.lock
|
@ -12,6 +12,22 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@cspotcode/source-map-consumer@npm:0.8.0":
|
||||
version: 0.8.0
|
||||
resolution: "@cspotcode/source-map-consumer@npm:0.8.0"
|
||||
checksum: c0c16ca3d2f58898f1bd74c4f41a189dbcc202e642e60e489cbcc2e52419c4e89bdead02c886a12fb13ea37798ede9e562b2321df997ebc210ae9bd881561b4e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@cspotcode/source-map-support@npm:0.7.0":
|
||||
version: 0.7.0
|
||||
resolution: "@cspotcode/source-map-support@npm:0.7.0"
|
||||
dependencies:
|
||||
"@cspotcode/source-map-consumer": 0.8.0
|
||||
checksum: 9faddda7757cd778b5fd6812137b2cc265810043680d6399acc20441668fafcdc874053be9dccd0d9110087287bfad27eb3bf342f72bceca9aa9059f5d0c4be8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@gar/promisify@npm:^1.0.1":
|
||||
version: 1.1.2
|
||||
resolution: "@gar/promisify@npm:1.1.2"
|
||||
|
@ -74,6 +90,34 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@tsconfig/node10@npm:^1.0.7":
|
||||
version: 1.0.8
|
||||
resolution: "@tsconfig/node10@npm:1.0.8"
|
||||
checksum: b8d5fffbc6b17ef64ef74f7fdbccee02a809a063ade785c3648dae59406bc207f70ea2c4296f92749b33019fa36a5ae716e42e49cc7f1bbf0fd147be0d6b970a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@tsconfig/node12@npm:^1.0.7":
|
||||
version: 1.0.9
|
||||
resolution: "@tsconfig/node12@npm:1.0.9"
|
||||
checksum: a01b2400ab3582b86b589c6d31dcd0c0656f333adecde85d6d7d4086adb059808b82692380bb169546d189bf771ae21d02544a75b57bd6da4a5dd95f8567bec9
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@tsconfig/node14@npm:^1.0.0":
|
||||
version: 1.0.1
|
||||
resolution: "@tsconfig/node14@npm:1.0.1"
|
||||
checksum: 976345e896c0f059867f94f8d0f6ddb8b1844fb62bf36b727de8a9a68f024857e5db97ed51d3325e23e0616a5e48c034ff51a8d595b3fe7e955f3587540489be
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@tsconfig/node16@npm:^1.0.2":
|
||||
version: 1.0.2
|
||||
resolution: "@tsconfig/node16@npm:1.0.2"
|
||||
checksum: ca94d3639714672bbfd55f03521d3f56bb6a25479bd425da81faf21f13e1e9d15f40f97377dedbbf477a5841c5b0c8f4cd1b391f33553d750b9202c54c2c07aa
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/node@npm:^17.0.18":
|
||||
version: 17.0.18
|
||||
resolution: "@types/node@npm:17.0.18"
|
||||
|
@ -88,6 +132,22 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"acorn-walk@npm:^8.1.1":
|
||||
version: 8.2.0
|
||||
resolution: "acorn-walk@npm:8.2.0"
|
||||
checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"acorn@npm:^8.4.1":
|
||||
version: 8.7.0
|
||||
resolution: "acorn@npm:8.7.0"
|
||||
bin:
|
||||
acorn: bin/acorn
|
||||
checksum: e0f79409d68923fbf1aa6d4166f3eedc47955320d25c89a20cc822e6ba7c48c5963d5bc657bc242d68f7a4ac9faf96eef033e8f73656da6c640d4219935fdfd0
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"agent-base@npm:6, agent-base@npm:^6.0.2":
|
||||
version: 6.0.2
|
||||
resolution: "agent-base@npm:6.0.2"
|
||||
|
@ -142,6 +202,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"arg@npm:^4.1.0":
|
||||
version: 4.1.3
|
||||
resolution: "arg@npm:4.1.3"
|
||||
checksum: 544af8dd3f60546d3e4aff084d451b96961d2267d668670199692f8d054f0415d86fc5497d0e641e91546f0aa920e7c29e5250e99fc89f5552a34b5d93b77f43
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"async-mutex@npm:^0.3.0":
|
||||
version: 0.3.2
|
||||
resolution: "async-mutex@npm:0.3.2"
|
||||
|
@ -298,6 +365,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"create-require@npm:^1.1.0":
|
||||
version: 1.1.1
|
||||
resolution: "create-require@npm:1.1.1"
|
||||
checksum: a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d@npm:1, d@npm:^1.0.1":
|
||||
version: 1.0.1
|
||||
resolution: "d@npm:1.0.1"
|
||||
|
@ -368,6 +442,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"diff@npm:^4.0.1":
|
||||
version: 4.0.2
|
||||
resolution: "diff@npm:4.0.2"
|
||||
checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"dom-serializer@npm:^1.0.1":
|
||||
version: 1.3.2
|
||||
resolution: "dom-serializer@npm:1.3.2"
|
||||
|
@ -1020,6 +1101,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"make-error@npm:^1.1.1":
|
||||
version: 1.3.6
|
||||
resolution: "make-error@npm:1.3.6"
|
||||
checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"make-fetch-happen@npm:^9.1.0":
|
||||
version: 9.1.0
|
||||
resolution: "make-fetch-happen@npm:9.1.0"
|
||||
|
@ -1409,6 +1497,7 @@ __metadata:
|
|||
oicq: ^2.2.0
|
||||
prisma: ^3.9.2
|
||||
telegram: ^2.5.0
|
||||
ts-node: ^10.5.0
|
||||
tsc: ^2.0.4
|
||||
typescript: ^4.5.5
|
||||
languageName: unknown
|
||||
|
@ -1689,6 +1778,43 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ts-node@npm:^10.5.0":
|
||||
version: 10.5.0
|
||||
resolution: "ts-node@npm:10.5.0"
|
||||
dependencies:
|
||||
"@cspotcode/source-map-support": 0.7.0
|
||||
"@tsconfig/node10": ^1.0.7
|
||||
"@tsconfig/node12": ^1.0.7
|
||||
"@tsconfig/node14": ^1.0.0
|
||||
"@tsconfig/node16": ^1.0.2
|
||||
acorn: ^8.4.1
|
||||
acorn-walk: ^8.1.1
|
||||
arg: ^4.1.0
|
||||
create-require: ^1.1.0
|
||||
diff: ^4.0.1
|
||||
make-error: ^1.1.1
|
||||
v8-compile-cache-lib: ^3.0.0
|
||||
yn: 3.1.1
|
||||
peerDependencies:
|
||||
"@swc/core": ">=1.2.50"
|
||||
"@swc/wasm": ">=1.2.50"
|
||||
"@types/node": "*"
|
||||
typescript: ">=2.7"
|
||||
peerDependenciesMeta:
|
||||
"@swc/core":
|
||||
optional: true
|
||||
"@swc/wasm":
|
||||
optional: true
|
||||
bin:
|
||||
ts-node: dist/bin.js
|
||||
ts-node-cwd: dist/bin-cwd.js
|
||||
ts-node-script: dist/bin-script.js
|
||||
ts-node-transpile-only: dist/bin-transpile.js
|
||||
ts-script: dist/bin-script-deprecated.js
|
||||
checksum: d51ac8a9b3582ce3705cef8d35f3372e40caa277dbd7c7baeb651961538f13d2f11f22402614348f78d9b10501bd1cb5f05ec4f2ec9a74bd0e288de769c32335
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tsc@npm:^2.0.4":
|
||||
version: 2.0.4
|
||||
resolution: "tsc@npm:2.0.4"
|
||||
|
@ -1816,6 +1942,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"v8-compile-cache-lib@npm:^3.0.0":
|
||||
version: 3.0.0
|
||||
resolution: "v8-compile-cache-lib@npm:3.0.0"
|
||||
checksum: 674e312bbca796584b61dc915f33c7e7dc4e06d196e0048cb772c8964493a1ec723f1dd014d9419fd55c24a6eae148f60769da23f622e05cd13268063fa1ed6b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"websocket@npm:^1.0.34":
|
||||
version: 1.0.34
|
||||
resolution: "websocket@npm:1.0.34"
|
||||
|
@ -1908,3 +2041,10 @@ __metadata:
|
|||
checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"yn@npm:3.1.1":
|
||||
version: 3.1.1
|
||||
resolution: "yn@npm:3.1.1"
|
||||
checksum: 2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
|
Loading…
Reference in New Issue