webook-tel / src /utils.ts
Mohammed Foud
all
959b027
import { TelegramClient } from "telegram";
import { telegramClients, activeTasks } from "./models";
export function camelToSnake(obj: Record<string, any>): Record<string, any> {
const snakeObj: Record<string, any> = {};
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
const snakeKey = key.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
snakeObj[snakeKey] = obj[key];
}
}
return snakeObj;
}
export function snakeToCamel(obj: Record<string, any>): Record<string, any> {
const camelObj: Record<string, any> = {};
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
const camelKey = key.replace(/_([a-z])/g, (_, match) => match.toUpperCase());
camelObj[camelKey] = obj[key];
}
}
return camelObj;
}
export function getCurrentDate() {
const date = new Date()
const day = date.getDate()
const month = date.getMonth() + 1
const year = date.getFullYear()
return `${year}-${month}-${day}`
}
export function isEmailValid(email: string): boolean {
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return emailRegex.test(email);
}
export const sendResponse = (res: any, status: number, data: any) => {
if (status === 200) {
return res.status(200).json(data);
} else {
return res
.status(status)
.json({ error: data.error || "An error occurred" });
}
};
export const getActiveClients = () => {
return Array.from(telegramClients.entries()).map(([phone, info]) => ({
phoneNumber: phone,
}));
};
export const getActiveTasks = () => {
return Array.from(activeTasks.entries()).map(([taskId, task]) => ({
taskId,
phoneNumber: taskId.split("-")[0],
taskType: task.taskType,
taskData: task.taskData,
// listeners: Array.from(task.listeners.keys()),
}));
};
export const sendMessage = async (client: TelegramClient, recipient: any, message: string) => {
try {
await client.sendMessage(recipient, { message });
} catch (error: any) {
// Send an error message to the recipient if sending fails
await client.sendMessage(recipient, { message: `Error sending message: ${error.message}` });
console.error("Error sending message:", error.message);
}
};
import * as unorm from 'unorm';
import { fetchDataFromTable } from "./db/supabaseHelper";
/**
* Normalizes Arabic text by:
* 1. Removing diacritics.
* 2. Standardizing certain characters.
* 3. Normalizing demonstrative pronouns.
*
* @param text - The input Arabic text to normalize.
* @returns The normalized Arabic text.
*/
export function normalizeArabicText(text: string): string {
// Remove diacritics using Unicode normalization (NFD)
text = unorm.nfd(text).replace(/[\u064B-\u065F]/g, '');
// Normalize certain characters
text = text
.replace(/أ/g, 'ا')
.replace(/إ/g, 'ا')
.replace(/آ/g, 'ا')
.replace(/ى/g, 'ي')
.replace(/ة/g, 'ه');
// Standardize demonstrative pronouns
text = text
.replace(/هذة/g, 'هذا')
.replace(/هذه/g, 'هذا')
.replace(/هذي/g, 'هذا');
return text;
}
export async function getKeywords(): Promise<string[]> {
try {
const filters ={
is_active:true
}
const keywordsResponse = await fetchDataFromTable("keyword", 1000, 0, filters);
return keywordsResponse.data.map((keyword: any) =>
normalizeArabicText(keyword.text.toLowerCase())
);
} catch (error: any) {
console.error("Error fetching keywords:", error.message);
return [];
}
}
/**
* Fetches block keywords from the database and normalizes them.
* @param userId - The user ID to filter block keywords by.
* @returns A list of normalized block keywords.
*/
export async function getBlockKeywords(): Promise<string[]> {
try {
const filters ={
is_active:true
}
const blockKeywordsResponse = await fetchDataFromTable("blockkeyword", 1000, 0, filters);
return blockKeywordsResponse.data.map((keyword: any) =>
normalizeArabicText(keyword.text.toLowerCase())
);
} catch (error: any) {
console.error("Error fetching block keywords:", error.message);
return [];
}
}
export const sendReplayTelegramMessage = async (
client: any,
peer: any,
message: string,
replyToMsgId: number
) => {
try {
await client.sendMessage(peer, {
message: message,
replyTo: replyToMsgId,
});
return true;
} catch (error) {
console.error('Error sending reply message:', error);
return false;
}
};