لماذا Rust هي الرصاصة في "عقل" روبوت الدردشة الخاص بك
\n\nإذا كنت معتادًا على كتابة الروبوتات بلغة Python وتعتقد أنه لا يوجد شيء أسرع — فأنت لم تجرب Rust. Rust لا يوفر السرعة فحسب، بل يمنحك التحكم في كل بايت. روبوتات الدردشة بلغة Rust تعمل بسرعة البرق، وتستهلك القليل من الذاكرة، ولا تتعطل بأخطاء وقت التشغيل. في هذا الدليل، سنقوم ببناء روبوت تلغرام حقيقي يعالج الأوامر، ويستجيب للرسائل، ويفعل ذلك بأداء لا يمكن للغات المفسرة تحقيقه.
\n\nسنكتب الروبوت من الصفر باستخدام الكريتات teloxide و reqwest. سترى كيف يتعامل Rust غير المتزامن بسهولة مع آلاف الطلبات، ولماذا إنشاء روبوت دردشة بلغة Rust هو استثمار في استقرار مشروعك.
إعداد البيئة والتشغيل الأول
\n\nقبل كتابة الكود، تأكد من تثبيت Rust. إذا لم يكن مثبتًا، قم بتنفيذ:
\n\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\nأضف cargo إلى PATH وأنشئ مشروعًا جديدًا:
cargo new rust_tg_bot\ncd rust_tg_bot\n\nالآن افتح Cargo.toml وأضف التبعيات:
[dependencies]\nteloxide = { version = "0.12", features = ["macros"] }\nreqwest = { version = "0.11", features = ["json"] }\ntokio = { version = "1", features = ["full"] }\nserde = { version = "1.0", features = ["derive"] }\n\nهذه الكريتات هي أساس الروبوت الخاص بنا. teloxide هو إطار عمل قوي لواجهة برمجة تطبيقات تلغرام، و reqwest سيسمح لنا بعمل طلبات HTTP (على سبيل المثال، لواجهات برمجة التطبيقات الخارجية).
الحصول على الرمز المميز وكتابة "الهيكل العظمي" للروبوت
\n\nادخل إلى @BotFather، وأنشئ روبوتًا جديدًا وانسخ الرمز المميز. احفظه في متغير بيئة:
\n\nexport TELOXIDE_TOKEN=الرمز_المميز_هنا\n\nالآن سنكتب أبسط نسخة من الروبوت تستجيب للأمر /start:
use teloxide::prelude::*;\n\n#[tokio::main]\nasync fn main() {\n pretty_env_logger::init();\n log::info!("نقوم بتشغيل روبوت الدردشة بلغة Rust...");\n\n let bot = Bot::from_env();\n\n teloxide::repl(bot, |bot: Bot, msg: Message| async move {\n if let Some(text) = msg.text() {\n if text == "/start" {\n bot.send_message(msg.chat.id, "مرحبًا! أنا بوت بلغة Rust 🦀")\n .await?;\n }\n }\n Ok(())\n })\n .await;\n}\n\nقم بتشغيل cargo run واكتب للروبوت /start. إذا كان كل شيء على ما يرام — ستتلقى تحية. لاحظ: كتابة بوت بلغة Rust باستخدام teloxide يتطلب الحد الأدنى من الكود، لكنه يعطي أقصى أداء.
كيف يعمل هذا؟
\n- \n
Bot::from_env()— يقرأ الرمز المميز من متغير البيئةTELOXIDE_TOKEN. \n teloxide::repl— حلقة لا نهائية لمعالجة الرسائل. \n - يتم تمرير كل رسالة إلى الإغلاق، حيث نتحقق من النص ونرسل الرد. \n
إضافة معالجة الأوامر والوسائط
\n\nالرد البسيط ممل. دعنا نصنع أمر /echo الذي يكرر نص المستخدم. لهذا سنستخدم تعليمة Command من teloxide:
use teloxide::utils::command::BotCommand;\n\n#[derive(BotCommand)]\n#[command(rename = "lowercase", description = "الأوامر المتاحة:")]\nenum Command {\n #[command(description = "عرض التحية.")]\n Start,\n #[command(description = "تكرار نصك.")]\n Echo(String),\n}\n\nasync fn answer(bot: Bot, msg: Message, cmd: Command) -> ResponseResult<()> {\n match cmd {\n Command::Start => {\n bot.send_message(msg.chat.id, "مرحبًا! أنا بوت الصدى بلغة Rust.").await?;\n }\n Command::Echo(text) => {\n bot.send_message(msg.chat.id