موقع ادوات ميكروتك – صانع ملفات الهوتسبوت الكامل
📡 المولد المتقدم لملفات MikroTik Hotspot
📦 توليد وتحميل الملفات كـ ZIP (شامل مكتبة الباركود)
ملاحظة الخبير:
ستقوم هذه الأداة بإنشاء وتجميع كافة الملفات المطلوبة للمايكروتك بما فيها (login, status, logout, alogin, error, radauth, radacct, redirect).
كذلك سيتم سحب ملف html5-qrcode.min.js من الإنترنت ودمجه داخل الـ ZIP تلقائياً لتعمل الكاميرا بدون مشاكل.
${name}
الرجاء تسجيل الدخول للوصول للإنترنت
$(if error)
$(error)
$(endif)
📷 مسح الباركود باستخدام الكاميرا
$(if trial == 'yes')
$(endif)
${extraBtns}
مرحباً، $(username)
✅ جهازك متصل بالإنترنت بنجاح
عنوان IP: $(ip)
الماك أدرس: $(mac)
البيانات المحملة: $(bytes-out-nice)
البيانات المرفوعة: $(bytes-in-nice)
مدة الاستخدام: $(uptime)
$(if session-time-left)
الوقت المتبقي: $(session-time-left)
$(endif)
$(if limit-bytes-total)
إجمالي سعة الباقة: $(limit-bytes-total)
$(endif)
$(if limit-uptime)
إجمالي وقت الباقة: $(limit-uptime)
$(endif)
المتبقي من الباقة:
تاريخ الانتهاء المتوقع:
${extraBtns}
تم تسجيل الخروج
تم قطع اتصالك بالإنترنت بنجاح.
المستخدم: $(username)
الاستهلاك الكلي: $(bytes-out-nice)
وقت الجلسة: $(uptime)
🔙 العودة لصفحة الدخول
`;
// 4. توليد alogin.html
const aloginHTML = `
جاري تحويلك، يرجى الانتظار...
`;
// 4.5 توليد redirect.html (لإدارة التوجيه التلقائي)
const redirectHTML = `
جاري التحويل - ${name}
${commonCSS}
`;
// 5. توليد error.html (مهم لرسائل الأخطاء للـ Radius والمحلي)
const errorHTML = `
خطأ في الشبكة - ${name}
${commonCSS}
`;
// 6. توليد radauth.html و radacct.html (ملفات صامتة يطلبها النظام لتوافق الـ RADIUS)
const radauthHTML = `
Radius Auth `;
const radacctHTML = `
Radius Acct `;
// إضافة الملفات لمجلد الـ ZIP
zip.file("login.html", loginHTML);
zip.file("status.html", statusHTML);
zip.file("logout.html", logoutHTML);
zip.file("alogin.html", aloginHTML);
zip.file("error.html", errorHTML);
zip.file("radauth.html", radauthHTML);
zip.file("radacct.html", radacctHTML);
zip.file("redirect.html", redirectHTML);
// جلب مكتبة html5-qrcode ووضعها في الـ ZIP
try {
// نستخدم CDN رسمي يسمح بالـ CORS
const qrResponse = await fetch("https://cdnjs.cloudflare.com/ajax/libs/html5-qrcode/2.3.8/html5-qrcode.min.js");
if (qrResponse.ok) {
const qrCodeText = await qrResponse.text();
zip.file("html5-qrcode.min.js", qrCodeText);
} else {
throw new Error("فشل الجلب");
}
} catch (error) {
console.error("لم نتمكن من جلب مكتبة الـ QR تلقائياً:", error);
// ملف نصي بديل كخطة (B) في حال حظر المتصفح للاتصال
zip.file("README_QR_ERROR.txt", "يرجى تحميل مكتبة الكاميرا يدوياً من الرابط التالي وتسميتها html5-qrcode.min.js ووضعها في نفس هذا المجلد: \nhttps://github.com/mebjas/html5-qrcode/releases/download/v2.3.8/html5-qrcode.min.js");
}
// إنشاء ملف الـ ZIP النهائي وتنزيله
zip.generateAsync({ type: "blob" }).then(function(content) {
const link = document.createElement("a");
link.href = URL.createObjectURL(content);
link.download = "Hotspot_" + name.replace(/\s+/g, '_') + ".zip";
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
// إعادة الزر لحالته الطبيعية
btn.disabled = false;
btnText.textContent = "✅ تم التحميل! (انقر للتوليد مجدداً)";
loader.style.display = "none";
}).catch(function(err){
alert("حدث خطأ أثناء إنشاء الملف المضغوط: " + err);
btn.disabled = false;
btnText.textContent = "📦 توليد وتحميل الملفات كـ ZIP";
loader.style.display = "none";
});
}