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,
|
process.env.TG_API_HASH,
|
||||||
{
|
{
|
||||||
connectionRetries: 5,
|
connectionRetries: 5,
|
||||||
|
langCode: 'zh',
|
||||||
proxy: process.env.PROXY_IP ? {
|
proxy: process.env.PROXY_IP ? {
|
||||||
socksType: 5,
|
socksType: 5,
|
||||||
ip: process.env.PROXY_IP,
|
ip: process.env.PROXY_IP,
|
||||||
|
@ -114,7 +115,7 @@ export class Telegram {
|
||||||
export class TelegramChat {
|
export class TelegramChat {
|
||||||
constructor(public readonly parent: Telegram,
|
constructor(public readonly parent: Telegram,
|
||||||
private readonly client: TelegramClient,
|
private readonly client: TelegramClient,
|
||||||
private readonly entity: Entity,
|
public readonly entity: Entity,
|
||||||
private readonly waitForInputHelper: WaitForMessageHelper) {
|
private readonly waitForInputHelper: WaitForMessageHelper) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,7 @@ export default function createOicq(params: CreateOicqParams) {
|
||||||
|
|
||||||
const client = createClient(params.uin, {
|
const client = createClient(params.uin, {
|
||||||
platform: params.platform,
|
platform: params.platform,
|
||||||
data_dir: '../data'
|
data_dir: './data'
|
||||||
})
|
})
|
||||||
.on('system.login.device', loginDeviceHandler)
|
.on('system.login.device', loginDeviceHandler)
|
||||||
.on('system.login.slider', loginSliderHandler)
|
.on('system.login.slider', loginSliderHandler)
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
export default {
|
export default {
|
||||||
qq: /^[1-9]\d{4,10}$/,
|
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(' ');
|
const messageSplit = message.message.split(' ');
|
||||||
if (message.isGroup) {
|
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) {
|
else if (message.isPrivate) {
|
||||||
switch (messageSplit[0]) {
|
switch (messageSplit[0]) {
|
||||||
case '/add':
|
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]));
|
await this.configService.addExact(Number(messageSplit[1]));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -6,6 +6,8 @@ import { getLogger } from 'log4js';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { getAvatarUrl } from '../utils/urls';
|
import { getAvatarUrl } from '../utils/urls';
|
||||||
import { CustomFile } from 'telegram/client/uploads';
|
import { CustomFile } from 'telegram/client/uploads';
|
||||||
|
import db from '../providers/db';
|
||||||
|
import { Api } from 'telegram';
|
||||||
|
|
||||||
export default class ConfigService {
|
export default class ConfigService {
|
||||||
private owner: TelegramChat;
|
private owner: TelegramChat;
|
||||||
|
@ -17,8 +19,8 @@ export default class ConfigService {
|
||||||
tgBot.getChat(config.owner).then(e => this.owner = e);
|
tgBot.getChat(config.owner).then(e => this.owner = e);
|
||||||
}
|
}
|
||||||
|
|
||||||
private getAssociateLink(gin: number) {
|
private getAssociateLink(roomId: number) {
|
||||||
return `https://t.me/${this.tgBot.me.username}?startgroup=${gin}`;
|
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 中的群组',
|
await this.owner.createPaginatedInlineSelector('选择 QQ 群组\n然后选择在 TG 中的群组',
|
||||||
qGroups.map(e => [Button.url(
|
qGroups.map(e => [Button.url(
|
||||||
`${e.group_name} (${e.group_id})`,
|
`${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({
|
await this.owner.sendMessage({
|
||||||
message,
|
message,
|
||||||
file: avatar ? new CustomFile('avatar.png', avatar.length, '', avatar) : undefined,
|
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;
|
let currentPage = 0;
|
||||||
const totalPages = Math.ceil(choices.length / PAGE_SIZE);
|
const totalPages = Math.ceil(choices.length / PAGE_SIZE);
|
||||||
let sentMessage: Api.Message;
|
let sentMessage: Api.Message;
|
||||||
const buttonPageUp = Button.inline('⏪ 上一页', chat.parent.registerCallback(() => {
|
const buttonPageUp = Button.inline('⬅︎ 上一页', chat.parent.registerCallback(() => {
|
||||||
currentPage = Math.max(0, currentPage - 1);
|
currentPage = Math.max(0, currentPage - 1);
|
||||||
sentMessage.edit({
|
sentMessage.edit({
|
||||||
text: message + `\n\n第 ${currentPage + 1} 页,共 ${totalPages} 页`,
|
text: message + `\n\n第 ${currentPage + 1} 页,共 ${totalPages} 页`,
|
||||||
buttons: getButtons(),
|
buttons: getButtons(),
|
||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
const buttonPageDown = Button.inline('下一页 ⏩', chat.parent.registerCallback(() => {
|
const buttonPageDown = Button.inline('下一页 ➡︎', chat.parent.registerCallback(() => {
|
||||||
currentPage = Math.min(totalPages - 1, currentPage + 1);
|
currentPage = Math.min(totalPages - 1, currentPage + 1);
|
||||||
console.log(currentPage);
|
|
||||||
sentMessage.edit({
|
sentMessage.edit({
|
||||||
text: message + `\n\n第 ${currentPage + 1} 页,共 ${totalPages} 页`,
|
text: message + `\n\n第 ${currentPage + 1} 页,共 ${totalPages} 页`,
|
||||||
buttons: getButtons(),
|
buttons: getButtons(),
|
||||||
|
|
Loading…
Reference in New Issue