معمولاً هر وقت که تو اینترنت دنبال یه برنامه یا سایت ساده برای انجام یه کار خاص یا غیرمعمول میگردم، یه چیز قابل قبول پیدا میکنم. مثلاً برنامهای که روی صفحه، یه خطکش نشون بده یا برنامهای که صدا رو از فیلم جدا کنه. اگه هم کلاً برنامهای پیدا نکنم، خلاصه یه جوری سر و ته قضیه رو برای یکی دو بار جمع میکنم.
.
ولی برای اولین بار، جستجوم برای پیدا کردن برنامه به نتیجه نرسید و چونکه قضیه برام مهم بود و دیگه فقط حرف از یکی دو بار نبود که بتونم یه جوری ماستمالیش کنم، مجبور شدم خودم دست به کار بشم و برنامه رو بنویسم.
.
قضیه چی بود:
من یه حساب تلگرام دارم که اونجا تو کلّی کانال عضوم که مطالب آموزشی دربارهی کامپیوتر و برنامهنویسی و اینجور چیزها میذارن. من هم از ترس اینکه یه بار یکی از این کانالها یکی از مطالبش یا کلاً کانالش رو حذف نکنه و من بعداً یه مطلب رو لازم داشته باشم، اومدم و یه کانال خصوصی زدم و هر روز مطالب جدید این کانالها رو میفرستادم(فوروارد میکردم) به اون کاناله و در واقع یه آرشیو برای خودم درست کردم. آخه سابقه داشته که صاحب کانال، کانال رو بفروشه یا یهویی تغییر موضوع بده و بیاد مطالب قبلی رو حذف کنه و تبدیلش کنه به کانال دانلود آهنگ و فیلم یا فروش کفش و لباس و... :|
.
ارسال مطالب رو هر روز انجام میدادم و ممکن بود هر روز از ۵ دقیقه تا ... دقیقه وقتم رو بگیره. ولی خوب، دیگه با این کار کنار اومده بودم. البته این رو هم بگم که چندبار به امید پیدا کردن یه برنامهی آماده که این کار رو برام انجام بده، خیلی گشتم، ولی به چیز که به دردم بخوره نرسیدم و تنها چیز قابل قبولی هم که پیدا کرده بودم، نظرات جالبی براش ننوشته بودن و پولی هم بود و پرداخت دلاری میخواست که در نتیجه، بیخیالش شدم. از اونجایی هم که برآوردم این بود که اگه خودم بخوام همچین چیزی بنویسیم، حداقل چند روز تا چند هفته ازم وقت میگیره، شرایط رو جوری ندیدم که بخوام دست به کار بشم و ترجیح میدادم پیامها رو دستی انتقال بدم.
.
همین منوال گذشت و گذشت تا اینکه چند وقت پیش، یه وضعیتی برام پیش اومد که نزدیک به دو هفته نرسیدم مطالب این کانالها رو جابجا کنم و بعداً که فرصت شد، جابجایی اون حجم مطالب انباشته شده، بدجور برام دردسر شد. از اونطرف هم دیدم که ای داد بیداد، چند وقت دیگه دارم میرم سربازی و این رو دیگه کجای دلم بذارم؟ اون موقع دیگه چطوری این حجم پیامها رو جابجا کنم؟ دهنم سرویس میشه که :(
.
خلاصه در این مقطع حساس و زیر این فشارها بود که احساس کردم واقعاً نیازه که دست به کار بشم :)
.
اولش، شکل کلّی برنامه توی ذهنم اینطور بود که: از اونجایی که تلگرام یه برنامهی متنبازه، میام یه کلاینت(برنامه)تلگرام رو میگیرم و یکمی کدهاش رو تغییر میدم که با دریافت هر پیام جدید، اون پیام رو به کانال آرشیوم بفرسته.
.
درسته که ایدهی بالا، توی نگاه اول، ممکنه کار سادهای به نظر بیاد، ولی برای پیادهسازیش، نیازه که اول مستندات و کدهای فعلی کلاینت مورد نظر رو بخونم و بدونم که کجا باید این کدهای جدید رو بنویسم و بعدش برم سراغ اضافه کردن این کدها.
.
پس دیدم بهتره که اول برم سراغ ربات نوشتن، با این امید که بتونم یه همچین ایدهای رو با ربات راحتتر بسازم، ولی بعد از یکی دو روز سر و کله زدن با ربات، دیدم به علت سطح دسترسی که تلگرام برای رباتها تعیین کرده، نمیشه کاری که میخواستم رو باهاشون کرد و در نتیجه، رفتم سراغ یه روش دیگه.
.
بعدش گشتم برای اینکه یه کتابخونهی تلگرام برای پایتون پیدا کنم و برنامهام رو با اون بنویسم که یدونه پیدا کردم و یکم باهاش جلو رفتم، ولی فهمیدم که این کتابخونه خیلی ساده است و امکاناتش کمه و نمیشه باهاش اون چیزی که میخوام رو بنویسم و باز هم رفتم سراغ یه روش دیگه.
.
بعدش رفتم سراغ همون ایدهی اولیّم و رفتم گیتهاب تلگرام که یه کلاینت رو بگیرم و باهاش یه کلاینت اختصاصی درست کنم و برای این کار، چندتا کلاینت رو امتحان کردم. ولی به دلایلی که همین پایین گفتم، بعد از یکم سر و کله زدن باهاشون، بیخیالشون شدم.
.
مثلاً برای اندروید، فقط سره باز کردنش با اندرویداستودیو به مشکل خوردم و بعد از یه روز سر و کله زدن باهاش و کلی اینترنت مصرف کردن برای دانلود کردن اندرویداستودیو و چیزای مرتبط بهش و کلی جستجو تو اینترنت، کار به جایی نبردم(خوب، تخصصی اندروید کار نکردم دیگه. ). بعدش رفتم سراغ نسخهی وب با "React" که این یکی دردسر ساخت سرور و اینجور چیزها رو داشت و در کل، برای ایدهی من، زیاد مناسب نبود که در نتیجه، بیخیال این یکی هم شدم.
.
دیگه آخرین موردی که برام مونده بود و از عمد گذاشته بودمش برای آخر(چونکه تو نگاه اول، از بالاییها برام سختتر بود.) "TDLib" بود. یه کلاینت چندسکویی که میشه توی انواع سیستمعاملها و با انواع زبانهای برنامهنویسی ازش استفاده کرد، ولی استفاده از این روش، دوتا مسئله برام داشت. یکی این که باید اول کدهاش رو کامپایل میکردم، بعدش اینکه این چیزی که کامپایل کرده بودم، حکم یه هسته رو داشت که کارهای ارتباط با سرور تلگرام رو انجام میداد و در واقع، برنامهای که مینوشتم رو باید روی این چیزی که کامپایل کرده بودم سوار میکردم و قبلاً هیچ تجربهای نزدیک به این کارها نداشتم.
.
حالا دیگه ایدهام این بود که بعد از کامپایل این کدها، با پایتون برنامهاش رو بنویسم. البته چندتا مثال هم براش وجود داشت که چجوری کدهای زبانهای مختلف رو با اون بخش اصلی مرتبط کنیم و درخواست بزنیم که این مثالها، شروع کدنویسیش رو خیلی برام راحتتر کرد.
.
کامپایل اون کد اصلی برای لینوکس، نسبتاً راحت بود و بدون مشکل خاصی و به راحتی انجام شد(اینجا بود که کاملاً درک کردم که چرا میگن لینوکس بهشت توسعهدهندههاست :) ). بعدش که شروع کردم به نوشتن برنامهی پایتونش، با خودم گفتم که:(پایتون که هم تو لینوکس کار میکنه و هم تو ویندوز. این کد رو هم که میشه برای ویندوز هم کامپایل کرد، پس چرا یه کاری نکنم که بشه این برنامه رو توی جفت سیستمعاملها استفاده کرد؟ ) که سر همین قضیه، کارم به ویندوز و ویژوالاستودیو افتاد و یه سری گیر و گور هم برای کامپایل کردنش پیش اومد، ولی به کمک اینترنت، بلاخره برای ویندوز هم کامپایلش کردم.
.
خلاصه که بعد از چند روز سر و کله زدن با مستندات TDLib و کد زدن، اولین نسخهی قابل استفاده از برنامه رو درست کردم و بعدش هم تو چند روز دیگه، یه مقدار کدهایی که نوشته بودم رو اصلاح کردم و چندتا ریزه کاریش رو درست کردم(مثلاً: در نظر گرفتن محدودیت تعداد فوروارد تلگرام تو هر ساعت که ۲۰۰۰تا پیامه. ) . الآن هم برنامه تقریباً بدون مشکل فنی خاصی کار میکنه. البته هر از گاهی که برنامه رو استفاده میکنم، یکی دوتا پیغام با رنگ قرمز نشون میده، ولی ظاهراً چیز خاصی نیست و مشکلی توی عملکرد برنامه به وجود نمیاره و منم یه مقدار پیگیرم که ببینم چطور میشه حلّش کرد، ولی چونکه این پیغام خیلی کم نمایش داده میشه، پیدا کردن علت و درست کردنش هم برام طول میکشه. الآن هم برنامه رو تا همینجایی که درست کردم، گذاشتم توی گیتهاب که شاید گره از کار یه بندهخدایی که میخواد چتهاش رو آرشیو کنه باز کنه :)
.
این رو هم بگم که برای استفاده از این برنامه، فقط کافیه که فایل "telafo.py" رو توی ترمینال لینوکس یا خطفرمان ویندوز با پایتون اجرا کنید و توی اولین اجرا، تنظیماتش رو مطابق راهنماش که توی گیتهاب هست انجام بدید و تو اجراهای بعدی، راحت ازش استفاده کنید. در ضمن، برای استفاده از برنامه، استفاده از "قـنـدشـکـن" رو فراموش نکنید. در مورد استفاده ازش تو اندروید هم اینو بگم که شاید بشه توی "Termux" ازش استفاده کرد، ولی خودم فعلاً این مورد رو امتحان نکردم.
.
در نهایت، برای دورهی سربازی هم، یا از خانواده میخوام که هر روز یا چند روز یه بار، برنامه رو اجرا کنن یا برای کامپیوتر تعریف میکنم که بعد از هر بار روشن شدن(معمولاً داداشم میاد بازی کنه) بطور خودکار برنامه رو اجرا کنه یا یه سرورمجازی رایگان یا ارزون گیر میارم و برنامه رو توی اون اجرا میکنم که اینطوری، برنامه همیشه فعاله. خلاص :)
.
ارادتمند شما، کدنویس تازه کار، مهیاد