tgind
Version:
Telegram bot api which gives you simplest way to make your bots
603 lines (601 loc) • 18.4 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Short = void 0;
const axios_1 = __importDefault(require("axios"));
const errors_1 = require("./tg/errors");
const _1 = require(".");
let ss = {};
let TOKEN;
class Short {
/**
*
* @param {any | undefined} options
*/
constructor(options = {}) {
this.options = {};
TOKEN = options.TOKEN;
Object.defineProperty(this, 'options', {
value: options,
enumerable: false
});
}
/**
*
* @param {string} method
* @param {Options} options
* @param {Options} headers
* @returns {Options}
*
* @example
* bot.request("sendMessage", {chat_id: -100123456789, text: "Hi"})
*/
async request(method, options = {}, headers = {}) {
let res;
if (Object.keys(headers).length > 0) {
res = (await axios_1.default.post(`https://api.telegram.org/bot${TOKEN}/${method}`, options, headers)).data;
}
else
res = (await axios_1.default.post(`https://api.telegram.org/bot${TOKEN}/${method}`, options)).data;
if (res && res.result) {
let result = res.result;
delete res.result;
if (res.ok)
delete res.ok;
return { ...res, ...result };
}
else if (res) {
return res;
}
}
/**
*
* @param { string } sceneName
*
* @example
* msg.enter("greet")
*/
async enter(sceneName) {
if (!this.options.scene.hasOwnProperty(sceneName)) {
throw new errors_1.TelegramError("Enter error: You have never registered this scene id");
}
let uid = this.options.from.id + "";
this.options.session[uid] = { sceneName };
ss[uid + ""] = { sceneName };
if (ss[uid].hasOwnProperty('timeoutId')) {
clearTimeout(ss[uid].timeoutId);
delete ss[uid].timeoutId;
}
let kkk = this.options.scene[this.options.session[this.options.from.id + ""].sceneName];
let sh = Object.assign(this, this.options);
delete sh.scene;
delete sh.TOKEN;
delete sh.session;
delete sh.ttl;
let sh2 = new _1.Util(sh);
kkk.emit("enter", sh, sh2);
this.__setLeave(kkk, this, sh2, uid);
}
async __setLeave(kkk, sh, sh2, uid) {
let ttl = 10;
if (this.options.ttl)
ttl = this.options.ttl;
ttl = ttl * 1000;
ss[uid].timeoutId = setTimeout(() => {
this.leave({ kkk, sh, sh2, uid });
}, ttl);
}
async leave(opk = {}) {
if (!opk.sh) {
let sh = Object.assign(this, this.options);
delete sh.scene;
delete sh.TOKEN;
delete sh.session;
delete sh.ttl;
let kkk = this.options.scene[this.options.session[this.options.from.id + ""].sceneName];
kkk.emit("leave", sh, new _1.Util(sh));
clearTimeout(ss[this.options.from.id].timeoutId);
delete this.options.session[this.options.from.id + ""];
}
else {
opk.kkk.emit("leave", opk.sh, opk.sh2);
clearTimeout(ss[opk.uid].timeoutId);
delete this.options.session[opk.uid];
}
}
/**
*
* @param {string | number} text
* @param {any | undefined} options
* @returns
*
* @example
* bot.send(-100123456789, "Hello");
* or you can use directly without giving chatid by using context object of your listener
*
* @example
* bot.on("message", ctx ctx.send("Hello"))
*/
async send(text, options = {}) {
if (!text)
return console.error("Chat id and message_text required");
options.chat_id = this.options.chat.id;
options.text = text;
return await this.request("sendMessage", options);
}
/**
*
* @param {number | undefined } message_id
* @param {*} text
* @param {any | undefined} options
* @returns
*/
async edit(message_id, text, options = {}) {
options.chat_id = this.options.chat.id;
options.message_id = message_id;
options.text = text;
return await this.request("editMessageText", options);
}
/**
*
* @param {*} from_chat
* @param {number | undefined } message_id
* @param {any | undefined} options
* @returns
*/
async forword(from_chat_id, message_id, options = {}) {
options.chat_id = this.options.chat.id;
options.message_id = message_id;
options.from_chat_id = from_chat_id;
return await this.request("forwardMessage", options);
}
/**
*
* @param {*} from_chat
* @param {number | undefined } message_id
* @param {any | undefined} options
* @returns
*/
async copy(from_chat_id, message_id, options = {}) {
options.chat_id = this.options.chat.id;
options.message_id = message_id;
options.from_chat_id = from_chat_id;
return await this.request("copyMessage", options);
}
/**
*
* @param {*} photo_link_or_id
* @param {any | undefined} options
* @returns
*/
async sendPhoto(file, options = {}) {
if (typeof file == "string")
return console.error("sendPhoto: Please firstly import InputFile class and use in second param new InputFile(your file path, filename)");
file.append('chat_id', this.options.chat.id);
for (let key in options) {
if (options.hasOwnProperty(key)) {
let value = options[key];
file.append(key, value);
}
}
let headers = file.getHeaders();
return await this.request("sendPhoto", file, headers);
}
/**
*
* @param {*} audio_link_or_id
* @param {any | undefined} options
* @returns
*/
async sendAudio(file, options = {}) {
if (typeof file == "string")
return console.error("sendAudio: Please firstly import InputFile class and use in second param new InputFile(your file path, filename)");
file.append('chat_id', this.options.chat.id);
for (let key in options) {
if (options.hasOwnProperty(key)) {
let value = options[key];
file.append(key, value);
}
}
let headers = file.getHeaders();
return await this.request("sendAudio", file, headers);
}
/**
*
* @param {*} video_link_or_id
* @param {any | undefined} options
* @returns
*/
async sendVideo(file, options = {}) {
if (typeof file == "string")
return console.error("sendVideo: Please firstly import InputFile class and use in second param new InputFile(your file path, filename)");
file.append('chat_id', this.options.chat.id);
for (let key in options) {
if (options.hasOwnProperty(key)) {
let value = options[key];
file.append(key, value);
}
}
let headers = file.getHeaders();
return await this.request("sendVideo", file, headers);
}
/**
*
* @param {*} latitude
* @param {*} longitude
* @param {any | undefined} options
* @returns
*/
async sendLocation(latitude, longitude, options = {}) {
options.chat_id = this.options.chat.id;
options.latitude = latitude;
options.longitude = longitude;
return await this.request("sendLocation", options);
}
/**
*
* @param {*} doc_link_or_id
* @param {any | undefined} options
* @returns
*/
async sendDoc(doc, options = {}) {
if (typeof doc == "string")
return console.error("sendDoc: Please firstly import InputFile class and use in second param new InputFile(your file path, filename)");
doc.append('chat_id', this.options.chat.id);
for (let key in options) {
if (options.hasOwnProperty(key)) {
let value = options[key];
doc.append(key, value);
}
}
let headers = doc.getHeaders();
return await this.request("sendDocument", doc, headers);
}
/**
*
* @param {number | undefined } message_id
* @param {any | undefined} options
* @returns
*/
async del(message_id, options = {}) {
options.chat_id = this.options.chat.id;
if (message_id)
options.message_id = message_id;
else
options.message_id = this.options.message_id;
return await this.request("deleteMessage", options);
}
/**
*
* @param {*} latitude
* @param {*} longitude
* @param {*} title
* @param {*} address
* @param {any | undefined} options
* @returns
*/
async sendVenue(latitude, longitude, title, address, options = {}) {
options.chat_id = this.options.chat.id;
options.latitude = latitude;
options.longitude = longitude;
options.title = title;
options.address = address;
return await this.request("sendVenue", options);
}
/**
*
* @param {*} phone_number
* @param {*} first_name
* @param {any | undefined} options
* @returns
*/
async sendContact(phone_number, first_name, options = {}) {
options.chat_id = this.options.chat.id;
options.phone_number = phone_number;
options.first_name = first_name;
return await this.request("sendContact", options);
}
/**
*
* @param {*} question
* @param {*} your_options
* @param {any | undefined} options
* @returns
*/
async sendPoll(question, your_options, options = {}) {
options.chat_id = this.options.chat.id;
options.question = question;
options.options = your_options;
return await this.request("sendPoll", options);
}
/**
*
* @param {any | undefined} options
* @returns
*/
async sendDice(options = {}) {
options.chat_id = this.options.chat.id;
return await this.request("sendDice", options);
}
/**
*
* @param {*} action
* @param {any | undefined} options
* @returns
*/
async sendAction(action, options = {}) {
options.chat_id = this.options.chat.id;
options.action = action;
return await this.request("sendChatAction", options);
}
/**
*
* @param {*} user_id
* @param {any | undefined} options
* @returns
*/
async ban(user_id, options = {}) {
return console.error("Chat id");
options.chat_id = this.options.chat.id;
options.user_id = user_id;
return await this.request("banChatMember", options);
}
/**
*
* @param {*} user_id
* @param {any | undefined} options
* @returns
*/
async unban(user_id, options = {}) {
options.chat_id = this.options.chat.id;
options.user_id = user_id;
return await this.request("unbanChatMember", options);
}
/**
*
* @param {*} user_id
* @param {any | undefined} options
* @returns
*/
async mute(user_id, options = {}) {
options.chat_id = this.options.chat.id;
options.user_id = user_id;
if (!options.permissions)
options.permissions = { "can_send_messages": false };
return await this.request("restrictChatMember", options);
}
/**
*
* @param {*} user_id
* @param {any | undefined} options
* @returns
*/
async unmute(user_id, options = {}) {
options.chat_id = this.options.chat.id;
options.user_id = user_id;
if (!options.permissions)
options.permissions = { "can_send_messages": true };
return await this.request("restrictChatMember", options);
}
/**
*
* @param {*} user_id
* @param {any | undefined} options
* @returns
*/
async promote(user_id, options = {}) {
options.chat_id = this.options.chat.id;
options.user_id = user_id;
if (Object.keys(options).length < 3) {
options.can_post_messages = true;
options.can_delete_messages = true;
options.can_pin_messages = true;
options.can_restrict_members = true;
options.can_manage_video_chats = true;
options.can_invite_users = true;
}
return await this.request("promoteChatMember", options);
}
/**
*
* @param {*} user_id
* @param {any | undefined} options
* @returns
*/
async demote(user_id, options = {}) {
options.chat_id = this.options.chat.id;
options.user_id = user_id;
options.can_promote_members = false;
options.can_delete_messages = false;
options.can_pin_messages = false;
options.can_restrict_members = false;
options.can_manage_video_chats = false;
options.can_invite_users = false;
options.can_manage_topics = false;
options.can_change_info = false;
return await this.request("promoteChatMember", options);
}
/**
*
* @param {any | undefined} options
* @returns
*/
async exportChatInviteLink(options = {}) {
options.chat_id = this.options.chat.id;
return await this.request("exportChatInviteLink", options);
}
/**
*
* @param {any | undefined} options
* @returns
*/
async link(options = {}) {
options.chat_id = this.options.chat.id;
return await this.request("createChatInviteLink", options);
}
/**
*
* @param {*} invite_link
* @param {any | undefined} options
* @returns
*/
async revokeLink(invite_link, options = {}) {
options.chat_id = this.options.chat.id;
options.invite_link = invite_link;
return await this.request("revokeChatInviteLink", options);
}
/**
*
* @param {*} user_id
* @param {any | undefined} options
* @returns
*/
async approveJoinRequest(user_id, options = {}) {
options.chat_id = this.options.chat.id;
options.user_id = user_id;
return await this.request("approveChatJoinRequest", options);
}
/**
*
* @param {*} user_id
* @param {any | undefined} options
* @returns
*/
async declineJoinRequest(user_id, options = {}) {
options.chat_id = this.options.chat.id;
options.user_id = user_id;
return await this.request("declineChatJoinRequest", options);
}
/**
*
* @param {number | undefined } message_id
* @param {any | undefined} options
* @returns
*/
async pin(message_id, options = {}) {
options.chat_id = this.options.chat.id;
options.message_id = message_id;
return await this.request("pinChatMessage", options);
}
/**
*
* @param {number | undefined } message_id
* @param {any | undefined} options
* @returns
*/
async unpin(message_id, options = {}) {
options.chat_id = this.options.chat.id;
options.message_id = message_id;
return await this.request("unpinChatMessage", options);
}
/**
*
* @param {any | undefined} options
* @returns
*/
async unpinAll(options = {}) {
options.chat_id = this.options.chat.id;
return await this.request("unpinAllChatMessages", options);
}
/**
*
* @param {any | undefined} options
* @returns
*/
async leaveChat(options = {}) {
options.chat_id = this.options.chat.id;
return await this.request("leaveChat", options);
}
/**
*
* @param {any | undefined} options
* @returns
*/
async getChat(options = {}) {
options.chat_id = this.options.chat.id;
return await this.request("getChat", options);
}
/**
*
* @param {any | undefined} options
* @returns
*/
async getAdmins(options = {}) {
options.chat_id = this.options.chat.id;
return await this.request("getChatAdministrators", options);
}
/**
*
* @param {any | undefined} options
* @returns
*/
async getMemberCount(options = {}) {
options.chat_id = this.options.chat.id;
return await this.request("getChatMemberCount", options);
}
/**
*
* @param {*} user_id
* @param {any | undefined} options
* @returns
*/
async getMember(user_id, options = {}) {
options.chat_id = this.options.chat.id;
options.user_id = user_id;
return await this.request("getChatMember", options);
}
/**
*
* @param {*} file_id
* @param {any | undefined} options
* @returns
*/
async getFile(file_id, options = {}) {
options.file_id = file_id;
return await this.request("getFile", options);
}
/**
*
* @param {*} user_id
* @param {any | undefined} options
* @returns
*/
async getUserProfilePhotos(user_id, options = {}) {
if (!user_id)
return console.error("User id required");
options.user_id = user_id;
return await this.request("getUserProfilePhotos", options);
}
/**
*
* @param {*} query_id
* @param {*} options
* @returns
*/
async ansQuery(text = null, options = {}) {
options.callback_query_id = this.options.id;
if (text)
options.text = text;
return await this.request("answerCallbackQuery", options);
}
async getMe() {
let options = {};
return await this.request("getMe", options);
}
/**
*
* @param {*} drop_pending_updates
* @returns
*/
async deleteWebhook(drop_pending_updates = true) {
let options = {};
options.drop_pending_updates = drop_pending_updates;
return await this.request("deleteWebhook", options);
}
[Symbol.for("nodejs.util.inspect.custom")]() {
return Object.assign({}, this);
}
}
exports.Short = Short;