tmux-iocompiler
Version:
Realtime i/o compiler bot
295 lines (294 loc) • 11.8 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.compiler = exports.createEnvironment = void 0;
const bot_1 = __importDefault(require("./bot"));
const helpers_1 = __importDefault(require("./helpers"));
const config_1 = __importDefault(require("./config"));
const real_1 = __importDefault(require("./help/real"));
let which = require("which");
let exes = {
gcc: which.sync('gcc', { nothrow: true }),
cpp: which.sync('g++', { nothrow: true }),
node: which.sync('node', { nothrow: true }),
go: which.sync('go', { nothrow: true }),
java: which.sync('java', { nothrow: true }),
javac: which.sync('javac', { nothrow: true }),
python: which.sync('python', { nothrow: true }),
python3: which.sync('python3', { nothrow: true })
};
// 2 global dependencies
const telegraf_1 = require("telegraf");
// importig all starters file which is starting point after this file
const pystarter_1 = __importDefault(require("./starters/pystarter"));
const cstarter_1 = __importDefault(require("./starters/cstarter"));
const jsstarter_1 = __importDefault(require("./starters/jsstarter"));
const tsstarter_1 = __importDefault(require("./starters/tsstarter"));
const cppstarter_1 = __importDefault(require("./starters/cppstarter"));
const jvstarter_1 = __importDefault(require("./starters/jvstarter"));
const gostarter_1 = __importDefault(require("./starters/gostarter"));
const createEnv_1 = require("./utils/createEnv");
var createEnv_2 = require("./utils/createEnv");
Object.defineProperty(exports, "createEnvironment", { enumerable: true, get: function () { return createEnv_2.createEnvironment; } });
let objj = {};
// this will run web server and always make it alive
// env variable
require('dotenv').config();
// Helper class object where sleep function etc listed
let h = new helpers_1.default();
// global object for all updates
let func = {};
// Helper function which replace bot username if exists in command
function cmdd(ctx) {
if (ctx.message && ctx.message.text) {
ctx.message.text = ctx.message.text.replace(new RegExp("^\\" + config_1.default.startSymbol + "[a-zA-Z0-9]{2,9}@" + ctx.botInfo.username, 'i'), (match) => match.replace("@" + ctx.botInfo.username, ""));
}
}
function compiler(token, conf = {}) {
// Some default configurations
conf.version = "2.0.0";
conf.versionNo = 23;
conf.ttl = 60;
if (!conf.startSymbol)
conf.startSymbol = "/";
if (!conf.exes)
if (!conf.group) {
conf.exes = exes;
}
conf.group = "@Logicb_support";
if (!conf.channel)
conf.channel = "@LogicBots";
config_1.default.configure(conf);
// config.config = conf;
(0, createEnv_1.createEnvironment)();
// All scenes
let pyScene = new telegraf_1.Scenes.BaseScene("py");
pyScene.enter(async (ctx) => {
cmdd(ctx);
if (await startcheck(ctx, 'py python'))
return;
await (0, pystarter_1.default)(bot, ctx, conf);
});
pyScene.on("message", async (ctx) => {
cmdd(ctx);
if (await startcheck(ctx, 'py python'))
return;
await (0, pystarter_1.default)(bot, ctx, conf);
});
let cppScene = new telegraf_1.Scenes.BaseScene("cpp");
cppScene.enter(async (ctx) => {
cmdd(ctx);
if (await startcheck(ctx, 'cpp cplus'))
return;
await (0, cppstarter_1.default)(bot, ctx, conf);
});
cppScene.on("message", async (ctx) => {
cmdd(ctx);
if (await startcheck(ctx, 'cpp cplus'))
return;
await (0, cppstarter_1.default)(bot, ctx, conf);
});
let cScene = new telegraf_1.Scenes.BaseScene("code");
cScene.enter(async (ctx) => {
cmdd(ctx);
if (await startcheck(ctx, 'cc code'))
return;
await (0, cstarter_1.default)(bot, ctx, conf);
});
cScene.on("message", async (ctx) => {
cmdd(ctx);
if (await startcheck(ctx, 'cc code'))
return;
await (0, cstarter_1.default)(bot, ctx, conf);
});
let jvScene = new telegraf_1.Scenes.BaseScene("jv");
jvScene.enter(async (ctx) => {
cmdd(ctx);
if (await startcheck(ctx, 'jv java'))
return;
await (0, jvstarter_1.default)(bot, ctx, conf);
});
jvScene.on("message", async (ctx) => {
cmdd(ctx);
if (await startcheck(ctx, 'jv java'))
return;
await (0, jvstarter_1.default)(bot, ctx, conf);
});
let jsScene = new telegraf_1.Scenes.BaseScene("js");
jsScene.enter(async (ctx) => {
cmdd(ctx);
if (await startcheck(ctx, 'js node sql'))
return;
await (0, jsstarter_1.default)(bot, ctx, conf);
});
jsScene.on("message", async (ctx) => {
cmdd(ctx);
if (await startcheck(ctx, 'js node sql'))
return;
await (0, jsstarter_1.default)(bot, ctx, conf);
});
let tsScene = new telegraf_1.Scenes.BaseScene("ts");
tsScene.enter(async (ctx) => {
cmdd(ctx);
if (await startcheck(ctx, 'ts type'))
return;
await (0, tsstarter_1.default)(bot, ctx, conf);
});
tsScene.on("message", async (ctx) => {
cmdd(ctx);
if (await startcheck(ctx, 'ts type'))
return;
await (0, tsstarter_1.default)(bot, ctx, conf);
});
let goScene = new telegraf_1.Scenes.BaseScene("go");
goScene.enter(async (ctx) => {
cmdd(ctx);
if (await startcheck(ctx, 'go'))
return;
await (0, gostarter_1.default)(bot, ctx, conf);
});
goScene.on("message", async (ctx) => {
cmdd(ctx);
await startcheck(ctx, 'go');
await (0, gostarter_1.default)(bot, ctx, conf);
});
// making instance of Telegraf class
let bot = new telegraf_1.Telegraf(token, (conf.telegram && typeof conf.telegram == "object") ? conf.telegram : {});
// regestering all scenes
let stage = new telegraf_1.Scenes.Stage([cScene, pyScene, jsScene, cppScene, jvScene, goScene, tsScene], { ttl: config_1.default.ttl });
// passing bot instance in bot.ts file by call those function
(0, bot_1.default)(bot);
(0, real_1.default)(bot);
// Some global telegraf uses for help
bot.use((0, telegraf_1.session)());
bot.use(stage.middleware());
// Main Program starts from here it listens /js /py all commands and codes
bot.hears(new RegExp("^\\" + config_1.default.startSymbol + "(code|start|py|python|ts|type|js|node|cc|cpp|cplus|sql|go|jv|java|c\\+\\+)|\\/start", "i"), async (ctx, next) => {
try {
if (conf.allowed) {
let allowedStr = conf.allowed.join(" ");
if (!allowedStr.match(ctx.from.id))
return ctx.reply("You are not allowed ask @LogicB_support");
}
let compiler = ctx.message.text + "";
let memb = await ctx.getChatMember(ctx.botInfo.id);
if (!memb.can_delete_messages) {
if ((ctx.chat.id + "").startsWith("-100"))
return ctx.reply('I must be admin with delete message permission');
}
function cmp(a) {
return (new RegExp("^\\" + config_1.default.startSymbol + a, "i")).test(compiler);
}
if (compiler.startsWith("/start") && objj.hasOwnProperty("" + ctx.message.from.id)) {
let kkk = objj["" + ctx.message.from.id];
ctx.message.text = kkk.text;
return ctx.scene.enter(kkk.cmp);
}
if (cmp("py|python")) {
if (exes.python3 || exes.python)
ctx.scene.enter("py");
else
ctx.reply("No python compiler exists in system").catch((err) => console.error(err));
}
else if (cmp("cc|code")) {
if (exes.gcc)
ctx.scene.enter("code");
else
ctx.reply("No gcc compiler exists in system").catch((err) => console.error(err));
}
else if (cmp("js|node|sql")) {
if (exes.node)
ctx.scene.enter("js");
else
ctx.reply("No nodejs compiler exists in system").catch((err) => console.error(err));
}
else if (cmp("ts|type")) {
if (exes.node)
ctx.scene.enter("ts");
else
ctx.reply("No node exists in system").catch((err) => console.error(err));
}
else if (cmp("cpp|cplus")) {
if (exes.cpp)
ctx.scene.enter("cpp");
else
ctx.reply("No g++ compiler exists in system").catch((err) => console.error(err));
}
else if (cmp("jv|java")) {
if (exes.java || exes.javac)
ctx.scene.enter("jv");
else
ctx.reply("No java compiler exists in system").catch((err) => console.error(err));
}
else if (cmp("go")) {
if (exes.go)
ctx.scene.enter("go");
else
ctx.reply("No go compiler exists in system").catch((err) => console.error(err));
}
// next();
}
catch (error) {
console.error("Error in index.ts file starting problem");
}
});
// This function checks that if any compiler command change then it changes session; Example : js to py
async function startcheck(ctx, y, json = {}) {
try {
if (!ctx.message.text.startsWith(config_1.default.startSymbol))
return false;
function cmp(a) {
return (new RegExp("^\\" + config_1.default.startSymbol + a, "i")).test(ctx.message.text);
}
let cmd = ctx.message.text.match(new RegExp("^\\" + config_1.default.startSymbol + "[a-zA-Z0-9]{2,9}", 'i'));
if (!cmd)
return false;
let cst = cmd[0].replace(config_1.default.startSymbol, "");
cst = cst.toLowerCase();
if (y.includes(cst)) {
return false;
}
if (("py python").includes(cst)) {
ctx.scene.enter("py");
return true;
}
else if (("cc code").includes(cst)) {
ctx.scene.enter("code");
return true;
}
else if (("js node sql").includes(cst)) {
ctx.scene.enter("js");
return true;
}
else if (("ts type").includes(cst)) {
ctx.reply("Excecuting typescript code..")
.then(async (m) => { await h.sleep(3000); return m.message_id; })
.then((m) => { ctx.deleteMessage(m); })
.catch((err) => { });
await h.sleep(300);
ctx.scene.enter("ts");
return true;
}
else if (("cpp cplus").includes(cst)) {
ctx.scene.enter("cpp");
return true;
}
else if (("jv java").includes(cst)) {
ctx.scene.enter("jv");
return true;
}
else if (("go").includes(cst)) {
ctx.scene.enter("go");
return true;
}
return false;
}
catch (error) {
return false;
}
}
return { bot, config: config_1.default };
}
exports.compiler = compiler;
;