Muhammad Hewedy
Muhammad Hewedy

@mohewedy

24 تغريدة 4 قراءة May 30, 2024
من فتره كان عندنا مشكله في طلب الغدا في الشغل
و المشكله هي، مين يطلب النهارده، و خصوصا ان المجموعه اللي بتطلب الأكل كل يوم مش ثابته.
المهم المشكله دي كانت بتسبب تأخير الطلب بشكل كبير، عقبال ما نرسى على مين هيطلب
عشان نحل المشكله دي، فكرت لو عملنا بوت يختار اسم بشكل عشوائي كل يوم، و بكده يريحنا من الحيره دي، و خصوصا أنا قبل كده كنت جربت أعمل شات بوت في تليجرام (عشان يبعتلي رساله في حال ان احد المواقع اللي كنت شغال عليها حصل فيه مشاكل ما) و الموضوع كان سهل
اول خطوه هي اننا كنا محتاجين ننقل جروب الغدا من الواتساب لتليجرام
بعد كده روحت أنشأت بوت في تليجرام عن طريق ال @TelegramBot و الموضوع مش بياخد أكتر من دقيقتين
المهم نيجي بقى لوقت الكود
البوت في تليجرام بيحتاج تكتب كود عشان يقدر يستلم الرسايل اللي بتتبعت ف الشات و يرد عليها
فيه sdk موجوده للغات كتير تقدر تستخدمها عشان تبرمج البوت، بس أنا قررت اني استعمل python و استخدم python-telegram-bot و دي مكتبه كبيره و ليها docs لا بأس به
المهم بدأت أكتب البوت بحيث يكون بيدعم اكتر من أمر
و أهم أمر عملته اسمه yalla و ده لما بيوصل للبوت، البوت بيروح يختار اسم عشوائي و هو اللي هيطلب الغدا
طب "يلا" ده هيختار من مين بالظبط؟ من كل الناس ف الجروب؟
أكيد لأ… هيختار بس من الناس اللي بدأت تحط طلباتها في الجروب
مبدأيا كده انا هبعت ابعت رساله من البوت الساعه ١١ الصبح بتقول يلا يا شباب ضيفوا طلابتكم، و من الوقت ده بروح اشوف مين اللي بيكتب في الجروب
و أي حد هيكتب ف الجروب هاخد اسمه احطه في list و دي الليسته اللي ههختار منها اسم عشوائي
(خد بالك كل الام لحد دلوقتي في ال memory، و ده سبب مشكله و حليتها بعدين زي ما هنشوف)
موضوع اختيار اسم حد عشوائي من الناس اللي كتبت ف الجروب مش دقيق
عشان احيانا حد بيدخل يروش و حقيقي هو مش هيطلب ولا حاجه
طب ازاي بقى هعرف اذا كان اللي مكتوب هنا طلب أكل ولا لأ؟
هنا بقى جه دور ال ai chat api
أول حاجه جربتها روحت فتحت chatgpt و سألته اذا كان الكلام ده فيه اسم أكل او لا "دجاج" قالي اه حيث ان مش عارف ايه و ايه …
ايه الحوسه دي، هعمل parse للرد ده ازاي؟!
فكرت اني اغير السؤال و اقوله جاول ب yes or no
و هنا فعلا عمل زي منا عاوز منه بالظبط
روحت جربت كذا حد تاني منهم google gemini و سألته نفس السؤال على أكلات عربيه معروفه، و لقيت أشطر واحد فيهم هو chatgpt
فقولت خلاص لما اروح chatgpt و أشوف موضوع ال api ده قصته ايه
المهم دخلت معرفتش الحسبه ازاي، قولت خليني اشوف حاجه مجانيه و فعلا لقيت مكتبه اسمها g4f في البايثون
(يبدوا إنّ بايثون كان خيار جيد من البدايه 😁)
المهم بدأت استخدم المكتبه دي و أسألها نفس السؤال مع بعض التعديلات، و كانت النتايج مبشره
الموضوع مر بمجموعة تعديلات
لكن بالنهايه الموضوع مشي كالتالي
أول حاجه الساعه ١١ الصبح بنبعت الرساله للناس و بروح أفضي الليسته بتاعة الطلبات من طلبات امبارح
و عملت function اسمها is_food و بتاخد أي كلام بتكتب ف الشات و تروح لو أكل بتضيفه ف الليسته ( مع اسم صاحب الطلب و معلومات تانيه)
و عمل أمر اسمه list عشان يعرض الطلبات
و أمر اسمه add عشان لو ال chatgpt معرفش يتعرف ع الأكل فمكن ينضاف بشكل يدوي
و مدام فيه add يبقى لازم يكون فيه delete
و أمر اسمه list عشان يعرض الطلبات
و أمر اسمه yalla عشان يختار اسم من الناس اللي ضافت الطلبات
و انا كده كل اللي محتاجه مكان اشغل فيه الابلكيشن في ال memory و مش محتاج اخزن حاجه
و كل الناس عاشت في سعاده
لحد ما جاء اليوم اللي حصل فيه اللي حصل ….
قبل ما أقول حصل ايه، و بما ان الأوفرانجينيرنج يمشي في الدماء
انا لاحظت ان المكتبه بتاعة ال python اللي اسمها python-telegram-bot مكتبه عامه جدا، و لقيت فرصه اني ابني فوقها مكتبه تكون متخخصه بشكل أكبر بحيث تسهل بناء ال chatbots البسيطه
وقد كان … عملتها و سميتها telebot
و بكده بقى عندي ابلكيشن و سميته lunchy مفيهوش غير ال logic اللي اتكلمت عنه فوق، و اي تعامل مع ال telegram api حطيته في المكتبه اللي اسمها telebot
زي المثال اللي في الصوره دي،
عشان تعمل chat app مش مضطر تفهم ال bot api شغاله ازاي
نرجع بقى للمشكله اللي حصلت خليتني اغير في الابلكيشن و اخليه يخرن الطلبات
في يوم الشباب بدأو يضيفو طلباتهم، و كان فيه مشكله في ال g4f المكتبه المجانيه اللي بتكلم chatgpt ممكنتش بترد عليهم (المفروض ان اي طلب يتكتل و يتم تصنيفه كأنه أكل، البوت بيرد بأنه تمت الإضافه زي الصوره كده)
في اليوم ده مكنش فيه رد، دخلت أبص على اللوجز شوفت ال g4f مش بيرد، فقولت الناس، معلش ضيفم طلباتكم النهارده يدوي باستخدام الأمر add
المهم بدأو يضيفو طلباتهم و بعد شويه بيعملو list لقو مفيش طلبات 😱
ده معناه ان الابلكيشن حصله كراش و ال PaaS عمله ريستارت 😩
و من الساعه دي قررت اني محتاج اخزن الطلبات على ال disk
و برده فكرت أعمل cache للأكل عشان بدل ما كل مره أروح ل chatgpt اروح اجيب المعلومه من ال cache على طول
و قد كان، بنيت storage service بسيطه باستخدام الfiles في البايثون و بقت بتخزن و بتسترجع بشكل reliable حتى لو حصل ريستارت
الجدير بالذكر اني بنيت selection algo معقد شويه بحيث يستثني اخر اتنين طلبو
و لما عرّفت الشباب بقو يروحو يعملو yalla من بدري قبل ما حد يصيف اكل عشان اسمهم ينضاف و يتم استثناءهم من الاسماء، فاضطريت اني اخلي الدنيا بسيطه و اخلي الدنيا random بشكل بسيط و محسبش ال selection history
و الحمد لله البوت دلوقتي بقى شغال بشكل كويس، و كل يوم يلبس حد من الشباب 😂
بس حقيقي انا افتقدت كل يوم اننا نقعد نص ساعه نتناقش عشان نشوف مين هيطلب و مين طلب امتى آخر مره😏
ملاحظه، الشباب لحد النهارده كانو متأكدين اني شايل اسمي من الاختيارات، لاني من ساعة ما بدأنا و لمدة اسبوعين تقريبا، اسمي اول مره يتم اختياره اليوم 😂
و اخيرا happy coding!

جاري تحميل الاقتراحات...