mirror of https://github.com/Nofated095/Q2TG.git
feat: 可以绑定群组了
This commit is contained in:
parent
2ad2d41cad
commit
2b499c846e
|
@ -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) {
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
export default {
|
||||
qq: /^[1-9]\d{4,10}$/,
|
||||
roomId: /^-?[1-9]\d{4,10}$/,
|
||||
};
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 });
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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(),
|
||||
|
|
Loading…
Reference in New Issue