PDA

View Full Version : درست کردن آزمون در bot تلگرام با استفاده از php



alipc1
دوشنبه 10 خرداد 1395, 21:48 عصر
بنده قصد درست کردن یک روبات آزمون گیر برای تلگرام دارم ولی مشکلاتی مواجهه شدم. یکی از مشکلات اصلی که دارم در گرفتن اطلاعات از کاربر هست. وقتی کاربر وارد آزمون میشه سمت سرور که با php نوشته شده باید حالت پرسش و پاسخ داشته باشه یعنی در هر سوالی که از کاربر پرسیده میشه باید منتظر جواب کاربر باش و وقتی جوابی از کاربر گرفت سوال بعدی رو بپرس.
مشکل بنده در بخش استفاده از تابعی مانندکد PHP:

Readline()


هستش که منتظر کاربر بمونه برای گرفتن جواب!!! ولی کد php نوشته شده سمت سرور به صورت کامل اجرا میشه و اصلا حالت انتظار برای گرفتن جواب از کلاینت رو نمیشه در php پیاده سازی کرد :| ....
سعی کردم با استفاده از db این مشکل رو حل کنم ولی استفاده از db هم سرعت رو خیلی میاره پایین چون در هر بار سوال و پاسخ حداقل دو query برای واکشی سوال و ثبت در db لازم هست. http://ashiyane.org/forums/images/smilies/sadsmiley.gif

لطفا اگر میتونین راهنمایی کنین چطور میتونم بدون اینکه کد تا آخر خونده بشه مثل تابه Readline() مقداری کاربر بگیرم ؟؟

joker
سه شنبه 11 خرداد 1395, 11:01 صبح
هستش که منتظر کاربر بمونه برای گرفتن جواب!!! ولی کد php نوشته شده سمت سرور به صورت کامل اجرا میشه و اصلا حالت انتظار برای گرفتن جواب از کلاینت رو نمیشه در php پیاده سازی کرد :| ....


سعی کردم با استفاده از db این مشکل رو حل کنم ولی استفاده از db هم سرعت رو خیلی میاره پایین چون در هر بار سوال و پاسخ حداقل دو query برای واکشی سوال و ثبت در db لازم هست.


2تا کوئری که چیزی نیس !
مشکلت از سرورته که احتمالا خیلی کنده ...
راهی غیر از نگهداری اطلاعات نداری چه دیتابیس چه فایل.

حالت گت کردن متوالی هم هست که دیگه اصلا این مد خوندن از تلگرام بهت پیشنهاد نمیکنم اگه با 2تا کوئری مشکل داره سرورت.

tehro0n
سه شنبه 11 خرداد 1395, 12:28 عصر
چرا اصلا به این شکل دارید کار می کنید؟
من تغییرات جدید تلگرام رو ندیدم اما سال پیش که کار میکردم موقع گرفتن پیغام ها از طرف کاربر آخرین id رو میدادم و چند پپیغام پس از اون id رو برمیگردوند!

سرور من منتظر پاسخ کاربر نمی موند و فقط در بازه های 1 تا 5 ثانیه (بسته به کار شما) یک cron jobs میزدم که آخرین آی دی رو بفرسته و ببینه جدید اومده برای بررسی یا خیر

اون طرف هم به کاربر reply نشون میدادم که بدونم مربوط به چه سوالی است و پاسخ دریافت کردم
سمت خودم هم می تونستم سوال ها و پاسخ های قبل رو ذخیره کنم و با پاسخ جدید بفهمم سوال بعدی چیه و این پاسخ کدام سواله

به همین سادگی...
شما الان خودتان با این کار دارید کاری که تلگرام براتون کرده رو هم از اول می کنید و چت ایجاد کردید

mojooriass
سه شنبه 11 خرداد 1395, 12:44 عصر
بنده قصد درست کردن یک روبات آزمون گیر برای تلگرام دارم ولی مشکلاتی مواجهه شدم. یکی از مشکلات اصلی که دارم در گرفتن اطلاعات از کاربر هست. وقتی کاربر وارد آزمون میشه سمت سرور که با php نوشته شده باید حالت پرسش و پاسخ داشته باشه یعنی در هر سوالی که از کاربر پرسیده میشه باید منتظر جواب کاربر باش و وقتی جوابی از کاربر گرفت سوال بعدی رو بپرس.
مشکل بنده در بخش استفاده از تابعی مانندکد PHP:

Readline()


هستش که منتظر کاربر بمونه برای گرفتن جواب!!! ولی کد php نوشته شده سمت سرور به صورت کامل اجرا میشه و اصلا حالت انتظار برای گرفتن جواب از کلاینت رو نمیشه در php پیاده سازی کرد :| ....
سعی کردم با استفاده از db این مشکل رو حل کنم ولی استفاده از db هم سرعت رو خیلی میاره پایین چون در هر بار سوال و پاسخ حداقل دو query برای واکشی سوال و ثبت در db لازم هست.
http://ashiyane.org/forums/images/smilies/sadsmiley.gif

لطفا اگر میتونین راهنمایی کنین چطور میتونم بدون اینکه کد تا آخر خونده بشه مثل تابه Readline() مقداری کاربر بگیرم ؟؟
نیازی به این کار نیست خود تلگرام تابعی دارد تحت عنوان force reply که بعد از ارسال پیام از کاربر درخواست میکنه در جواب همون پیام مقداری را بفرسته تنها کاری که نیاز است شما انجام بدید ذخیره کردن ایدی پیام هنگام ارسال است و بعدا چک کنید ببینید اگر جوابی برای اون ایدی ارسال شده بود کار های مربوطه را انجام بدید
لینک مربوط به تلگرام :
https://core.telegram.org/bots/api#forcereply
نمونه ربات نوشته شده به همین روش :
http://telegram.me/TPersian_bot