حذف لاگ گرفتن از کتابخانه ی TelegramBotPHP ( کتابخانه ای برای ساخت ربات تلگرام )

یک سال قبل زمانی که در مجموعه ای به صورت کارمندی مشغول به فعالیت بودم، در جستجوی کتابخانه ای برای تلگرام با TelegramBotPHP آشنا شدم. کلاسی به غایت ساده که API تلگرام را با ویژگی ها و توانایی های کلاس های PHP در دسترس شما قرار میدهد. این کلاس یکی از ساده ترین و بروزترین کتابخانه های تلگرام می باشد. پشتیبانی این ریپو تا زمانی که از آن استفاده می کردم ( حدود هشت ماه قبل، پیش از اعزام به سربازی ) بسیار قوی کار می کرد و هر کس به اندازه ی توان خود در توسعه ی آن سهیم بود. محسن نیز در ویرگول مطلبی تحت عنوان ساخت ربات تلگرام با 10 خط کُد PHP! منتشر کرده است که به همین کلاس اشاره شده است.

در ادامه قصد دارم کلاس TelegramBotPHP را معرفی کرده و به سوال یکی از دوستان در رابطه با این کلاس پاسخ دهم.

 

 TelegramErrorLogger چطور به ریپو اصلی افزوده شد؟

با به پیش رفتن ربات هایی که با این کلاس توسعه داده شده بود، خلا نبود سیستمی برای گزارش گیری از خطا ها ( Log ) احساس می شد. در نهایت سیستم لاگ گیری خودم با نام TelegramErrorLogger را با این کلاس ادغام کرده و درخواست خود را برای این کتابخانه ارسال کردم.

درخواست من مبنی بر ادغام سیستم گرازش گیری با کتابخانه اصلی خیلی زود پذیرفته شد و فایل TelegramErrorLogger.php به ریپو اصلی افزوده شد. در ابتدا قصد داشتم موارد بسیاری را به این فایل اضافه کنم. اما در نهایت صحبتی که با توسعه ی دهنده ی این کلاس داشتم، ایشان فرمودند که قصدشان از توسعه ی این کتابخانه، توسعه ی کلاسی بسیار ساده و کم حجم می باشد. ( البته حقیقتا هم تا زمانی که من با این کلاس کار می کردم و تا آنجا که می دانم، ساده ترین کلاس ممکن برای کار با api تلگرام بود.)

لذا پیرو درخواست توسعه دهنده ی این کلاس از پیچیده کردن ساختار فایل ها و کلاس ها خودداری کرده و در ساده ترین حالت ممکن سیستم گزارش گیری خطا ها به این کلاس افزوده شد.

 

سیستم گرازش گیری یا همان TelegramErrorLogger چگونه کار می کند؟

نحوه ی کار این فایل بسیار ساده بوده و تنها زمانی که ربات تلگرامی شما با خطا روبرو شود، خطای مربوطه را قالب متن و در فایلی با نام TelegramErrorLogger.txt ذخیره می کند. این کلاس برای ذخیره خطا ها از تابع rt استفاده می کند.

 

 تابع rt چه کاری انجام میدهد؟ پرینت آرایه به صورت خطی در php

از آنجا که اکثر مواقع ربات ها را در محیط command line توسعه داده و خطایابی می کردم، استفاده از تابع var_dump آن هم برای یک آرایه ی طولانی که نیاز به کلی اسکرول کردن داشت کار سخت و زمان بری بود. خصوصا اینکه در برخی از ترمینال ها تمام متن نمایش داده نمی شد و گاها آرایه ای که در این محیط کامندی چاپ شده بود را نمی شد به صورت کامل مشاهده کرد.

پس تصمیم به توسعه دادن تابعی در php که آرایه ها را به صورت خطی نمایش می دهد، گرفتم. برای مشاهده ی نحوه ی استفاده و نمونه خروجی این تابع به صحفه ی این پروژه در گیت هاب من با نام shakibonline/varDumpAsText مراجعه کنید.

 

 حذف گرازش گیری ( TelegramErrorLogger ) از کلاس TelegramBotPHP

در ایمیلی که اخیرا به دستم رسیده است، یکی از دوستان سوالی مبنی بر نحوه ی حذف TelegramErrorLogger از کلاس TelegramBotPHP پرسیده بود. با توجه به موارد اشاره شده در زمینه ی ساده نگه داشتن این کلاس و هم چنین تلاش برای کمترین تداخل بین کلاس های گزارش گیری و کلاس اصلی، می توانم ساده ترین راه ممکن را در اختیار شما قرار دهم.

برای غیر فعال کردن گزارش گیری کافیست فایل TelegramErrorLogger.php را حذف کنید و یا تغییر نام دهید! با تمهیدات در نظر گرفته شده، اگر به هر منظوری فایل مربوط به گزارش گیری ( TelegramErrorLogger ) در دسترس نباشد، باز هم کلاس اصلی به درستی به کار خود ادامه می دهد.

 

 آیا TelegramErrorLogger باعث کند شدن سرعت ربات تلگرام می شود؟

