التشغيل الفعلي
أبقِ البوت يعمل أشهرًا: أين تستضيفه، وكيف يتعافى، وماذا يسجل.
ما تحتاج إليه
جهاز يبقى مشغلًا وعليه Node 22 أو أحدث. يكفي سيرفر افتراضي صغير لمعظم البوتات. حاسوبك المحمول مناسب للاختبار فقط: يتوقف البوت حين ينام الحاسوب.
ينشئ البوت اتصالات صادرة فقط. لا يحتاج إلى منفذ مفتوح، إلا مع تفاعلات HTTP أو فحص صحة من الخارج.
شغّله كخدمة
لا بد من شيء يشغّل البوت عند الإقلاع وبعد أي تعطل. مع systemd:
# /etc/systemd/system/zrzur-bot.service
[Unit]
Description=Zrzur bot
After=network-online.target
[Service]
WorkingDirectory=/srv/bot
ExecStart=/usr/bin/node full-bot.mjs
EnvironmentFile=/srv/bot/.env
Restart=always
RestartSec=5
User=bot
[Install]
WantedBy=multi-user.targetsudo systemctl enable --now zrzur-bot
journalctl -u zrzur-bot -fيعمل Docker بالطريقة نفسها: docker run --restart=always --env-file .env.
التوقف النظيف
عند SIGTERM أغلق البوابة ودع العمل الجاري ينتهي. احفظ بياناتك بالكتابة إلى ملف ثانٍ ثم إعادة تسميته، كي لا يترك التعطل نصف ملف.
إعادة الاتصال
إعادة الاتصال مهمة بوتك. اتبع البوابة: إعادة الاتصال، وراقب الصمت بإرسال Ping كل 20 ثانية وحد 60 ثانية دون Pong.
لا تتوقف نهائيًا إلا عند InvalidSession ورمز الإغلاق 4014. كل ما عداهما مؤقت. البوت الذي يخرج عند هذين يحتاج إلى شخص، فتأكد أن مدير العمليات لا يقصف البوابة: RestartSec=5 ينتظر بين المحاولات.
لا يوجد استئناف. بعد كل Ready اجلب ما لا يجوز أن يفوتك.
سجّل ما يفيد
اكتب سطرًا واحدًا لكل حدث، بصيغة JSON، إلى المخرج القياسي. يحتفظ به مدير الخدمة.
{"time":"2026-11-06T07:02:51.576Z","level":"info","message":"ready","servers":1}
{"time":"2026-11-06T07:02:51.728Z","level":"info","message":"interaction","kind":"Command","name":"ping","ms":20}سجّل الوقت ونوع التفاعل والأمر والمدة وtype الخطأ. لا تسجل أبدًا الرموز أو نص الرسائل.
نبّه عند هذه الحالات:
- تكرر أسطر
ready: الاتصال غير مستقر. - تفاعلات تتجاوز ثانيتين: أنت قريب من حد الثلاث ثوانٍ.
- إجابات
429: ترسل أكثر مما ينبغي. InvalidSession: تغير الرمز.
أخرج العمل البطيء من المعالج
رد بـDeferredMessage، وضع العمل في طابور، وعدّل الرد عند انتهائه. لا تعطل حلقة البوابة: البوت الذي يتوقف عن قراءة مقبسه يفوته Pong الخاص به.
تحقق من أنه حي
عنوان HTTP صغير يخبر المراقب أن البوت يعمل. انظر درس النشر.
النمو
- بعد 100 سيرفر تحتاج إلى التوثيق. انظر حد السيرفرات والتوثيق.
- لا توجد تجزئة. عملية واحدة تستقبل كل شيء، فأبقِ معالجاتك صغيرة.
- خزّن ما تخبرك به الأحداث بدل جلبه. حصة
serversصغيرة.
التحديثات
تكلف إعادة التشغيل بضع ثوانٍ، وتفشل الأوامر المستخدمة خلالها. سجّل الأوامر عند البدء إذا تغيرت فقط: PUT آمن، لكنه يُحسب من حد المعدل.
قائمة تحقق
- الرمز في مخزن أسرار وليس في Git.
- يعيد البوت تشغيل نفسه بعد التعطل وبعد إعادة الإقلاع.
- يعيد الاتصال بانتظار متزايد.
- يتوقف عند
InvalidSessionو4014. - يسجل بصيغة JSON بلا أسرار.
- العمل البطيء مؤجل.
- يلتزم بـ
429، و429العام يوقف كل شيء.