feat: 可以绑定群组了

This commit is contained in:
凌莞 2022-02-21 14:30:02 +08:00
parent 2ad2d41cad
commit 2b499c846e
No known key found for this signature in database
GPG Key ID: 05F8479BA63A8E92
6 changed files with 39 additions and 11 deletions

View File

@ -28,6 +28,7 @@ export class Telegram {
process.env.TG_API_HASH,
{
connectionRetries: 5,
langCode: 'zh',
proxy: process.env.PROXY_IP ? {
socksType: 5,
ip: process.env.PROXY_IP,
@ -114,7 +115,7 @@ export class Telegram {
export class TelegramChat {
constructor(public readonly parent: Telegram,
private readonly client: TelegramClient,
private readonly entity: Entity,
public readonly entity: Entity,
private readonly waitForInputHelper: WaitForMessageHelper) {
}

View File

@ -51,7 +51,7 @@ export default function createOicq(params: CreateOicqParams) {
const client = createClient(params.uin, {
platform: params.platform,
data_dir: '../data'
data_dir: './data'
})
.on('system.login.device', loginDeviceHandler)
.on('system.login.slider', loginSliderHandler)

View File

@ -1,3 +1,4 @@
export default {
qq: /^[1-9]\d{4,10}$/,
roomId: /^-?[1-9]\d{4,10}$/,
};

View File

@ -22,12 +22,21 @@ export default class ConfigController {
}
const messageSplit = message.message.split(' ');
if (message.isGroup) {
if (messageSplit.length === 2 && messageSplit[0].startsWith('/start') && regExps.roomId.test(messageSplit[1])) {
await this.configService.createLinkGroup(Number(messageSplit[1]), Number(message.chat.id));
return true;
}
else
return false;
}
else if (message.isPrivate) {
switch (messageSplit[0]) {
case '/add':
if (messageSplit[1] && regExps.qq.test(messageSplit[1])) {
// 加的参数永远是正的群号
if (messageSplit.length === 3 && regExps.qq.test(messageSplit[1]) && !isNaN(Number(messageSplit[2]))) {
await this.configService.createLinkGroup(-Number(messageSplit[1]), Number(messageSplit[2]));
}
else if (messageSplit[1] && regExps.qq.test(messageSplit[1])) {
await this.configService.addExact(Number(messageSplit[1]));
}
else {

View File

@ -6,6 +6,8 @@ import { getLogger } from 'log4js';
import axios from 'axios';
import { getAvatarUrl } from '../utils/urls';
import { CustomFile } from 'telegram/client/uploads';
import db from '../providers/db';
import { Api } from 'telegram';
export default class ConfigService {
private owner: TelegramChat;
@ -17,8 +19,8 @@ export default class ConfigService {
tgBot.getChat(config.owner).then(e => this.owner = e);
}
private getAssociateLink(gin: number) {
return `https://t.me/${this.tgBot.me.username}?startgroup=${gin}`;
private getAssociateLink(roomId: number) {
return `https://t.me/${this.tgBot.me.username}?startgroup=${roomId}`;
}
// 开始添加转发群组流程
@ -27,7 +29,7 @@ export default class ConfigService {
await this.owner.createPaginatedInlineSelector('选择 QQ 群组\n然后选择在 TG 中的群组',
qGroups.map(e => [Button.url(
`${e.group_name} (${e.group_id})`,
this.getAssociateLink(e.group_id),
this.getAssociateLink(-e.group_id),
)]));
}
@ -48,7 +50,23 @@ export default class ConfigService {
await this.owner.sendMessage({
message,
file: avatar ? new CustomFile('avatar.png', avatar.length, '', avatar) : undefined,
buttons: Button.url('关联 Telegram 群组', this.getAssociateLink(group.group_id)),
buttons: Button.url('关联 Telegram 群组', this.getAssociateLink(-group.group_id)),
});
}
public async createLinkGroup(qqRoomId: number, tgChatId: number) {
let message: string;
try {
const qGroup = this.oicq.gl.get(-qqRoomId);
const tgChat = (await this.tgBot.getChat(tgChatId)).entity as Api.Chat;
message = `QQ群${qGroup.group_name} (<code>${qGroup.group_id}</code>)已与 Telegram 群 ${tgChat.title} (<code>${tgChatId})关联</code>`;
await db.forwardPair.create({
data: { qqRoomId, tgChatId },
});
}
catch (e) {
message = `错误:<code>${e}</code>`;
}
await this.owner.sendMessage({ message });
}
}

View File

@ -9,16 +9,15 @@ export default async function createPaginatedInlineSelector(chat: TelegramChat,
let currentPage = 0;
const totalPages = Math.ceil(choices.length / PAGE_SIZE);
let sentMessage: Api.Message;
const buttonPageUp = Button.inline(' 上一页', chat.parent.registerCallback(() => {
const buttonPageUp = Button.inline('⬅︎ 上一页', chat.parent.registerCallback(() => {
currentPage = Math.max(0, currentPage - 1);
sentMessage.edit({
text: message + `\n\n第 ${currentPage + 1} 页,共 ${totalPages}`,
buttons: getButtons(),
});
}));
const buttonPageDown = Button.inline('下一页 ', chat.parent.registerCallback(() => {
const buttonPageDown = Button.inline('下一页 ➡︎', chat.parent.registerCallback(() => {
currentPage = Math.min(totalPages - 1, currentPage + 1);
console.log(currentPage);
sentMessage.edit({
text: message + `\n\n第 ${currentPage + 1} 页,共 ${totalPages}`,
buttons: getButtons(),