ورود و ثبت نام

آموزش مقدماتی ساخت ربات تلگرام با سی شارپ (#C)

خواندن این مطلب

7 دقیقه

زمان میبرد!

آموزش مقدماتی ساخت ربات تلگرام با سی شارپ (#C)

 

 

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

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

دستورات ساده

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

خب برای ایجاد ربات اول این ربات رو Start بزنید بعد پیامی مشابه پیام زیر میبینید :

خب اجازه بدید بهتون بعضی از گزینه های مهم رو معرفی کنم(هر چند بعید میدونم خیلی هاتون نیازی داشته باشید) :

Edite bots

  • دستور setname : برای تغییر نام ربات شماست
  • دستور setdescription : برای تغییر توضیحات ربات استفاده میشه( نه برای بیوگرافی)
  • دستور setabouttext : برای تغییر بیوگرافی ربات استفاده میشه
  • دستور setuserpic : برای تغییر تصویر پروفایل ربات استفاده میشه
  • دستور setcommands : برای تغییر لیست دستوارت ربات استفاده میشه
  • دستور deletebot : برای حذف ربات استفاده میشه

Bot Settings

  • دستور token : برای گرفتن توکن ربات استفاده میشه
  • دستور revoke : برای ایجاد توکن جدید استفاده میشه و توکن قبلی رو حذف میکنه

خب ما کاری با بقیه دستورات نداریم چون خارج از بحث این مطلبه(مثلا اینجا قرار نیست راجع به ربات های این لاین حرفی زده بشه)

خب دو تا دستور مهم دیگه هم هستن که برای ایجاد ربات جدید و پیدا کردن همه ربات های شما استفاده میشه :

  • دستور newbot : برای ایجاد ربات جدید استفاده میشه
  • دستور mybots : برای دیدن و تغییر ربات های شما استفاده میشه

ایجاد ربات جدید

برای ایجاد ربات جدید از دستور newbot استفاده میکنیم :

توی این مرحله باید برای رباتتون یک اسم انتخاب کنید، مثلا من اسمشو میزارم “user information” :

توی این مرحله باید یک آیدی برای رباتتون انتخاب کنید؛ مثلا ما میزاریم UserInfo_M_bot. دقت کنید که حتما آیدی باید با bot تموم بشه.

نگران نباشید بعد از این آموزش ربات رو حذف میکنم 🙂

خب تو این مرحله ربات به ما یک توکن میده که باید به شدت ازش محافظت کنیم و به کسی ندیمش چون با همین توکن میتونیم ربات رو کنترل کنیم.

بد نیست بدونید از اونجایی که مدیریت ربات تو تلگرام با استفاده از درخواست های HTTP انجام میشه با هر زبانی میشه ساختش 🙂

خب بیاید یکم بیشتر به ربات برسیم….

ایجاد تغییرات در ربات

خب اول بیاید یک about برای رباتمون بزاریم :

همونطور که میبینید بعد از دستور setabouttext لیستی از ربات ها رو به ما نشون میده که ما صاحبشون هستیم. بعد از کلیک روی هر کدوم که خواستید(البته اینجا فقط یکی هست) یک بیوگرافی براش بزارید

این موضوع برای اکثر دستورات هستش.

حالا برای ربات یک توضیح بزارید تا کسی وارد شد ببینه که این ربات چه کاری میتواند بکند… اینو میسپرم به خودتون چون اصلا کاری نداره 🙂

بریم سراغ کد نویسی…

افزودن کتابخانه ها در Visual studio

خب دوستان بدون شک با ایجاد پروژه توی ویژوال استودیو آشنایی دارید… اینجا نمیخوام راجع به ایجاد پروژه جدید حرف بزنم بلکه میخوام راجع نحوه افزودن کتابخانه telegram.bot به پروژه خودمون توضیح بدم…

خب برای اینکار توی قسمت Solution Explorer روی پروژه کلیک راست کنید و گزینه manage nuget packages رو بزنید و بعد توی قسمت جستجو telegram.bot رو بنویسید و اون رو به پروژه خودتون اضافه کنید :

از اونجایی که من قبلا نصبش کردم اینجا نشون نمیده :

خب دیگه واقعا بریم سراغ بحث کد نویسی…

کد نویسی برنامه

دوستان برنامه ما از نوع کنسول هستش ولی شما میتونید از winform هم استفاده کنید.

فضای نام های زیر رو به برنامه اضافه کنید :

خب دلیل اینکه اینجا مار از System.IO استفاده کردیم اینه که قراره که آپدیت آیدی ها رو تو یک فایل ذخیره کنیم تا بعدا از اونجا به بعد پیام ها رو بخونیم.وقتی که یک کاربر یک پیام ارسال میکنه یا تغییری توی یک پیام ایجاد میکنه درواقع همش تا چند ساعت تو سرور ها ذخیره میشه و ما با استفاده از آپدیت ها میتونیم بهشون دسترسی داشته باشیم ولی هر بار که میخوایم تغییرات رو ببینیم از اونجا که تلگرام تا چند ساعت تغییرات رو ذخیره میکنه ما هر بار پیام های قبلی هم میخونیم یعنی انگار قراره یک کار رو چند با انجام بدیمو این اصلا خوب نیست پی بهتره جدید ترین ها رو بگیریم.

دلیل استفاده از telegram.bot هم که معلومه.

System.Threading هم برای استفاده از متد Sleep هستش که جلوتر میفهمید چرا باید ازش استفاده کنیم.

خب حالا ما نیاز به دو تا تابع داریم که که یکی Update Id رو برگردونه یکی هم تعیینش کنه :

خب این کد خیلی سادس ولی به هر حال توضیح میدم… این تابع درواقع آخرین آیدی ذخیره شده رو برمیگردونه. ما توی تابع از try استفاده کردیم برای اینکه اگه خطایی رخ داد -1 رو برگردونه.

از دستور using استفاده کردیم تا به محض اینکه کارمون با فایل ID.dat تموم شد اونو ببنده؛ حالا چه خطایی رخ بده چ نه. کلا using برای اینه که به محض اینکه کارمون با یک شئ که IDisposable رو پیاده سازی کرده باشه تموم شد از حافظه پاک بشه.

در نهایت از فایل یک int میخونیم با استفاده از تابع ReadInt32.

اینم درواقع یک آیدی رو توی یک فایل مینویسه

اما تابع اصلی ما یعنی Main :

 

خب اینجا ما اول اومدیم یک TelegramBotClient تعریف کردیم که به عنوان ورودی یک token میگیره(هر چند پارامتر های اختیاری هم داره ولی ما با این کار میکنیم).

خب حالا ما وارد یک while(true) میشیم تا همیشه هر تغییری رخ داد ما بفهمیم.

توی خط بعدی یک متغییر به اسم tmp تعریف کردیم که آخرین آیدی رو تو خودش ذخیره کنه.

بعد با استفاده از GetUpdatesAsync اومدیم و تغییرات ایجاد شده رو گرفتیم و داخل یک آرایه از نوع Update قرار دادیم. توی ورودی های تابع اومدیم Offset رو برابر با tmp + 1 قرار دادیم تا تکراری صورت نگیره.و محدودیت پیام هارو هم 0 تعیین کردیم تا همه رو به ما نشون بده. و تایم اوت هم 0 قرار دادیم تا به صورت پیش فرض بمونه.

حالا اینجا ما توی متغییر r پیمایش میکنیم و هر بار بررسی میکنیم که Message تهی نباشه. Message در واقع همون پیامی هستش که برای ما اومده.

تو خط بعدی یک رشته به اسم stringForSend تعریف میکنیم که درواقع همون رشته ای هستش که باید برای کابر ارسال بشه.

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

حالا با استفاده از خاصیت های Title و UserName به اسم و آدرس کانال دسترسی پیدا میکنیم. با استفاده از ForwardFromMessageId هم شماره پست رو به دست میاریم و تبدیل به لینک میکنیم. Id هم که واضحه.

در نهایت هم میریم به برچسب L

ولی اگر null بود برسی میکنیم ببینم آیا کابر هدف ما(همون کسی که پیام رو نوشته نه اون کسی که فوروارد کرده) اجاز دسترسی به اطلاعاتش رو برای عموم آزاد گذاشته یا خیر اگه اجازه نداده بود پیغام Error to get your target id… به نتیجه اضافه میشه و ما اطلاعات فرستنده رو بهش نشون میدیم.

این اطلاعات کاملا واضح هستن.

در انتها هم پیام رو برای کابر به اینصورت ارسال میکنیم :

آیدی فرستنده رو توی پارامتر اول SendTextMessageAsync میزاریم و بعد متن رو و بعد ParseMode رو پیشفرض میزاریم و بعد disableWebPagePreview رو false میزاریم تا پیش نمایش لینک ها هم نمایش داده بشه بعد disableNotification هم flase میزاریم تا اعلان به کاربر نمایش داده بشه و replyToMessageId هم برابر با MessageId پیام دریافتی میزاریم تا به صورت پاسخ به کابر نمایش داده بشه.

از Sleep(255) هم برای این استفاده میکنیم که برنامه هنگ نکنه و 255 میلی ثانیه استراحت کنه.

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

 

خب دوستان خوشحالم که تا آخر این مطلب رو خوندید… امیدوارم موفق باشید

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



نظرات کاربران



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

مطالب مرتبط