روبوتات الدردشة بلغة Rust: من الفكرة إلى بوت جاهز في أمسية واحدة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

لماذا Rust هي الرصاصة في "عقل" روبوت الدردشة الخاص بك

\n\n

إذا كنت معتادًا على كتابة الروبوتات بلغة Python وتعتقد أنه لا يوجد شيء أسرع — فأنت لم تجرب Rust. Rust لا يوفر السرعة فحسب، بل يمنحك التحكم في كل بايت. روبوتات الدردشة بلغة Rust تعمل بسرعة البرق، وتستهلك القليل من الذاكرة، ولا تتعطل بأخطاء وقت التشغيل. في هذا الدليل، سنقوم ببناء روبوت تلغرام حقيقي يعالج الأوامر، ويستجيب للرسائل، ويفعل ذلك بأداء لا يمكن للغات المفسرة تحقيقه.

\n\n

سنكتب الروبوت من الصفر باستخدام الكريتات teloxide و reqwest. سترى كيف يتعامل Rust غير المتزامن بسهولة مع آلاف الطلبات، ولماذا إنشاء روبوت دردشة بلغة Rust هو استثمار في استقرار مشروعك.

\n\n

إعداد البيئة والتشغيل الأول

\n\n

قبل كتابة الكود، تأكد من تثبيت Rust. إذا لم يكن مثبتًا، قم بتنفيذ:

\n\n
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
\n\n

أضف cargo إلى PATH وأنشئ مشروعًا جديدًا:

\n\n
cargo new rust_tg_bot\ncd rust_tg_bot
\n\n

الآن افتح Cargo.toml وأضف التبعيات:

\n\n
[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

الحصول على الرمز المميز وكتابة "الهيكل العظمي" للروبوت

\n\n

ادخل إلى @BotFather، وأنشئ روبوتًا جديدًا وانسخ الرمز المميز. احفظه في متغير بيئة:

\n\n
export TELOXIDE_TOKEN=الرمز_المميز_هنا
\n\n

الآن سنكتب أبسط نسخة من الروبوت تستجيب للأمر /start:

\n\n
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

كيف يعمل هذا؟

\n
    \n
  • Bot::from_env() — يقرأ الرمز المميز من متغير البيئة TELOXIDE_TOKEN.
  • \n
  • teloxide::repl — حلقة لا نهائية لمعالجة الرسائل.
  • \n
  • يتم تمرير كل رسالة إلى الإغلاق، حيث نتحقق من النص ونرسل الرد.
  • \n
\n\n

إضافة معالجة الأوامر والوسائط

\n\n

الرد البسيط ممل. دعنا نصنع أمر /echo الذي يكرر نص المستخدم. لهذا سنستخدم تعليمة Command من teloxide:

\n\n
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                

المدونات

توصيات الكتب