tarunpoonia905/OfcDevShopBotPublic · Bot Template
AIDEV SHOP appears to be a Telegram automation bot. Commands include /confirm_delete_stock, /addstock_id, /extkey_menu, /partner_api, /apidelete, /buy_hack_cat, /admin_manage_products, /check_buy. Observed in code: messaging, keyboards, payments, libs, web, http, games.
Utilityutility
228 commands0 envUpdated 12d agoCreated Oct 18, 2026
commands/_shopmedia.js
javascript · 305 lines
1/**#command2name: /shopmedia3answer: 4keyboard: 5parse_mode: markdown6aliases: 7allow_only_group: false8need_reply: false9is_web: 010#command**/11 12/*#SIZE_V1*/try{(function(){var z=Bot.getProperty("ui_btn_size");var mx=z==="large"?1:(z==="medium"?2:0);if(!mx||Api.__sz)return;var NAV=/^[◀▶⬅➡«»‹›⏪⏩]|\d+\s*\/\s*\d+|prev|next|page/i;var T=function(m){try{var o=typeof m==="string"?JSON.parse(m):m;if(!o||!o.inline_keyboard)return m;var out=[],cnt=0;o.inline_keyboard.forEach(function(row){var nav=row.some(function(b){return NAV.test(String(b.text||"").trim());});if(row.length<=mx||nav){out.push(row);cnt+=row.length;return;}for(var i=0;i<row.length;i+=mx){var c=row.slice(i,i+mx);out.push(c);cnt+=c.length;}});if(cnt>100||out.length>100)return m;o.inline_keyboard=out;return typeof m==="string"?JSON.stringify(o):o;}catch(e){return m;}};["sendMessage","editMessageText","editMessageCaption","editMessageReplyMarkup","sendPhoto","sendVideo","sendAnimation","sendDocument"].forEach(function(n){var f=Api[n];if(typeof f!=="function")return;Api[n]=function(p){try{if(p&&p.reply_markup)p.reply_markup=T(p.reply_markup);}catch(e){}return f.apply(Api,arguments);};});Api.__sz=true;})();}catch(__szE){}13/*#ANIM_V1*/try{(function(){var M={party:"5046509860389126442",fire:"5104841245755180586",heart:"5159385139981059251",like:"5107584321108051014"};var a=Bot.getProperty("ui_anim");if(!a||!M[a]||Api.__an)return;var E=M[a];var OK=/PURCHASE SUCCESSFUL|PAYMENT SUCCESSFUL|Payment verified|CONGRATULATIONS/i;var priv=function(p){return p&&p.chat_id&&String(p.chat_id).charAt(0)!=="-";};["sendMessage","sendPhoto","sendVideo","sendAnimation"].forEach(function(n){var f=Api[n];if(typeof f!=="function")return;Api[n]=function(p){try{if(priv(p)&&!p.message_effect_id&&OK.test(String(p.text||p.caption||"")))p.message_effect_id=E;}catch(e){}return f.apply(Api,arguments);};});var fe=Api.editMessageText;if(typeof fe==="function"){Api.editMessageText=function(p){var r=fe.apply(Api,arguments);try{if(priv(p)&&OK.test(String(p.text||"")))Api.sendMessage({chat_id:p.chat_id,text:"🎉",message_effect_id:E});}catch(e){}return r;};}Api.__an=true;})();}catch(__anE){}14/*#PREMIUM_UI_V1*/try{(function(){if(Bot.getProperty("ui_premium")!==true||Api.__pm)return;var R=function(t,c){var s=(String(t||"")+" "+String(c||"")).toLowerCase();if(/back|cancel|close|delete|remove|clear|reject|stop|ban|exit/.test(s))return"danger";if(/pay|buy|confirm|verify|paid|add|deposit|shop|claim|yes|receive|wallet|download|update/.test(s))return"success";return"primary";};var T=function(m){try{var o=typeof m==="string"?JSON.parse(m):m;if(!o||!o.inline_keyboard)return m;o.inline_keyboard.forEach(function(row){row.forEach(function(b){if(b.copy_text||b.url||b.callback_data||b.web_app){b.style=R(b.text,b.callback_data||b.url);if(!b.icon_custom_emoji_id&&b.text&&!/^[\u2600-\u27BF\uD83C-\uD83E]/.test(String(b.text).trim())&&!/^[✦✨💎]/.test(b.text))b.text="✦ "+b.text;}});});return typeof m==="string"?JSON.stringify(o):o;}catch(e){return m;}};["sendMessage","editMessageText","editMessageCaption","editMessageReplyMarkup","sendPhoto","sendVideo","sendAnimation","sendDocument"].forEach(function(n){var f=Api[n];if(typeof f!=="function")return;Api[n]=function(p){try{if(p&&p.reply_markup)p.reply_markup=T(p.reply_markup);}catch(e){}return f.apply(Api,arguments);};});Api.__pm=true;})();}catch(__pmE){}15 16 17// =========================================================18// 🎬 SHOP MEDIA MANAGER (Admin / Co-Admin only)19// • Welcome GIF / MP4 -> Shop screen (NON ROOT / ANDROID ROOT / iPHONE) ke UPAR dikhta hai20// • Panel Video Demo -> us panel ke plan/key-kharidne wale screen ke UPAR dikhta hai21//22// Sub-commands (callback_data "/shopmedia <sub> [arg]"):23// welcome -> welcome media ka panel24// prod -> products ki list (kis product pe video laga hai)25// pitem <idx> -> ek product ka panel26// ask welcome|p<idx> -> upload mode ON (agla GIF/video save hoga)27// preview <target> -> admin ko preview bhejta hai28// rm <target> -> media hata deta hai29// close -> preview message delete30// save -> (internal) wildcard (*) se aata hai jab admin ne media bheja31// NOTE: is file me jaan-boojhkar koi `await` use nahi hua (project ke baaki commands jaisa32// hi sync-style), taaki kisi platform quirk se command toote nahi.33// =========================================================34 35try {36 var adminId = String(Bot.getProperty("owner_id") || "7127818616");37 var me = String(chat.chatid);38 var isCo = !!Bot.getProperty("co_admin_" + me);39 if (me !== adminId && !isCo) { Bot.sendMessage("❌ Restricted command! Only Admin can use this."); return; }40 41 function esc(s) { return String(s === undefined || s === null ? "" : s).replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">"); }42 function asObj(v) {43 if (v && typeof v === "object") return v;44 if (typeof v === "string" && v) { try { return JSON.parse(v); } catch (e) {} }45 return null;46 }47 function validMedia(m) { return !!(m && m.file_id && (m.type === "animation" || m.type === "video")); }48 function kindLabel(m) { return m.type === "animation" ? "GIF" : "MP4 Video"; }49 function prodKey(p, i) { return String(p.id || p.name || i).toUpperCase().replace(/[^A-Z0-9_-]/g, "_"); }50 function getProducts() {51 var raw = Bot.getProperty("stored_products");52 if (typeof raw === "string") { try { raw = JSON.parse(raw); } catch (e) { raw = []; } }53 return Array.isArray(raw) ? raw : [];54 }55 function answerCb() {56 var qid = request ? (request.id || (request.callback_query && request.callback_query.id)) : null;57 if (qid) { try { Api.answerCallbackQuery({ callback_query_id: String(qid) }); } catch (e) {} }58 }59 function resolveTarget(t) {60 t = String(t || "");61 if (t === "welcome") return { kind: "welcome", label: "Shop Welcome (Animation 1)", prop: "shop_welcome_media", back: "/shopmedia welcome" };62 if (t === "welcome2") return { kind: "welcome", label: "Shop Welcome (Animation 2)", prop: "shop_welcome_media2", back: "/shopmedia welcome" };63 var m = /^p(\d+)$/.exec(t);64 if (!m) return null;65 var idx = Number(m[1]);66 var p = getProducts()[idx];67 if (!p) return null;68 return { kind: "product", idx: idx, label: String(p.name || ("Product " + (idx + 1))), prop: "product_media_" + prodKey(p, idx), back: "/shopmedia pitem " + idx };69 }70 71 // render: text screen. Callback se aaye to wahi message edit hota hai, warna naya message.72 function render(text, buttons, forceNew) {73 var markup = JSON.stringify({ inline_keyboard: buttons });74 var src = (!forceNew && request && request.message && request.message.message_id) ? request.message : null;75 var srcIsMedia = !!(src && (src.photo || src.video || src.animation || src.document));76 if (src && !srcIsMedia) {77 try { Api.editMessageText({ chat_id: me, message_id: Number(src.message_id), text: text, parse_mode: "HTML", reply_markup: markup }); }78 catch (e1) { Api.sendMessage({ chat_id: me, text: text, parse_mode: "HTML", reply_markup: markup }); }79 } else {80 if (src && srcIsMedia) { try { Api.deleteMessage({ chat_id: me, message_id: Number(src.message_id) }); } catch (e2) {} }81 Api.sendMessage({ chat_id: me, text: text, parse_mode: "HTML", reply_markup: markup });82 }83 answerCb();84 }85 86 function sendPreview(media, caption) {87 var p = {88 chat_id: me, caption: caption, parse_mode: "HTML",89 reply_markup: JSON.stringify({ inline_keyboard: [[{ text: "❌ Close", callback_data: "/shopmedia close", style: "danger" }]] })90 };91 if (media.type === "animation") { p.animation = String(media.file_id); Api.sendAnimation(p); }92 else { p.video = String(media.file_id); p.supports_streaming = true; Api.sendVideo(p); }93 }94 95 var BACK_ADMIN = { text: "⬅️ Admin Panel", callback_data: "/admin", style: "danger", icon_custom_emoji_id: "5893163582194978381" };96 97 // ---- sub-command parse98 var raw = "";99 if (typeof options !== "undefined" && options && options.action) raw = String(options.action);100 else if (typeof params !== "undefined" && params) raw = String(params);101 else {102 var cbd = (request && request.callback_query && request.callback_query.data) ? request.callback_query.data : ((request && request.data) ? request.data : "");103 raw = String(cbd).replace(/^\/?shopmedia\s*/i, "");104 }105 var parts = raw.trim().split(/\s+/);106 var sub = (parts[0] || "welcome").toLowerCase();107 var arg = parts[1] || "";108 109 // ============================================================ WELCOME PANEL110 if (sub === "welcome") {111 User.setProperty("shopmedia_step", null, "json");112 var wm = asObj(Bot.getProperty("shop_welcome_media"));113 var wmOk = validMedia(wm);114 var wm2 = asObj(Bot.getProperty("shop_welcome_media2"));115 var wm2Ok = validMedia(wm2);116 var a2On = (Bot.getProperty("shop_welcome_anim2_on") === true) && wm2Ok;117 var wText =118 "<blockquote><b>🎬 SHOP WELCOME GIF / VIDEO</b></blockquote>\n\n" +119 "Ye GIF/MP4 <b>Shop / Store</b> kholte hi us screen ke <b>upar</b> dikhega jahan <b>NON ROOT / ANDROID ROOT / iPHONE</b> choose karte hain.\n\n" +120 "1️⃣ <b>Animation 1</b> (normal): " + (wmOk ? "✅ Set (" + kindLabel(wm) + ")" : "❌ Not set") + "\n" +121 "2️⃣ <b>Animation 2</b>: " + (wm2Ok ? "✅ Set (" + kindLabel(wm2) + ")" : "❌ Not set") + "\n\n" +122 "▶️ <b>Abhi chal raha hai:</b> " + (a2On ? "Animation 2" : "Animation 1") + "\n" +123 "<i>Animation 2 ON karoge to wo chalega, OFF karoge to Animation 1 hi chalta rahega.</i>";124 var wBtns = [[{ text: wmOk ? "🔄 Replace Animation 1" : "📤 Upload Animation 1", callback_data: "/shopmedia ask welcome", style: "success", icon_custom_emoji_id: "5348392971207194994" }]];125 if (wmOk) {126 wBtns.push([127 { text: "👁 Preview 1", callback_data: "/shopmedia preview welcome", style: "primary" },128 { text: "🗑 Remove 1", callback_data: "/shopmedia rm welcome", style: "danger", icon_custom_emoji_id: "6143299028655280273" }129 ]);130 }131 wBtns.push([{ text: wm2Ok ? "🔄 Replace Animation 2" : "📤 Upload Animation 2", callback_data: "/shopmedia ask welcome2", style: "success", icon_custom_emoji_id: "5348392971207194994" }]);132 if (wm2Ok) {133 wBtns.push([134 { text: "👁 Preview 2", callback_data: "/shopmedia preview welcome2", style: "primary" },135 { text: "🗑 Remove 2", callback_data: "/shopmedia rm welcome2", style: "danger", icon_custom_emoji_id: "6143299028655280273" }136 ]);137 }138 wBtns.push([{ text: "Animation 2: " + (a2On ? "ON ✅" : "OFF"), callback_data: "/shopmedia toggle2", style: a2On ? "success" : "primary" }]);139 wBtns.push([BACK_ADMIN]);140 render(wText, wBtns);141 return;142 }143 144 // ============================================================ ANIMATION 2 ON/OFF145 if (sub === "toggle2") {146 var t2Media = asObj(Bot.getProperty("shop_welcome_media2"));147 var t2Now = (Bot.getProperty("shop_welcome_anim2_on") === true);148 if (!t2Now && !validMedia(t2Media)) {149 var t2q = request ? (request.id || (request.callback_query && request.callback_query.id)) : null;150 if (t2q) { try { Api.answerCallbackQuery({ callback_query_id: String(t2q), text: "⚠️ Pehle Animation 2 upload karo", show_alert: true }); } catch (e) {} }151 return;152 }153 Bot.setProperty("shop_welcome_anim2_on", !t2Now, "boolean");154 Bot.run({ command: "/shopmedia", options: { action: "welcome" } });155 return;156 }157 158 // ============================================================ PRODUCT LIST159 if (sub === "prod") {160 User.setProperty("shopmedia_step", null, "json");161 var prods = getProducts();162 var pBtns = [];163 for (var i = 0; i < prods.length; i++) {164 var pr = prods[i];165 if (!pr) continue;166 var has = validMedia(asObj(Bot.getProperty("product_media_" + prodKey(pr, i))));167 pBtns.push([{168 text: (has ? "✅ " : "➕ ") + String(pr.name || ("Product " + (i + 1))),169 callback_data: "/shopmedia pitem " + i,170 style: has ? "success" : "primary"171 }]);172 }173 if (prods.length === 0) pBtns.push([{ text: "No Products Found", callback_data: "/shopmedia prod", style: "primary" }]);174 pBtns.push([BACK_ADMIN]);175 render(176 "<blockquote><b>PANEL VIDEO DEMO</b></blockquote>\n\n" +177 "Panel choose karo. Uska Panel Video Demo (Video/GIF) us panel ke <b>plan / key kharidne wale screen ke upar</b> dikhega.\n\n" +178 "✅ = video laga hai ➕ = abhi nahi laga",179 pBtns180 );181 return;182 }183 184 // ============================================================ ONE PRODUCT PANEL185 if (sub === "pitem") {186 User.setProperty("shopmedia_step", null, "json");187 var tgP = resolveTarget("p" + arg);188 if (!tgP) { render("⚠️ Product nahi mila. List dobara kholo.", [[{ text: "⬅️ Back", callback_data: "/shopmedia prod", style: "danger" }]]); return; }189 var pm = asObj(Bot.getProperty(tgP.prop));190 var pmOk = validMedia(pm);191 var pText =192 "<blockquote><b>" + esc(tgP.label).toUpperCase() + " — PANEL VIDEO DEMO</b></blockquote>\n\n" +193 "Is product ke key-kharidne (plan list) screen ke upar ye video/GIF dikhega.\n\n" +194 "📌 <b>Status:</b> " + (pmOk ? "✅ Set (" + kindLabel(pm) + ")" : "❌ Not set");195 var pBtn2 = [[{ text: pmOk ? "🔄 Replace Video / GIF" : "📤 Upload Video / GIF", callback_data: "/shopmedia ask p" + tgP.idx, style: "success", icon_custom_emoji_id: "5348392971207194994" }]];196 if (pmOk) {197 pBtn2.push([198 { text: "👁 Preview", callback_data: "/shopmedia preview p" + tgP.idx, style: "primary" },199 { text: "🗑 Remove", callback_data: "/shopmedia rm p" + tgP.idx, style: "danger", icon_custom_emoji_id: "6143299028655280273" }200 ]);201 }202 pBtn2.push([{ text: "⬅️ Products", callback_data: "/shopmedia prod", style: "danger", icon_custom_emoji_id: "5893163582194978381" }]);203 render(pText, pBtn2);204 return;205 }206 207 // ============================================================ ASK (upload mode)208 if (sub === "ask") {209 var tgA = resolveTarget(arg);210 if (!tgA) { render("⚠️ Target nahi mila.", [[BACK_ADMIN]]); return; }211 User.setProperty("shopmedia_step", { prop: tgA.prop, label: tgA.label, back: tgA.back, kind: tgA.kind }, "json");212 render(213 "<blockquote><b>📤 UPLOAD — " + esc(tgA.label).toUpperCase() + "</b></blockquote>\n\n" +214 "Ab yahin chat me <b>GIF</b> ya <b>MP4 video</b> bhejo.\n\n" +215 "⚠️ <b>Video / GIF</b> ke roop me bhejna (attach → Gallery). <b>File / Document</b> ke roop me mat bhejna, wo upar nahi dikhta.\n" +216 "❌ Wapas jaane ke liye <code>cancel</code> likho ya neeche Cancel dabao.",217 [[{ text: "❌ Cancel", callback_data: tgA.back, style: "danger", icon_custom_emoji_id: "5893163582194978381" }]]218 );219 return;220 }221 222 // ============================================================ SAVE (admin ne media bheja)223 if (sub === "save") {224 var step = asObj(User.getProperty("shopmedia_step"));225 if (!step || !step.prop) return;226 227 var cands = [];228 if (typeof request !== "undefined" && request) {229 cands.push(request);230 if (request.message) cands.push(request.message);231 if (request.update && request.update.message) cands.push(request.update.message);232 }233 if (typeof update !== "undefined" && update && update.message) cands.push(update.message);234 235 var found = null, fileAsDoc = false;236 for (var k = 0; k < cands.length && !found; k++) {237 var c = cands[k];238 if (!c) continue;239 if (c.animation && c.animation.file_id) found = { type: "animation", file_id: String(c.animation.file_id) };240 else if (c.video && c.video.file_id) found = { type: "video", file_id: String(c.video.file_id) };241 else if (c.document && c.document.file_id && /^(video\/|image\/gif)/i.test(String(c.document.mime_type || ""))) fileAsDoc = true;242 }243 244 if (!found) {245 var typed = (typeof message !== "undefined" && message) ? String(message).trim() : "";246 if (/^\/?cancel$/i.test(typed)) {247 User.setProperty("shopmedia_step", null, "json");248 render("❎ Cancel ho gaya.", [[{ text: "⬅️ Back", callback_data: step.back || "/shopmedia welcome", style: "danger" }]], true);249 return;250 }251 render(252 fileAsDoc253 ? "⚠️ Ye <b>file/document</b> ke roop me aaya. Please wahi video/GIF dobara <b>Video / GIF</b> ke roop me bhejo (Gallery se, 'Send as file' OFF)."254 : "⚠️ Mujhe GIF ya MP4 video chahiye. Dobara bhejo, ya <code>cancel</code> likho.",255 [[{ text: "❌ Cancel", callback_data: step.back || "/shopmedia welcome", style: "danger" }]],256 true257 );258 return;259 }260 261 Bot.setProperty(step.prop, { type: found.type, file_id: found.file_id, saved_at: new Date().toISOString() }, "json");262 User.setProperty("shopmedia_step", null, "json");263 264 render(265 "✅ <b>Saved!</b> " + (found.type === "animation" ? "GIF" : "MP4 Video") + " ab <b>" + esc(step.label) + "</b> par lag gaya.\n\nNeeche preview aa raha hai.",266 [[{ text: "⬅️ Back", callback_data: step.back || "/shopmedia welcome", style: "danger", icon_custom_emoji_id: "5893163582194978381" }]],267 true268 );269 sendPreview(found, "👁 <b>Preview</b> — " + esc(step.label));270 return;271 }272 273 // ============================================================ PREVIEW / REMOVE / CLOSE274 if (sub === "preview") {275 var tgV = resolveTarget(arg);276 var vm = tgV ? asObj(Bot.getProperty(tgV.prop)) : null;277 if (!tgV || !validMedia(vm)) { answerCb(); return; }278 sendPreview(vm, "👁 <b>Preview</b> — " + esc(tgV.label));279 answerCb();280 return;281 }282 283 if (sub === "rm") {284 var tgR = resolveTarget(arg);285 if (tgR) Bot.setProperty(tgR.prop, null, "json");286 if (tgR && tgR.prop === "shop_welcome_media2") Bot.setProperty("shop_welcome_anim2_on", false, "boolean");287 // panel dobara dikhao (ab "Not set")288 if (tgR && tgR.kind === "product") Bot.run({ command: "/shopmedia", options: { action: "pitem " + tgR.idx } });289 else Bot.run({ command: "/shopmedia", options: { action: "welcome" } });290 return;291 }292 293 if (sub === "close") {294 if (request && request.message && request.message.message_id) {295 try { Api.deleteMessage({ chat_id: me, message_id: Number(request.message.message_id) }); } catch (e3) {}296 }297 answerCb();298 return;299 }300 301 answerCb();302 303} catch (err) {304 Bot.sendMessage("⚠️ Shop Media Error: " + err.message);305}