📌 تفضيل دائم (د. وائل 2026-07-21): أوامر التشغيل تحت كل سكربت
- عند تسليم أي سكربت/أداة → أُرفق أوامر التشغيل + التثبيت + الاستخدام مباشرةً تحته بتعليقات منظّمة (# شرح فوق كل أمر).
- الهدف: كل شيء حاضر ومرتّب في مكان واحد، بلا حاجة للبحث أو السؤال لاحقاً.
- ينطبق على كل سكربت قادم بلا استثناء (server + laptop). + أدوات CLI بالإنجليزية افتراضياً (تفضيل سابق نفس اليوم).
🤖 Local Bot Setup — @WaelArsenalLocal_bot (لابتوب د. وائل) — 2026-07-21
الهدف: بوت تيليجرام محلي منفصل يعمل بالتوازي مع البوت الحيّ (@hostwopenclawbot) على السيرفر، لاستخدام النسخة المحلية على اللابتوب حين تعمل.
🔴 الدرس الأخطر (خط أحمر دائم — لا يتكرر):
❌ ممنوع منعاً باتاً وضع توكن/سر «مُخفَّى للعرض» داخل سكربت تنفيذي فعلي.- كتبتُ في الأوفررايد التوكن المعروض المخفى
860760…Dmno— حرف الحذف…= بايتات UTF-8e2 80 a6(U+2026) → توكن غير صالح → تيليجرام رفضه بـ 404 (deleteWebhook/setMyCommands failed 404) + حلقة auto-restart لا نهائية. - القاعدة: أي سر يدخل سكربت = التوكن الكامل الحقيقي حصراً، ويُفضَّل جلبه برمجياً وضخّه مباشرة (read من ملف) بلا إعادة كتابة يدوية إطلاقاً — لتجنّب (أ) التحريف بالحذف/الإخفاء و(ب) الهلوسة.
- التحقق الآمن من صلاحية توكن = استدعاء
getMe(لا يبدأ polling، لا يسبّب تعارض 409).
🏗️ بنية اللابتوب (مهمة للمستقبل):
- الحاوية المحلية =
openclaw-local(Docker داخل WSLkali-linux). - جذر الاستعادة =
~/restore2/docker/openclaw-4x4t/؛ الكونفيغ =.../data/.openclaw/openclaw.json. - compose =
docker-compose.local.yml(service name =openclaw). - الغلاف
server.mjsيقرأ متغيّر البيئةTELEGRAM_BOT_TOKENويكتبه فوق الكونفيغ عند كل إقلاع → تعديل openclaw.json مباشرةً للتوكن يُداس. الحل الصحيح = ضبط التوكن عبرdocker-compose.override.yml(environment: TELEGRAM_BOT_TOKEN) ثمdocker compose up -d. - البوت الحيّ (السيرفر) = @hostwopenclawbot. التوأم المحلي يجب أن يحمل توكناً مستقلاً تماماً — نفس التوكن على اثنين = 409 getUpdates Conflict (بولّرين على نفس التوكن).
- whatsapp على المحلي يُترك مُطفأً لتفادي تنازع «الجهاز المرتبط» بنفس رقم د. وائل.
🔧 أدوات أُنشئت (skills/telegram-client/):
create_bot_botfather.py— ينشئ بوتاً جديداً عبر BotFather (StringSession من env: TELEGRAM_CLIENT_SESSION + TELEGRAM_CLIENT_API_ID/HASH).get_bot_token.py— يجلب توكناً صالحاً عبر/tokenمن BotFather + يتحقّق بـ getMe + يكتبه إلى/tmp/realtoken.txt(بلا طباعة السر).
📋 سلوك (تأكيد د. وائل، بنبرة حادّة محقّة):
- احترافية من أول أمر: الأمر يجب أن يعمل من اللصقة الأولى — لا تعثّرات اقتباس PowerShell، لا خطأ نوع (allowFrom نص لا رقم). هو مشغول/في محاضرات ولا يريد إضاعة وقت في تشخيص أخطائي.
- كل الأوامر في صناديق كود قابلة للنسخ (تأكيد التفضيل الدائم أعلاه).
- المصداقية: صرّحتُ بوضوح أن أمر تعطيل telegram الأول لم يصدر منّي، ثم اعترفتُ صراحةً بخطأ الـ ellipsis token حين ثبت بالـ hex. الاعتراف بالخطأ الحقيقي فور ثبوته = ملزم.
دروس PowerShell/WSL:
- PowerShell لا يفهم
~،chmod، heredoc،/dev/nullبصيغة يونكس → أوامر يونكس تُمرَّر عبرwsl -d kali-linux -- bash -lc '...'، والأفضل تغليفها base64 (echo <b64> | base64 -d | bash) لتفادي مشاكل الاقتباس/الأحرف العربية تماماً.
WhatsApp fix (13:xx) — تعارض حسابين في نفس القروب
- العرض: "typing ثم يتوقف بلا رد" + flapping اتصال (499/503/428/408 عشرات المرات).
- السبب الجذري: حسابا WhatsApp مفعّلان معاً في نفس القروب → تعارض جلسات:
- قرار د. وائل: أبقِ +96565830235 (bot)، عطّل الشخصي.
- الإصلاح: edit مباشر لـ openclaw.json → accounts.default.enabled=false · accounts.bot.enabled=true (M-049: enabled محميّ = edit لا patch). backup: backups_config_openclaw.json.20260721_130548
- بعد restart: "[bot] starting provider (+96565830235)" فقط — default لم يبدأ. flapping=0. gateway ready + listening. creds الاثنين محفوظة على القرص (عكوس، غير مُدمِّر).
- منفصل (لم يُعالَج بعد): gateway warning "config path not found: channels.telegram.accounts" — lookup حميد، بانتظار قرار د. وائل.