import * as si from 'systeminformation' export const IS_DEBUG: boolean = true export const CREATOR_ID: number = 0 export let startTime: number = 0 export let systemSpecsText: string = '' export let testAnswer: boolean = true export let checkMom: boolean = true export let checkDad: boolean = true export let biteDick: boolean = true export let messagesReceived = 0 export let messagesSent = 0 export let testAnswers: string[] = [] export function upReceivedMessages() { messagesReceived++ } export function upSentMessages() { messagesSent++ } export function setTestAnswers(answers: string[]) { this.testAnswers = answers } export function setStartTime(startTime: number) { this.startTime = startTime } export function initSystemSpecs() { let text = '' si.osInfo().then(async (os) => { text += `OS: ${os.distro}\n` si.cpu().then(async (cpu) => { text += `CPU: ${cpu.manufacturer} ${cpu.brand} ${cpu.physicalCores} cores ${cpu.cores} threads\n` si.mem().then(async (memory) => { const totalRam = Math.round(memory.total / Math.pow(2, 30)) text += `RAM: ${totalRam} GB\n` systemSpecsText = text }) }) }) } export class Chat { id: number firstName: string lastName?: string username?: string type: string } export class From { id: number isBot: boolean firstName: string lastName?: string username?: string } export class Message { id: number from: From chat: Chat date: number reply_to_message?: Message body: string new_chat_members?: From[] left_chat_member?: From } export class MessageContext { message: Message reply: any senderId: number chatId: number repliedMessage?: MessageContext text: string invitedMembers?: From[] leftMember?: From hasInvitedMembers(): boolean { return !!this.message.new_chat_members } hasLeftMembers(): boolean { return !!this.message.left_chat_member } isChat(): boolean { return this.message.chat.type !== 'private' } getFullSenderTitle(): string { return this.message.from.firstName + (this.message.from.lastName ? ' ' + this.message.from.lastName : '') } getFullChatTitle(): string { return this.message.chat.firstName + (this.message.chat.lastName ? ' ' + this.message.chat.lastName : '') } hasRepliedMessage(): boolean { return !!this.message.reply_to_message } } export function prepareMessageContext(rawMessage: any): MessageContext { if (!rawMessage) return null const context = new MessageContext() context.message = this.prepareMessage(rawMessage) context.senderId = context.message.from.id context.chatId = context.message.chat.id context.invitedMembers = context.message.new_chat_members context.leftMember = context.message.left_chat_member context.reply = rawMessage.reply if (context.message.reply_to_message !== null) context.repliedMessage = this.prepareMessageContext(rawMessage.reply_to_message) context.text = context.message.body return context } export function prepareMessage(rawMessage: any) { if (!rawMessage) return null const message = new Message() message.id = rawMessage.message_id message.date = rawMessage.date message.body = rawMessage.text message.new_chat_members = rawMessage.new_chat_members message.left_chat_member = rawMessage.left_chat_member const from = new From() from.id = rawMessage.from.id from.isBot = rawMessage.from.is_bot from.firstName = rawMessage.from.first_name from.lastName = rawMessage.from.last_name from.username = rawMessage.from.username message.from = from const chat = new Chat() chat.id = rawMessage.chat.id chat.firstName = rawMessage.chat.first_name chat.lastName = rawMessage.chat.last_name chat.username = rawMessage.chat.username chat.type = rawMessage.chat.type message.chat = chat if (rawMessage.reply_to_message) message.reply_to_message = this.prepareMessage(rawMessage.reply_to_message) return message } export function includes(array: any[], object: any) { return array.indexOf(object) > -1 } export function getRandomInt(max: number) { return Math.floor(Math.random() * Math.floor(max)); } export function arrayRemove(arr: any[], value: any) { return arr.filter(function (ele: any) { return ele != value; }); } export function deepEqual(object1: { [x: string]: any }, object2: { [x: string]: any; year?: number; month?: number; day?: number }) { if ((object1 == null || object2 == null) && object1 != object2) return false const keys1 = Object.keys(object1); const keys2 = Object.keys(object2); if (keys1.length !== keys2.length) { return false; } for (const key of keys1) { const val1 = object1[key]; const val2 = object2[key]; const areObjects = isObject(val1) && isObject(val2); if ( areObjects && !deepEqual(val1, val2) || !areObjects && val1 !== val2 ) { return false; } } return true; } export function isObject(object: any) { return object != null && typeof object === 'object'; } export function getUptime() { const processSeconds = Math.ceil(process.uptime()) let minutes = 0 let hours = 0 let days = 0 let i = 0 let seconds = 0 while (i < processSeconds) { i++ seconds++ if (seconds == 60) { minutes++ seconds = 0 } if (minutes == 60) { hours++ minutes = 0 } if (hours == 24) { days++ hours = 0 } } let text = '' if (days > 0) text += `${days} д. ` if (hours > 0) text += `${hours} ч. ` if (minutes > 0) text += `${minutes} м. ` if (seconds > 0) text += `${seconds} с. ` return text } export function getExceptionText(e: Error) { return `Произошел троллинг * Error : ${e.name} * Message : ${e.message} * StackTrace : ${e.stack}` }