mirror of https://github.com/Nofated095/Q2TG.git
feat: 初始化 oicq 的模块
This commit is contained in:
parent
9660454024
commit
9ee2791ad8
|
@ -0,0 +1,61 @@
|
|||
import { Client, createClient, Platform } from 'oicq';
|
||||
import * as Buffer from 'buffer';
|
||||
|
||||
interface CreateOicqParams {
|
||||
uin: number;
|
||||
password: string;
|
||||
platform: Platform;
|
||||
// 当需要验证手机时调用此方法,应该返回收到当手机验证码
|
||||
onVerifyDevice: (phone: string) => Promise<string>;
|
||||
// 当滑块时调用此方法,返回 ticker,也可以返回假值改用扫码登录
|
||||
onVerifySlider: (url: string) => Promise<string>;
|
||||
// 扫码后返回
|
||||
onQrCode: (image: Buffer) => Promise<void>;
|
||||
}
|
||||
|
||||
export default function createOicq(params: CreateOicqParams) {
|
||||
return new Promise<Client>((resolve, reject) => {
|
||||
async function loginDeviceHandler({ phone }: { url: string, phone: string }) {
|
||||
client.sendSmsCode();
|
||||
const code = await params.onVerifyDevice(phone);
|
||||
client.submitSmsCode(code);
|
||||
}
|
||||
|
||||
async function loginSliderHandler({ url }: { url: string }) {
|
||||
const res = await params.onVerifySlider(url);
|
||||
if (res) {
|
||||
client.submitSlider(res);
|
||||
}
|
||||
else {
|
||||
client.login();
|
||||
}
|
||||
}
|
||||
|
||||
async function loginQrCodeHandler({ image }: { image: Buffer }) {
|
||||
await params.onQrCode(image);
|
||||
client.qrcodeLogin();
|
||||
}
|
||||
|
||||
function loginErrorHandler({ message }: { code: number; message: string }) {
|
||||
reject(message);
|
||||
}
|
||||
|
||||
function successLoginHandler() {
|
||||
client.off('system.login.device', loginDeviceHandler)
|
||||
.off('system.login.slider', loginSliderHandler)
|
||||
.off('system.login.qrcode', loginQrCodeHandler)
|
||||
.off('system.login.error', loginErrorHandler)
|
||||
.off('system.online', successLoginHandler);
|
||||
resolve(client);
|
||||
}
|
||||
|
||||
const client = createClient(params.uin, {
|
||||
platform: params.platform,
|
||||
})
|
||||
.on('system.login.device', loginDeviceHandler)
|
||||
.on('system.login.slider', loginSliderHandler)
|
||||
.on('system.login.qrcode', loginQrCodeHandler)
|
||||
.on('system.login.error', loginErrorHandler)
|
||||
.on('system.online', successLoginHandler);
|
||||
});
|
||||
}
|
Loading…
Reference in New Issue