node-bale-api
Version:
Asynchronous Bale Messenger Module
1,025 lines (968 loc) • 106 kB
text/typescript
import { existsSync } from 'fs';
import { EventEmitter } from 'events';
import { Connection } from "./Network/connection";
import {
Promotion, MaskText, User, Chat, ChatPhoto, PhotoSizeInterface, reWrite, editMessageTextOptions,
SendMessageOptions, ConstructorOptions, ForwardOptions, MediaUpload, newInviteLink,
AnimationInterface, AudioInterface, DocumentLikeInterface, VideoInterface, CopyMessage, Media,
VoiceInterface, FileInterface, StickerInterface, CallbackQuery, MessageForm, WebhookReturner, Webhook,
SendMediaGroupOptions, MediaOutput, CallbackQueryOptions, CallbackQueryAnswer, inputMedias, InputMediaVideo, InputMediaAnimation, InputMediaAudio,
InputMediaDocument, InputMediaPhoto
} from "./Objects/interfaces";
interface events {
message: (message: MessageForm) => void,
callback_query: (callbacking: CallbackQuery) => void,
photo: (message: MessageForm) => void,
video: (message: MessageForm) => void,
audio: (message: MessageForm) => void,
voice: (message: MessageForm) => void,
sticker: (message: MessageForm) => void,
document: (message: MessageForm) => void,
fumble: (error_message: string, error_code: number) => void,
close: () => void
}
export class BaleBot extends EventEmitter {
bot_token: string;
request: Connection;
private time: number;
private intervalId: NodeJS.Timeout | number;
private file_id_regex: RegExp;
private link_url_regex: RegExp
constructor(BotToken: string, options: ConstructorOptions = { polling_interval: 999, polling: false }){
super();
this.bot_token = BotToken;
this.request = new Connection(this.bot_token);
this.intervalId = -1;
this.file_id_regex = /^\d+:-?\d+:\d+:[a-f0-9]+$/;
this.link_url_regex = /^(https?:\/\/)?([a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z]{2,})(\/[^\s]*)?$/
this.time = 999;
if (options.polling){
this.poll(options.polling_interval ?? 999);
}
process.on("uncaughtException", async (err) => {
this.emit("fumble", err.message, 404);
});
}
emit<K extends keyof events>(event: K, ...args: Parameters<events[K]>): boolean {
return super.emit(event, ...args);
}
on<K extends keyof events>(event: K, listener: events[K]): this {
return super.on(event, listener);
}
async getMe(callback: (user: User) => void = () => {}) {
await this.request.makeConnection("getMe", {}, async (res) => {
if (res.ok){
callback({
id: res.result['id'],
is_bot: res.result['is_bot'],
first_name: res.result['first_name'],
last_name: res.result['last_name'],
username: res.result['username'],
language_code: res.result['language_code']
});
} else {
callback({});
this.emit("fumble", res.description, res.error_code);
}
});
}
async logout(callback: (loggingOut: any) => void = () => {}){
await this.request.makeConnection("logout", {}, async (res) => {
if (res.ok){
callback(res);
} else {
callback({});
this.emit("fumble", res.description, res.error_code);
}
});
}
async close(callback: (closing: any) => void = () => {}){
await this.request.makeConnection("close", {}, async (res) => {
if (res.ok){
callback(res);
} else {
callback({});
this.emit("fumble", res.description, res.error_code);
}
});
}
async sendMessage(
chatId: number,
text: string,
options: SendMessageOptions = {},
callback: (message: MessageForm) => void = () => {}
){
var _ = options.keyboard_mode;
var __ = {};
__[_] = options.reply_markup;
await this.request.makeConnection("sendMessage", {
chat_id: chatId,
text: text,
reply_to_message_id: options.reply_to_message_id,
reply_markup: JSON.stringify(__)
}, async (res) => {
if (res.ok){
callback({
text: text,
from: {
id: res.result.from['id'],
is_bot: res.result.from['is_bot'],
first_name: res.result.from['first_name'],
last_name: res.result.from['last_name'],
username: res.result.from['username'],
language_code: res.result.from['language_code']
},
id: res.result['message_id'],
date: res.result['date'],
chat: {
id: res.result.chat['id'],
type: res.result.chat['type'],
photo: {
big_file_id: res['result']?.['chat']?.['photo']?.['big_file_id'],
big_file_unique_id: res['result']?.['chat']?.['photo']?.['big_file_unique_id'],
small_file_id: res['result']?.['chat']?.['photo']?.['small_file_id'],
small_file_unique_id: res['result']?.['chat']?.['photo']?.['small_file_unique_id'],
}
}
});
} else {
callback({text: undefined});
this.emit("fumble", res.description, res.error_code);
}
});
}
async forwardMessage(
chatId: number,
options: ForwardOptions,
callback: (message: MessageForm) => void = () => {}
){
await this.request.makeConnection("forwardMessage", {
from_chat_id: chatId,
chat_id: options.to_chat,
message_id: options.message_id
}, async (res) => {
if (res.ok){
callback({
id: res['result']?.['message_id'],
from: {
id: res['result']?.['from']?.['id'],
is_bot: res['result']?.['from']?.['is_bot'],
first_name: res['result']?.['from']?.['first_name'],
last_name: res['result']?.['from']?.['last_name'],
username: res['result']?.['from']?.['username'],
language_code: res['result']?.['from']?.['language_code'],
},
date: res['result']?.['date'],
chat: {
id: res['result']?.['chat']?.['id'],
first_name: res['result']?.['chat']?.['first_name'],
last_name: res['result']?.['chat']?.['last_name'],
title: res['result']?.['chat']?.['title'],
type: res['result']?.['chat']?.['type'],
invite_link: res['result']?.['chat']?.['invite_link'],
photo: {
big_file_id: res['result']?.['chat']?.['photo']?.['big_file_id'],
big_file_unique_id: res['result']?.['chat']?.['photo']?.['big_file_unique_id'],
small_file_id: res['result']?.['chat']?.['photo']?.['small_file_id'],
small_file_unique_id: res['result']?.['chat']?.['photo']?.['small_file_unique_id'],
}
},
forward_from: {
id: res['result']?.['from']?.['id'],
is_bot: res['result']?.['from']?.['is_bot'],
first_name: res['result']?.['from']?.['first_name'],
last_name: res['result']?.['from']?.['last_name'],
username: res['result']?.['from']?.['username'],
language_code: res['result']?.['from']?.['language_code'],
},
forward_date: res['result']?.['forward_date'],
text: undefined
});
} else {
callback({text: undefined});
this.emit("fumble", res.description, res.error_code);
}
})
}
async sendMedia(
mediaOptions : MediaUpload,
callback : (call: MessageForm ) => void = (call: any) => {}
){
if (existsSync(mediaOptions.path !== undefined ? mediaOptions.path : "")){
await this.request.uploadSomething(
{
path: mediaOptions.path,
chat_id: mediaOptions.chat_id,
media: mediaOptions.media,
reply_to_message_id: mediaOptions.reply_to_message_id,
reply_markup: mediaOptions.reply_markup
},
async (res) => {
if (res.ok){
const f: User = {
id: res['result']?.['from']?.['id'],
is_bot: res['result']?.['from']?.['is_bot'],
first_name: res['result']?.['from']?.['first_name'],
last_name: res['result']?.['from']?.['last_name'],
username: res['result']?.['from']?.['username'],
language_code: res['result']?.['from']?.['language_code'],
};
const phc: ChatPhoto = {
big_file_id: res['result']?.['chat']?.['photo']?.['big_file_id'],
big_file_unique_id: res['result']?.['chat']?.['photo']?.['big_file_unique_id'],
small_file_id: res['result']?.['chat']?.['photo']?.['small_file_id'],
small_file_unique_id: res['result']?.['chat']?.['photo']?.['small_file_unique_id'],
};
const c: Chat = {
id: res['result']?.['chat']?.['id'],
first_name: res['result']?.['chat']?.['first_name'],
last_name: res['result']?.['chat']?.['last_name'],
title: res['result']?.['chat']?.['title'],
type: res['result']?.['chat']?.['type'],
invite_link: res['result']?.['chat']?.['invite_link'],
photo: phc
};
if (mediaOptions.media === "photo"){
const photos = res['result']?.['photo'];
const phs: PhotoSizeInterface[] = [];
photos.forEach(photo => {
const { file_id, file_unique_id, file_size, width, height } = photo;
phs.push({
file_id: file_id,
file_unique_id: file_unique_id,
file_size: file_size,
width: width,
height: height
});
})
const pcb: MessageForm = {
id: res['result']?.['message_id'],
from: f,
chat: c,
date: res['result']?.['date'],
photo: phs,
text: undefined,
caption: res['result']?.['caption']
};
callback(pcb);
} else if (mediaOptions.media === "video"){
const thumb: PhotoSizeInterface = {
file_id: res['result']?.['video']?.['thumb']?.['file_id'],
file_unique_id: res['result']?.['video']?.['thumb']?.['file_unique_id'],
file_size: res['result']?.['video']?.['thumb']?.['file_size'],
width: res['result']?.['video']?.['thumb']?.['width'],
height: res['result']?.['video']?.['thumb']?.['height']
};
const video: VideoInterface = {
file_id: res['result']?.['video']?.['file_id'],
file_unique_id: res['result']?.['video']?.['file_unique_id'],
file_size: res['result']?.['video']?.['file_size'],
width: res['result']?.['video']?.['width'],
height: res['result']?.['video']?.['height'],
thumbnail: thumb,
mime_type: res['result']?.['video']?.['mime_type'],
duration: res['result']?.['video']?.['duration']
};
const vcb: MessageForm = {
id: res['result']?.['message_id'],
from: f,
chat: c,
date: res['result']?.['date'],
video: video,
text: undefined,
caption: res['result']?.['caption']
};
callback(vcb);
} else if (mediaOptions.media === "document"){
const dcmnt: DocumentLikeInterface = {
file_id: res['result']?.['document']?.['file_id'],
file_unique_id: res['result']?.['document']?.['file_unique_id'],
file_name: res['result']?.['document']?.['file_name'],
file_size: res['result']?.['document']?.['file_size'],
mime_type: res['result']?.['document']?.['mime_type']
};
const dcb: MessageForm = {
id: res['result']?.['message_id'],
from: f,
chat: c,
date: res['result']?.['date'],
document: dcmnt,
text: undefined,
caption: res['result']?.['caption']
};
callback(dcb);
} else if (mediaOptions.media === "audio"){
const aud: AudioInterface = {
file_id: res['result']?.['audio']?.['file_id'],
file_unique_id: res['result']?.['audio']?.['file_unique_id'],
duration: res['result']?.['audio']?.['duration'],
file_size: res['result']?.['audio']?.['file_size'],
mime_type: res['result']?.['audio']?.['mime_type']
};
const acb: MessageForm = {
id: res['result']?.['message_id'],
from: f,
chat: c,
date: res['result']?.['date'],
audio: aud,
text: undefined,
caption: res['result']?.['caption']
};
callback(acb);
} else if (mediaOptions.media === "voice"){
const voice: VoiceInterface = {
file_id: res['result']?.['voice']?.['file_id'],
file_unique_id: res['result']?.['voice']?.['file_unique_id'],
duration: res['result']?.['voice']?.['duration'],
file_size: res['result']?.['voice']?.['file_size'],
mime_type: res['result']?.['voice']?.['mime_type']
};
const acb: MessageForm = {
id: res['result']?.['message_id'],
from: f,
chat: c,
date: res['result']?.['date'],
voice: voice,
text: undefined,
caption: res['result']?.['caption']
};
callback(acb);
} else if (mediaOptions.media === "animation"){
const thumb: PhotoSizeInterface = {
file_id: res['result']?.['video']?.['thumb']?.['file_id'],
file_unique_id: res['result']?.['video']?.['thumb']?.['file_unique_id'],
file_size: res['result']?.['video']?.['thumb']?.['file_size'],
width: res['result']?.['video']?.['thumb']?.['width'],
height: res['result']?.['video']?.['thumb']?.['height']
};
const animation: AnimationInterface = {
file_id: res['result']?.['animation']?.['file_id'],
file_unique_id: res['result']?.['animation']?.['file_unique_id'],
file_size: res['result']?.['animation']?.['file_size'],
width: res['result']?.['animation']?.['width'],
height: res['result']?.['animation']?.['height'],
thumbnail: thumb,
mime_type: res['result']?.['animation']?.['mime_type'],
duration: res['result']?.['animation']?.['duration']
};
const ancb: MessageForm = {
id: res['result']?.['message_id'],
from: f,
chat: c,
date: res['result']?.['date'],
animation: animation,
text: undefined,
caption: res['result']?.['caption']
};
callback(ancb);
}
} else {
callback({text: undefined});
this.emit("fumble", res.description, res.error_code);
}
}
)
} else if (mediaOptions.path !== undefined && this.link_url_regex.test(mediaOptions.path)) {
const absData = {}
Object.defineProperty(absData, "chat_id", {
value: mediaOptions.chat_id,
writable: true,
enumerable: true,
configurable: true
});
Object.defineProperty(absData, "caption", {
value: mediaOptions.caption,
writable: true,
enumerable: true,
configurable: true
});
Object.defineProperty(absData, "reply_to_message_id", {
value: mediaOptions.reply_to_message_id,
writable: true,
enumerable: true,
configurable: true
});
Object.defineProperty(absData, "reply_markup", {
value: JSON.stringify({keyboard: mediaOptions.reply_markup}),
writable: true,
enumerable: true,
configurable: true
});
Object.defineProperty(absData, mediaOptions.media, {
value: mediaOptions.path,
writable: true,
enumerable: true,
configurable: true
});
await this.request.makeConnection(`send${this.request.toTitleCase(mediaOptions.media)}`, absData, async (res) => {
if (res.ok){
const f: User = {
id: res['result']?.['from']?.['id'],
is_bot: res['result']?.['from']?.['is_bot'],
first_name: res['result']?.['from']?.['first_name'],
last_name: res['result']?.['from']?.['last_name'],
username: res['result']?.['from']?.['username'],
language_code: res['result']?.['from']?.['language_code'],
};
const phc: ChatPhoto = {
big_file_id: res['result']?.['chat']?.['photo']?.['big_file_id'],
big_file_unique_id: res['result']?.['chat']?.['photo']?.['big_file_unique_id'],
small_file_id: res['result']?.['chat']?.['photo']?.['small_file_id'],
small_file_unique_id: res['result']?.['chat']?.['photo']?.['small_file_unique_id'],
};
const c: Chat = {
id: res['result']?.['chat']?.['id'],
first_name: res['result']?.['chat']?.['first_name'],
last_name: res['result']?.['chat']?.['last_name'],
title: res['result']?.['chat']?.['title'],
type: res['result']?.['chat']?.['type'],
invite_link: res['result']?.['chat']?.['invite_link'],
photo: phc
};
if (mediaOptions.media === "photo"){
const photos = res['result']?.['photo'];
const phs: PhotoSizeInterface[] = [];
photos.forEach(photo => {
const { file_id, file_unique_id, file_size, width, height } = photo;
phs.push({
file_id: file_id,
file_unique_id: file_unique_id,
file_size: file_size,
width: width,
height: height
});
})
const pcb: MessageForm = {
id: res['result']?.['message_id'],
from: f,
chat: c,
date: res['result']?.['date'],
photo: phs,
text: undefined,
caption: res['result']?.['caption']
};
callback(pcb);
} else if (mediaOptions.media === "video"){
const thumb: PhotoSizeInterface = {
file_id: res['result']?.['video']?.['thumb']?.['file_id'],
file_unique_id: res['result']?.['video']?.['thumb']?.['file_unique_id'],
file_size: res['result']?.['video']?.['thumb']?.['file_size'],
width: res['result']?.['video']?.['thumb']?.['width'],
height: res['result']?.['video']?.['thumb']?.['height']
};
const video: VideoInterface = {
file_id: res['result']?.['video']?.['file_id'],
file_unique_id: res['result']?.['video']?.['file_unique_id'],
file_size: res['result']?.['video']?.['file_size'],
width: res['result']?.['video']?.['width'],
height: res['result']?.['video']?.['height'],
thumbnail: thumb,
mime_type: res['result']?.['video']?.['mime_type'],
duration: res['result']?.['video']?.['duration']
};
const vcb: MessageForm = {
id: res['result']?.['message_id'],
from: f,
chat: c,
date: res['result']?.['date'],
video: video,
text: undefined,
caption: res['result']?.['caption']
};
callback(vcb);
} else if (mediaOptions.media === "document"){
const dcmnt: DocumentLikeInterface = {
file_id: res['result']?.['document']?.['file_id'],
file_unique_id: res['result']?.['document']?.['file_unique_id'],
file_name: res['result']?.['document']?.['file_name'],
file_size: res['result']?.['document']?.['file_size'],
mime_type: res['result']?.['document']?.['mime_type']
};
const dcb: MessageForm = {
id: res['result']?.['message_id'],
from: f,
chat: c,
date: res['result']?.['date'],
document: dcmnt,
text: undefined,
caption: res['result']?.['caption']
};
callback(dcb);
} else if (mediaOptions.media === "audio"){
const aud: AudioInterface = {
file_id: res['result']?.['audio']?.['file_id'],
file_unique_id: res['result']?.['audio']?.['file_unique_id'],
duration: res['result']?.['audio']?.['duration'],
file_size: res['result']?.['audio']?.['file_size'],
mime_type: res['result']?.['audio']?.['mime_type']
};
const acb: MessageForm = {
id: res['result']?.['message_id'],
from: f,
chat: c,
date: res['result']?.['date'],
audio: aud,
text: undefined,
caption: res['result']?.['caption']
};
callback(acb);
} else if (mediaOptions.media === "voice"){
const voice: VoiceInterface = {
file_id: res['result']?.['voice']?.['file_id'],
file_unique_id: res['result']?.['voice']?.['file_unique_id'],
duration: res['result']?.['voice']?.['duration'],
file_size: res['result']?.['voice']?.['file_size'],
mime_type: res['result']?.['voice']?.['mime_type']
};
const acb: MessageForm = {
id: res['result']?.['message_id'],
from: f,
chat: c,
date: res['result']?.['date'],
voice: voice,
text: undefined,
caption: res['result']?.['caption']
};
callback(acb);
} else if (mediaOptions.media === "animation"){
const thumb: PhotoSizeInterface = {
file_id: res['result']?.['video']?.['thumb']?.['file_id'],
file_unique_id: res['result']?.['video']?.['thumb']?.['file_unique_id'],
file_size: res['result']?.['video']?.['thumb']?.['file_size'],
width: res['result']?.['video']?.['thumb']?.['width'],
height: res['result']?.['video']?.['thumb']?.['height']
};
const animation: AnimationInterface = {
file_id: res['result']?.['animation']?.['file_id'],
file_unique_id: res['result']?.['animation']?.['file_unique_id'],
file_size: res['result']?.['animation']?.['file_size'],
width: res['result']?.['animation']?.['width'],
height: res['result']?.['animation']?.['height'],
thumbnail: thumb,
mime_type: res['result']?.['animation']?.['mime_type'],
duration: res['result']?.['animation']?.['duration']
};
const ancb: MessageForm = {
id: res['result']?.['message_id'],
from: f,
chat: c,
date: res['result']?.['date'],
animation: animation,
text: undefined,
caption: res['result']?.['caption']
};
callback(ancb);
}
} else {
callback({text: undefined});
this.emit("fumble", res.description, res.error_code);
}
});
} else if (mediaOptions.file_id !== undefined && this.file_id_regex.test(mediaOptions.file_id)) {
const absData = {}
Object.defineProperty(absData, "chat_id", {
value: mediaOptions.chat_id,
writable: true,
enumerable: true,
configurable: true
});
Object.defineProperty(absData, "caption", {
value: mediaOptions.caption,
writable: true,
enumerable: true,
configurable: true
});
Object.defineProperty(absData, "reply_to_message_id", {
value: mediaOptions.reply_to_message_id,
writable: true,
enumerable: true,
configurable: true
});
Object.defineProperty(absData, "reply_markup", {
value: JSON.stringify({keyboard: mediaOptions.reply_markup}),
writable: true,
enumerable: true,
configurable: true
});
Object.defineProperty(absData, mediaOptions.media, {
value: mediaOptions.file_id,
writable: true,
enumerable: true,
configurable: true
});
await this.request.makeConnection(`send${this.request.toTitleCase(mediaOptions.media)}`, absData, async (res) => {
if (res.ok){
const f: User = {
id: res['result']?.['from']?.['id'],
is_bot: res['result']?.['from']?.['is_bot'],
first_name: res['result']?.['from']?.['first_name'],
last_name: res['result']?.['from']?.['last_name'],
username: res['result']?.['from']?.['username'],
language_code: res['result']?.['from']?.['language_code'],
};
const phc: ChatPhoto = {
big_file_id: res['result']?.['chat']?.['photo']?.['big_file_id'],
big_file_unique_id: res['result']?.['chat']?.['photo']?.['big_file_unique_id'],
small_file_id: res['result']?.['chat']?.['photo']?.['small_file_id'],
small_file_unique_id: res['result']?.['chat']?.['photo']?.['small_file_unique_id'],
};
const c: Chat = {
id: res['result']?.['chat']?.['id'],
first_name: res['result']?.['chat']?.['first_name'],
last_name: res['result']?.['chat']?.['last_name'],
title: res['result']?.['chat']?.['title'],
type: res['result']?.['chat']?.['type'],
invite_link: res['result']?.['chat']?.['invite_link'],
photo: phc
};
if (mediaOptions.media === "photo"){
const photos = res['result']?.['photo'];
const phs: PhotoSizeInterface[] = [];
photos.forEach(photo => {
const { file_id, file_unique_id, file_size, width, height } = photo;
phs.push({
file_id: file_id,
file_unique_id: file_unique_id,
file_size: file_size,
width: width,
height: height
});
})
const pcb: MessageForm = {
id: res['result']?.['message_id'],
from: f,
chat: c,
date: res['result']?.['date'],
photo: phs,
text: undefined,
caption: res['result']?.['caption']
};
callback(pcb);
} else if (mediaOptions.media === "video"){
const thumb: PhotoSizeInterface = {
file_id: res['result']?.['video']?.['thumb']?.['file_id'],
file_unique_id: res['result']?.['video']?.['thumb']?.['file_unique_id'],
file_size: res['result']?.['video']?.['thumb']?.['file_size'],
width: res['result']?.['video']?.['thumb']?.['width'],
height: res['result']?.['video']?.['thumb']?.['height']
};
const video: VideoInterface = {
file_id: res['result']?.['video']?.['file_id'],
file_unique_id: res['result']?.['video']?.['file_unique_id'],
file_size: res['result']?.['video']?.['file_size'],
width: res['result']?.['video']?.['width'],
height: res['result']?.['video']?.['height'],
thumbnail: thumb,
mime_type: res['result']?.['video']?.['mime_type'],
duration: res['result']?.['video']?.['duration']
};
const vcb: MessageForm = {
id: res['result']?.['message_id'],
from: f,
chat: c,
date: res['result']?.['date'],
video: video,
text: undefined,
caption: res['result']?.['caption']
};
callback(vcb);
} else if (mediaOptions.media === "document"){
const dcmnt: DocumentLikeInterface = {
file_id: res['result']?.['document']?.['file_id'],
file_unique_id: res['result']?.['document']?.['file_unique_id'],
file_name: res['result']?.['document']?.['file_name'],
file_size: res['result']?.['document']?.['file_size'],
mime_type: res['result']?.['document']?.['mime_type']
};
const dcb: MessageForm = {
id: res['result']?.['message_id'],
from: f,
chat: c,
date: res['result']?.['date'],
document: dcmnt,
text: undefined,
caption: res['result']?.['caption']
};
callback(dcb);
} else if (mediaOptions.media === "audio"){
const aud: AudioInterface = {
file_id: res['result']?.['audio']?.['file_id'],
file_unique_id: res['result']?.['audio']?.['file_unique_id'],
duration: res['result']?.['audio']?.['duration'],
file_size: res['result']?.['audio']?.['file_size'],
mime_type: res['result']?.['audio']?.['mime_type']
};
const acb: MessageForm = {
id: res['result']?.['message_id'],
from: f,
chat: c,
date: res['result']?.['date'],
audio: aud,
text: undefined,
caption: res['result']?.['caption']
};
callback(acb);
} else if (mediaOptions.media === "voice"){
const voice: VoiceInterface = {
file_id: res['result']?.['voice']?.['file_id'],
file_unique_id: res['result']?.['voice']?.['file_unique_id'],
duration: res['result']?.['voice']?.['duration'],
file_size: res['result']?.['voice']?.['file_size'],
mime_type: res['result']?.['voice']?.['mime_type']
};
const acb: MessageForm = {
id: res['result']?.['message_id'],
from: f,
chat: c,
date: res['result']?.['date'],
voice: voice,
text: undefined,
caption: res['result']?.['caption']
};
callback(acb);
} else if (mediaOptions.media === "animation"){
const thumb: PhotoSizeInterface = {
file_id: res['result']?.['video']?.['thumb']?.['file_id'],
file_unique_id: res['result']?.['video']?.['thumb']?.['file_unique_id'],
file_size: res['result']?.['video']?.['thumb']?.['file_size'],
width: res['result']?.['video']?.['thumb']?.['width'],
height: res['result']?.['video']?.['thumb']?.['height']
};
const animation: AnimationInterface = {
file_id: res['result']?.['animation']?.['file_id'],
file_unique_id: res['result']?.['animation']?.['file_unique_id'],
file_size: res['result']?.['animation']?.['file_size'],
width: res['result']?.['animation']?.['width'],
height: res['result']?.['animation']?.['height'],
thumbnail: thumb,
mime_type: res['result']?.['animation']?.['mime_type'],
duration: res['result']?.['animation']?.['duration']
};
const ancb: MessageForm = {
id: res['result']?.['message_id'],
from: f,
chat: c,
date: res['result']?.['date'],
animation: animation,
text: undefined,
caption: res['result']?.['caption']
};
callback(ancb);
}
} else {
callback({text: undefined});
this.emit("fumble", res.description, res.error_code);
}
});
}
}
async sendLocation(
chatId: number,
latitude: number,
longitude: number,
options: SendMessageOptions = {},
horizontalAccuracy: boolean = null,
callback: (location: MessageForm ) => void = () => {}
){
await this.request.makeConnection("sendLocation", {
chat_id: chatId,
latitude: latitude,
longitude: longitude,
horizontal_accuracy: horizontalAccuracy,
reply_to_message_id: options.reply_to_message_id,
reply_markup: JSON.stringify({}[options.keyboard_mode] = options.reply_markup)
}, async (res) => {
if (res.ok){
callback({
id: res['result']?.['message_id'],
chat: {
id: res['result']?.['chat']?.['id'],
first_name: res['result']?.['chat']?.['first_name'],
last_name: res['result']?.['chat']?.['last_name'],
title: res['result']?.['chat']?.['title'],
type: res['result']?.['chat']?.['type'],
invite_link: res['result']?.['chat']?.['invite_link'],
photo: {
big_file_id: res['result']?.['chat']?.['photo']?.['big_file_id'],
big_file_unique_id: res['result']?.['chat']?.['photo']?.['big_file_unique_id'],
small_file_id: res['result']?.['chat']?.['photo']?.['small_file_id'],
small_file_unique_id: res['result']?.['chat']?.['photo']?.['small_file_unique_id'],
}
},
from: {
id: res['result']?.['from']?.['id'],
is_bot: res['result']?.['from']?.['is_bot'],
first_name: res['result']?.['from']?.['first_name'],
last_name: res['result']?.['from']?.['last_name'],
username: res['result']?.['from']?.['username'],
language_code: res['result']?.['from']?.['language_code'],
},
location: {
longitude: res['result']?.['location']?.['longitude'],
latitude: res['result']?.['location']?.['latitude']
},
text: undefined
});
} else {
callback({text: undefined});
this.emit("fumble", res.description, res.error_code);
}
})
}
async sendContact(
chatId: number,
phoneNumber: string,
firstName: string,
lastName: string = null,
options: SendMessageOptions = {},
callback: (clback: MessageForm) => void = () => {}
){
await this.request.makeConnection("sendContact", {
chat_id: chatId,
phone_number: phoneNumber,
first_name: firstName,
last_name: lastName,
reply_to_message_id: options.reply_to_message_id,
reply_markup: JSON.stringify({}[options.keyboard_mode] = options.reply_markup)
}, async (res) => {
if (res.ok){
callback({
id: res['result']?.['message_id'],
chat: {
id: res['result']?.['chat']?.['id'],
first_name: res['result']?.['chat']?.['first_name'],
last_name: res['result']?.['chat']?.['last_name'],
title: res['result']?.['chat']?.['title'],
type: res['result']?.['chat']?.['type'],
invite_link: res['result']?.['chat']?.['invite_link'],
photo: {
big_file_id: res['result']?.['chat']?.['photo']?.['big_file_id'],
big_file_unique_id: res['result']?.['chat']?.['photo']?.['big_file_unique_id'],
small_file_id: res['result']?.['chat']?.['photo']?.['small_file_id'],
small_file_unique_id: res['result']?.['chat']?.['photo']?.['small_file_unique_id'],
}
},
from: {
id: res['result']?.['from']?.['id'],
is_bot: res['result']?.['from']?.['is_bot'],
first_name: res['result']?.['from']?.['first_name'],
last_name: res['result']?.['from']?.['last_name'],
username: res['result']?.['from']?.['username'],
language_code: res['result']?.['from']?.['language_code'],
},
contact: {
first_name: res['result']?.['contact']?.['first_name'],
last_name: res['result']?.['contact']?.['last_name'],
phone_number: res['result']?.['contact']?.['phone_number'],
user_id: res['result']?.['contact']?.['user_id']
},
text: undefined
});
} else {
callback({text: undefined});
this.emit("fumble", res.description, res.error_code);
}
})
}
async getFile(
fileId: string,
callback: (file: FileInterface) => void = () => {}
){
await this.request.makeConnection("getFile",
{
file_id: fileId
},
async (res) => {
if (res.ok){;
callback({
id: res['result']?.['file_id'],
unique_id: res['result']?.['file_unique_id'],
size: res['result']?.['file_size'],
path: res['result']?.['file_path']
});
} else {
callback({});
this.emit("fumble", res.description, res.error_code);
}
}
)
}
async getFileContent(
filePath: string,
callback: (rewrite: reWrite) => void = () => {}
){
await this.request.fileConnection(filePath, (s) => {
if (typeof s === 'object' && s !== null && !Array.isArray(s)) {
callback({
ok: false,
error_message: s['message']
});
} else {
callback({
ok: true,
data: s
});
}
})
}
async getChat(
chatId: number,
callback: (chat: Chat) => void = () => {}
){
await this.request.makeConnection(
"getChat", { chat_id: chatId },
async (res) => {
if (res.ok){
callback({
first_name: res['result']?.['first_name'],
last_name: res['result']?.['last_name'],
id: res['result']?.['id'],
title: res['result']?.['title'],
invite_link: res['result']?.['invite_link'],
username: res['result']?.['username'],
type: res['result']?.['type'],
photo: {
big_file_id: res['result']?.['photo']?.['big_file_id'],
big_file_unique_id: res['result']?.['photo']?.['big_file_unique_id'],
small_file_id: res['result']?.['photo']?.['small_file_id'],
small_file_unique_id: res['result']?.['photo']?.['big_file_id'],
}
});
} else {
callback({});
this.emit("fumble", res.description, res.error_code);
}
}
)
}
async pinMessage(
chatId: number,
messageId: number,
callback: (clback: boolean) => void = () => {}
){
await this.request.makeConnection("pinChatMessage", {
chat_id: chatId,
message_id: messageId
}, async (res) => {
if (res.ok){
callback(res.result)
} else {
callback(false);
this.emit("fumble", res.description, res.error_code);
}
})
}
async unpinMessage(
chatId: number,
messageId: number,
callback: (clback: boolean) => void = () => {}
){
await this.request.makeConnection("unpinChatMessage", {
chat_id: chatId,
message_id: messageId
}, async (res) => {
if (res.ok){
callback(res.result)
} else {
callback(false);
this.emit("fumble", res.description, res.error_code);