باید در نظر داشته باشید کلاس گزارش گیری فقط در زمانی فراخوانی می شود که ربات تلگرام شما به خطا برخورده باشد. پس اگر در صورت استفاده از کلاس TelegramBotPHP، فایلی با حجم بالا و تحت عنوان TelegramErrorLogger.txt در هاست/سرور شما وجود داشته باشد، به این معنی است که ربات شما دارای مشکلاتی است که باید آن را برطرف کنید! برای پیدا کردن این مشکلات می توانید از همان فایل TelegramErrorLogger.txt استفاده کنید. از این رو کلاس TelegramErrorLogger نمی تواند باعث کندی ربات شما شده باشد.

 

چرا ربات تلگرام تان سرعت کمی دارد و کند عمل می کند؟

عاملی که می تواند باعث کندی ربات تلگرام شود که به نظرم مهم ترین عامل می باشد، کانفیگ هاست/سرور شما می باشد. میزان رم، cpu و … زمانی به این نکته پی بردم که اولین ربات های تلگرامی خودم را توسعه داده بودم! همه چیز درست و تمیز انجام شده بود، اما برای دریافت پاسخ از طرف ربات باید ۱ الی ۲ ثانیه صبر می کردم که اصلا زمان قابل قبولی نبود! ربات در سرور محلی خودم به درستی و با سرعت هر چه تمام تر کار می کرد، اما زمانی که آن را به هاست مشتری منتقل می کردم، باید مدت طولانی ای را برای یک حال و احوال پرسی با ربات مذکور به صفحه ی مانیتور خیره می ماندی (:

با ارتقا دادن هاست/سرور مشکل حل شد و ربات حتی سریعتر از سرور محلی خودم شروع به کار کرد.

 

بعد از خواندن این مطلب چه کنم؟

می توانید «چند نکته ی کوچک در مورد سیستم اشتراک گذاری فیس بوک» را بخوایند.

4 Replies to “حذف لاگ گرفتن از کتابخانه ی TelegramBotPHP ( کتابخانه ای برای ساخت ربات تلگرام )”

  1. سلام استاد

    عالی بود دستتون درد نکنه :
    اولا به خاطر کلاس خوبی که برای گزارش خطا بات نوشتید
    دوما به خاطر مقاله بسیار خوبتون که کلی نکته آموزنده داشت !

    استاد میشه لطف کنید بیشتر راجب ارتقا هاست و سرور توضیح بدید؟ (یعنی مثلا آیا میشه همون هاست اشتراکی را به یک هاست اشتراکی قوی تر ارتقا بدیم)(برای ربات هاست ایران بهتره یا هاست آلمان)(از سرور مجازی استفاده کنیم یا سرور اختصاصی؟)(چه کانفیگ سروری برای برای ربات ها مناسبه؟)(آیا کار کردن با سرور مجازی و اختصاصی به همون راحتی هاست اشتراکیه یا باید حتما متخصص آن باشیم)(از تجربیات خود تو این زمینه توضیح دهید)
    خیلی ممنون – ببخشید که خیلی سوال پرسیدم!

    1. امکان ارتقاء هاست اشتراکی، در اکثر هاستینگ ها فعال هست. در رابطه باید با شرکت هاستیگ تان مکاتبه کنید.

      درخواست کاربر ابتدا به تلگرام و سپس به ربات ارسال میشه، پاسخ ربات هم ابتدا به تلگرام و سپس از طریق تلگرام به کاربر ارسال می شه، در نتیجه انتخاب سروری که به سرور های تلگرام نزدیک تر باشد، منطقی تر هست. در فرض مربوطه آلمان گزینه ی بهتریست

      استفاده از سرور مجازی یا سرور اختصاصی؟ به طور مشخص ، انتخاب بین این موارد به کاربرد، اهداف و تعداد کاربران ربات بستگی دارد.

      کانفیگ مناسب ربات چیست؟ خود من چندین ربات را بر روی هاست اشتراکی با ۵۰ مگ فضا توسعه داده ام! باز هم اهداف، کاربرد ها، تعداد کاربر …

      تفاوت کار کردن با هاست اشتراکی، سرور مجازی و سرور اختصاصی در چیست؟
      استفاده از هاست اشتراکی ساده ترین گزینه است. بعد از آن سرور مجازی ( که معمولا شرکت مربوطه نصب سیستم عامل و کانفیگ را بر عهده می گیرد ) و بعد از آن سرور اختصاصی که کانفیگ اش تماما با شما می باشد.

  2. مرسی از مطلب مفیدتون
    یکی از راههای که به عینه دیدم باعث افزایش سرعت پاسخگویی ربات میشه، استفاده از دیتابیس بجای فایلهای متنی نگام ذخیره اطلاعاته. چون اکثر رباتها نیاز دارن یکسری چیزها رو ذخیره و بازیابی کنن پیشنهادم استفاده از پایگاه داده به جای کار با فایل هستش.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *