نقل بوت Telegram من PythonAnywhere أو Replit أو Railway أو حاسوبك يعني نسخ ملفاته، ولصق الرمز نفسه، وتحويله إلى الاستطلاع (polling) إن كان يستخدم webhook، ثم تشغيله هنا بعد إيقاف النسخة القديمة. يبقى الرمز كما هو، فيحتفظ البوت بمعرّفه @username ومحادثاته ومستخدميه. الخطوات:
- اطلب باقة بوت معدّة لـ Telegram، باللغة التي كُتب بها بوتك.
- انسخ ملفاتك في Files (ملف zip، رفع، فك الضغط)، أو عبر SFTP، أو من Git، مع
requirements.txtأوpackage.json. - اضبط ملف البدء وبيئة التشغيل في صفحة البوت، قسم الكود.
- الصق الرمز في صفحة البوت، قسم Telegram، واضغط ربط.
- استورد إعداداتك الأخرى بـ لصق ملف .env في قسم البيئة.
- إذا كان بوتك يستخدم webhook، حوّله إلى الاستطلاع.
- أوقف النسخة القديمة، واضغط تشغيل هنا، وراقب Console حتى يسجّل بوتك الدخول.
نشرح كل خطوة أدناه.
قبل أن تبدأ
- اجمع كود البوت وملفات بياناته (ملفات SQLite وملفات JSON والإعدادات المحفوظة) في مجلد واحد. من الاستضافة القديمة نزّلها ملف zip أو انسخها من مستعرض الملفات فيها.
- دوّن كل إعداد كانت الاستضافة القديمة تعطيه لبوتك: ملف
.envأو المتغيرات التي ضبطتها في لوحتها. - خطّط لإيقاف النسخة القديمة قبل تشغيل الجديدة مباشرة. يسمح Telegram لنسخة واحدة فقط من البوت بطلب الرسائل: تزيح النسختان إحداهما الأخرى مع
409 Conflict.
1. اطلب باقة معدّة لـ Telegram
في استضافة بوت Telegram اضغط أنشئ سيرفرًا على إحدى الباقات، وأجب عن لأي منصة بوتك؟ باختيار Telegram، واختر لغة بوتك: Node.js أو Python أو Java أو C# (.NET) أو Bun أو Deno أو Go أو Rust. تكفي STARTER (0.5 GB) لمعظم البوتات: راجع python-telegram-bot مقابل aiogram على PlayNHost لمعرفة الذاكرة التي قسناها.
لديك باقة بوت معدّة لـ Discord؟ في صفحة البوت، قسم Discord، بطاقة لأي منصة هذا البوت؟، اختر Telegram وأكّد بـ تبديل. اللغة خاطئة؟ في قسم الكود اضغط تغيير ما يعمل بجانب بيئة التشغيل.
2. انسخ الملفات
- بوت صغير: اضغط المجلد في ملف zip، وارفع الملف في Files، وحدّده واضغط فك الضغط.
- مجلد كبير: استخدم SFTP. تعطيك بيانات SFTP في Files العنوان، وتسجّل الدخول بكلمة مرور لوحتك.
- الكود على GitHub: اربط المستودع بدل ذلك، وارفع ملفات بياناتك فقط. راجع كيف تنشر بوتك وتحدّثه من GitHub.
لا ترفع venv و.venv و__pycache__ وnode_modules: يثبّت السيرفر الحزم بنفسه. مجلدك الرئيسي هنا هو /home/container. إذا كان كودك يفتح ملفات البيانات بمسار كامل من الاستضافة القديمة (مثل /home/yourname/mybot/data.db)، فغيّره إلى مسار نسبي إلى المجلد الرئيسي. المزيد: كيف ترفع كود بوتك.
3. الحزم وملف البدء
ربما ثبّتّ الحزم يدويًا في Console على الاستضافة القديمة. هنا تأتي من ملف:
- Python: ملف
requirements.txtفيه حزمة في كل سطر، مثلpython-telegram-botأوaiogram. اكتب أسماء الحزم التي يستوردها كودك. اسم ملف آخر أو مجلد آخر؟ اضبطه تحت ملف المتطلبات في بطاقة الإعدادات بقسم الكود. - Node.js وBun: ملف
package.jsonمعdependencies.
في Python وNode.js وBun تُثبَّت الحزم عند أول تشغيل. بعد ذلك تُثبَّت من جديد فقط عندما تغيّرها (قائمة الحزم أو ملف الحزم أو إصدار بيئة التشغيل)، أو عندما يغيب node_modules، أو مرة كل يوم. وفي ما بين ذلك تقول Console:
[PlayNHost] Packages are up to date. They install again when you change them, or after a day.
في صفحة البوت، قسم الكود، بطاقة طريقة التشغيل، اضبط ملف البدء على الملف الذي كانت استضافتك القديمة تشغّله (مثل main.py أو src/index.js؛ والافتراضيان bot.py وindex.js) واختر إصدار بيئة التشغيل نفسه. اضغط زر حفظ بجانب كل حقل تغيّره. التفاصيل لكل لغة: Python، Node.js.
4. الرمز
- في صفحة البوت، قسم Telegram، الصق رمز البوت واضغط ربط. تتحقق اللوحة منه لدى Telegram وتعرض @username بوتك. فقدته؟ في @BotFather أرسل
/mybots، واختر بوتك، ثم API Token. - يحصل كودك على الرمز باسم
TELEGRAM_BOT_TOKEN، وكذلك باسمBOT_TOKENوTOKENوTELEGRAM_TOKENوTELOXIDE_TOKEN. إذا كان كودك يقرأ اسمًا آخر، فغيّر ذلك السطر إلى أحد هذه الأسماء. - إذا كان الرمز مكتوبًا في كودك أو في ملف
config.json، فاستبدله بمتغير البيئة، مثلos.environ["TELEGRAM_BOT_TOKEN"]في Python أوprocess.env.TELEGRAM_BOT_TOKENفي Node.js. واحذفه من أي ملف.envرفعته.
5. الإعدادات الأخرى
- افتح قسم البيئة واضغط لصق ملف .env.
- الصق ملف
.envالقديم أو المتغيرات من لوحة استضافتك القديمة. يُعلَّم سطر الرمز بـ تم التخطي مع يوضع رمز Telegram الخاص بك في صفحة البوت، ثم Telegram، لذلك يتم تخطي هذا السطر. يقرؤه كودك باسم TELEGRAM_BOT_TOKEN، وكذلك باسم BOT_TOKEN وTOKEN وTELEGRAM_TOKEN وTELOXIDE_TOKEN. - راجع القائمة (الأسماء التي تبدو أسرارًا تحصل على شارة سر) واضغط زر الاستيراد، مثل استيراد 3 متغير.
تستخدم python-dotenv؟ متغيرات البيئة موجودة أصلًا في os.environ، ولا يستبدلها load_dotenv(). كانت لديك قاعدة بيانات MySQL؟ أنشئ واحدة في صفحة قواعد البيانات: كيف تستخدم قاعدة بيانات مع بوتك.
6. من webhook إلى الاستطلاع
تشغّل بعض الاستضافات البوت عبر webhook، مثلًا من خلال تطبيق ويب على PythonAnywhere. هنا يستخدم بوتك الاستطلاع الطويل (long polling): يسأل Telegram عن الرسائل الجديدة ولا يحتاج إلى عنوان خاص به. يحتاج webhook إلى عنوان HTTPS عام، ولا تتضمنه هذه الباقات حاليًا. غيّر بداية تشغيل بوتك:
| المكتبة | احذف | استخدم |
|---|---|---|
| python-telegram-bot | application.run_webhook(...) | application.run_polling() |
| aiogram 3 | تطبيق aiohttp مع SimpleRequestHandler | await dp.start_polling(bot) |
| pyTelegramBotAPI | bot.set_webhook(...) ومسار Flask | bot.infinity_polling() |
| grammY | webhookCallback(bot, ...) | bot.start() |
| Telegraf | bot.launch({ webhook: ... }) | bot.launch() |
لا حاجة هنا إلى سيرفر ويب صغير كان وظيفته الوحيدة إبقاء البوت مستيقظًا في الاستضافة القديمة: البوت يعمل طوال الوقت.
يبقى webhook معيّنًا على بوتك لدى Telegram إلى أن يزيله شيء ما. تزيله python-telegram-bot وgrammY بنفسيهما عند بدء الاستطلاع. ومع كود آخر يعرض قسم Telegram تم تعيين webhook لهذا البوت: اضغط إزالة الـ webhook وأكّد. تبقى الرسائل المنتظرة محفوظة، فيجلبها بوتك هنا.
7. انتقل إلى الاستضافة الجديدة
- أوقف البوت على الاستضافة القديمة: مهمة تعمل دائمًا أو مهمة مجدولة على PythonAnywhere، أو نشر على Replit أو Railway، أو النافذة الطرفية أو السكربت على حاسوبك.
- اضغط تشغيل هنا وراقب Console حتى يسجّل بوتك الدخول. اطبع سطرًا مثل
Logged in as @your_botعندما يصبح جاهزًا: عندها تتحول الشارة في نظرة عامة إلى متصل في Telegram. - أرسل أمرًا إلى بوتك في Telegram. ثم ألغِ الاستضافة القديمة.
إذا لم يعمل شيء
- إذا ظهر بوتك يعمل في مكان آخر أيضًا فوق Console: فالنسخة القديمة لا تزال تعمل. أوقفها ثم أعد التشغيل هنا. راجع إصلاح خطأ 409 Conflict في بوت Telegram.
- تم تعيين webhook لبوتك: اضغط إزالة الـ webhook ثم أعد التشغيل.
- اسم ملف خاطئ أو لغة خاطئة أو حزمة ناقصة يظهر في الثواني الأولى من Console، وغالبًا في شريط تنبيه. راجع لماذا يتوقف بوتك باستمرار.
- يبدأ البوت لكنه فقد بياناته: تحقق من أن ملفات البيانات احتفظت ببنية المجلدات نفسها، وأن كودك يفتحها بمسار نسبي إلى
/home/container.



