اینروزه بات یا ربات های تلگرام خیلی باب شده و دلیل آن نیز راحتی کار کاربران است.
میتوانید خیلی راحت با یک ربات تلگرام مثل یک انسان صحبت کنید و به نتیجه ای که میخواهید خیلی سریعتر و بدون خطا تر دست یابید.
آموزش ساخت و برنامه نویسی ربات تلگرام با سی شارپ
در این آموزش قصد داریم یک ربات تلگرامی با زبان سی شارپ را قدم به قدم آموزش دهیم پس با ما همراه باشید ?
همچنین سورس کامل پروژه رو میتونید از کانال تلگرام ما دریافت کنید
۱-ایجاد بات در BotFather
ابتدا باید بات خود را @BotFather تعریف کنیم تا با Tokenی که این بات تلگرام به ما میدهد بتوانیم از طریق سی شارپ به آن متصل شویم.
پس از ورود و start ,این بات لیستی از آپشن هارو دراختیار ما قرار میده که ما فعلا با آپشن /newbot کار داریم (عملکرد هر آپشن رو جلوی خودش کاملا توضیح داده و میتونید استفاده کنید).
بعد از شما میخواد که یک نام برای بات خود تعیین کنید که هرچیزی میتونه باشه.
و بعد هم باید یک usernaem برای بات خود ایجاد کنید که به bot ختم شه که ما progrun_bot رو تعیین کردیم
.
وسپس در صورت تایید همه ورودی ها , Tokenی که نیاز داشتیم رو به ما میده
telegrambot1
حالا Description یا توضیحات مربوط به بات را که قبل از start کردن بات نمایش داده میشود را باید تعیین کنیم پس از /setdescription استفاده میکنیم و سپس بات مورد نظر را انتخاب میکنیم و توضیحات رادرج میکنیم.
و بعد از توضیحات هم یک تصویر با دستور /setuserpic برای بات قرار میدهیم
telegrambot2
خب حالا ظاهر بات ما تکمیل شد و حالا باید بات رو هوشمند کنیم و براش برنامه بنویسی (قسمت شیرین کدزنی شروع شد ? )
۲- برنامه نویسی سی شارپ ربات تلگرام
ابتدا در ویژوال استویدو یک پروژه کنسول سی شارپ رو بدین صورت ایجاد میکنیم
telegrambot3
پس از ایجاد پروژه باید کتابخانه NetTelegarmBotApi رو به پروژه اضافه کنیم پس عبارت Telegram رو سرچ میکنیم و این کتابخانه رو مطابق تصویر زیر نصب میکنیم
telegrambot4
سپس در کلاس program ابتدا یک فیلد استاتیک برای token که بالاتر botfather بهمو داد بدین صورت ایجاد میکنیم
private static String Token = "464371519:AAFJ4KxfWSZoUAXDcwJIZEktHGmh_qWkkNI";
سپس در main برنامه یک سری لیست که شامل دکمه های بات ما هستند رو تعریف میکنیم
class Program { private static String Token = "464371519:AAFJ4KxfWSZoUAXDcwJIZEktHGmh_qWkkNI"; // main menu private static ReplyKeyboardMarkup mainMenu = new ReplyKeyboardMarkup(); // matlabdl , tejariapp , cmsdesign private static ReplyKeyboardMarkup websitesMenu = new ReplyKeyboardMarkup(); // do project , teach private static ReplyKeyboardMarkup serviceMenu = new ReplyKeyboardMarkup(); //order(fill form of order and email it) , offer(fill form and email) private static ReplyKeyboardMarkup projectTypeMenu = new ReplyKeyboardMarkup(); //c# , android , matlab, c ,c++,... private static ReplyKeyboardMarkup teachLangMenu = new ReplyKeyboardMarkup(); //package, online ,real time private static ReplyKeyboardMarkup teachTypeMenu = new ReplyKeyboardMarkup(); private static string[] teachTypeArray = new string[] { "حضوری", "آنلاین", "پکیج آموزشی" }; private static ReplyKeyboardMarkup returnMenu = new ReplyKeyboardMarkup(); private static SendMessage req; private static int teachReqID = 0; private static int cooperationReqID = 0; private static int projectReqID = 0; static void Main(string[] args) { mainMenu.ResizeKeyboard = true; mainMenu.Keyboard = new KeyboardButton[][]{new KeyboardButton[]{ new KeyboardButton("کانال تیم پروگران"), new KeyboardButton("گروه تیم پروگران"), new KeyboardButton("وب سایت های تیم پروگران") },new KeyboardButton[]{ new KeyboardButton("نمونه کارهای تیم پروگران"), new KeyboardButton("خدمات تیم پروگران") },new KeyboardButton[]{ new KeyboardButton("همکاری با تیم پروگران"), } }; websitesMenu.ResizeKeyboard = true; websitesMenu.Keyboard = new KeyboardButton[][] { new [] { new KeyboardButton("matlabdl.com"), new KeyboardButton("tejariapp.com"), new KeyboardButton("cmsdesign.ir") },new KeyboardButton[]{ new KeyboardButton("بازگشت"), } }; returnMenu.ResizeKeyboard = true; returnMenu.Keyboard = new KeyboardButton[][] { new [] { new KeyboardButton("بازگشت") } }; serviceMenu.ResizeKeyboard = true; serviceMenu.Keyboard = new KeyboardButton[][] {new KeyboardButton[] { new KeyboardButton( "آموزش انواع زبان های برنامه نویسی"), new KeyboardButton( "انجام کلیه پروژه های برنامه نویسی تجاری و دانشجویی") },new KeyboardButton[]{ new KeyboardButton("بازگشت"), } }; teachTypeMenu.ResizeKeyboard = true; teachTypeMenu.Keyboard = new KeyboardButton[][] {new KeyboardButton[] { new KeyboardButton("حضوری"), new KeyboardButton("آنلاین"), new KeyboardButton("پکیج آموزشی") },new KeyboardButton[]{ new KeyboardButton("بازگشت"), } }; Task.Run(() => RunBot()); Console.ReadLine(); }
همانطور که مشاهده میکنید ما از دستور resize استفاده کردیم تا هردکمه به اندازه رشته درونش ارتفاع داشته باشد چون به صورت پبش فرض سایز بزرگتری دارند
همچنین یک متد Task.Run هم run شده که در ادامه این متد را کدنویسی میکنیم.
وظیفه این متد این است که منو اصلی دکمه های بات را نمایش دهد و براساس کلیک شدن هرکدام از آنها فیدبک مناسبی داشته باشد
public static async Task RunBot() { var bot = new TelegramBot(Token); var me = await bot.MakeRequestAsync(new GetMe()); Console.WriteLine("user name is {0}", me.Username); long offset = 0; int whileCount = 0; while (true) { Console.WriteLine("while is {0}", whileCount); whileCount = +1; var updates = await bot.MakeRequestAsync( new GetUpdates() { Offset = offset }); Console.WriteLine("update count is {0}", updates.Count()); Console.WriteLine("-------------------------------"); try { foreach (var item in updates) { long id = item.UpdateId; offset = item.UpdateId + 1; var text = item.Message.Text; switch (text) { case "/start": req = new SendMessage(item.Message.Chat.Id, "تیم برنامه نویسی پروگران در خدمت شماست") { ReplyMarkup = mainMenu }; await bot.MakeRequestAsync(req); break; case "بازگشت": req = new SendMessage(item.Message.Chat.Id, "تیم پروگران در خدمت شماست") { ReplyMarkup = mainMenu }; await bot.MakeRequestAsync(req); break; case "کانال تیم پروگران": req = new SendMessage( item.Message.Chat.Id, "https://t.me/engineerspage") { ReplyMarkup = mainMenu }; await bot.MakeRequestAsync(req); break; case "گروه تیم پروگران": req = new SendMessage(item.Message.Chat.Id, "https://t.me/engineerspage") { ReplyMarkup = mainMenu }; await bot.MakeRequestAsync(req); break; case "وب سایت های تیم پروگران": req = new SendMessage( item.Message.Chat.Id, "وب سایت های ما") { ReplyMarkup = websitesMenu }; await bot.MakeRequestAsync(req); break; case "matlabdl.com": req = new SendMessage( item.Message.Chat.Id, "http://www.matlabdl.com/") { ReplyMarkup = websitesMenu }; await bot.MakeRequestAsync(req); break; case "tejariapp.com": req = new SendMessage( item.Message.Chat.Id, "https://www.tejariapp.com/") { ReplyMarkup = websitesMenu }; await bot.MakeRequestAsync(req); break; case "cmsdesign.ir": req = new SendMessage( item.Message.Chat.Id, "http://www.cmsdesign.ir/") { ReplyMarkup = websitesMenu }; await bot.MakeRequestAsync(req); break; case "خدمات تیم پروگران": req = new SendMessage(item.Message.Chat.Id, "خدمات ارائه شده توسط تیم پروگران") { ReplyMarkup = serviceMenu }; await bot.MakeRequestAsync(req); break; case "آموزش انواع زبان های برنامه نویسی": req = new SendMessage(item.Message.Chat.Id, "مشخصات خود را برای درخواست آموزش وارد کنید") { ReplyMarkup = serviceMenu }; await bot.MakeRequestAsync(req); await Task.Run(() => TeachBot()); break; case "انجام کلیه پروژه های برنامه نویسی تجاری و دانشجویی": req = new SendMessage(item.Message.Chat.Id, "مشخصات مورد نیاز را برای درخواست انجام پروژه وارد کنید") { ReplyMarkup = serviceMenu }; await bot.MakeRequestAsync(req); await Task.Run(() => ProjectReq()); break; case "همکاری با تیم پروگران": req = new SendMessage(item.Message.Chat.Id, "برای درخواست همکاری لطفا اطلاعات زیر لازمه را تکمیل کنید") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); await Task.Run(() => CooperationReq()); break; case "نمونه کارهای تیم پروگران": req = new SendMessage(item.Message.Chat.Id, "تمامی نمونه کارهای تیم پروگران در سایت های "+ "رسمی تیم قرارداده شدند ") { ReplyMarkup = mainMenu }; await bot.MakeRequestAsync(req); req = new SendMessage( item.Message.Chat.Id, "http://www.matlabdl.com/") ; await bot.MakeRequestAsync(req); req = new SendMessage( item.Message.Chat.Id, "https://www.tejariapp.com/"); await bot.MakeRequestAsync(req); req = new SendMessage( item.Message.Chat.Id, "http://www.cmsdesign.ir/") ; await bot.MakeRequestAsync(req); break; default: break; } } } catch (Exception ex) { String e = ex.ToString(); throw; } } }
همانطور که مشخصه برای هر کدام از کلید هایی که کلیک خواهند شد یک سری دستورات درنظرگفته شده.
اما قبل از اینکه بدنه متدهارا کدنویسی کنیم , ما ۳ کلاس ایجاد کردیم برای نگهداری خروجی هرکدام از این ۳ متد
کلاس TeachRequest برای زمانی که کاربر درخواست آموزش دارد
public static async Task TeachBot() { TeachRequest teachRequest; string name = null, family = null, phoneNumber = null, age = null, teachType = null, teachLang = null,username=null; var bot = new TelegramBot(Token); var me = await bot.MakeRequestAsync(new GetMe()); Console.WriteLine("user name is {0}", me.Username); long offset = 0; int whileCount = 0; while (teachReqID <7 ) { Console.WriteLine("while is {0}", whileCount); whileCount = +1; var updates = await bot.MakeRequestAsync( new GetUpdates() { Offset = offset }); Console.WriteLine("update count is {0}", updates.Count()); Console.WriteLine("-------------------------------------"); try { foreach (var item in updates) { offset = item.UpdateId + 1; var text = item.Message.Text; if (text == "بازگشت") { teachReqID = 0; req = new SendMessage( item.Message.Chat.Id, "درخواست آموزش شما کنسل شد") { ReplyMarkup = mainMenu }; await bot.MakeRequestAsync(req); await Task.Run(() => RunBot()); } else { switch (teachReqID) { case 0: //user enter name req = new SendMessage( item.Message.Chat.Id, "نام خود را وارد کنید") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); teachReqID = 1; break; case 1://we get user name and user enter family if (text.Length > 2) { name = text; req = new SendMessage( item.Message.Chat.Id, "نام خانوادگی خود را وارد کنید") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); teachReqID = 2; } else { req = new SendMessage( item.Message.Chat.Id, "نام ورودی شما باید بیش از ۲ حرف باشد") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); } break; case 2://we get user family and user enter age if (text.Length > 2) { family = text; req = new SendMessage( item.Message.Chat.Id, "سن خود را وارد کنید") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); teachReqID = 3; } else { req = new SendMessage( item.Message.Chat.Id, "نام خانوادگی ورودی شما باید بیش از ۲ حرف باشد") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); } break; case 3://we get user age and user enter phone number int agei = Convert.ToInt32(text); if (agei > 9 && agei < 70) { age = text; req = new SendMessage(item.Message.Chat.Id, "شماره موبایل خود را وارد کنید") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); teachReqID = 4; } else { req = new SendMessage(item.Message.Chat.Id, "سن ورودی شما معتبر نیست") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); //req = new SendMessage("@RoiDev", "dfjksf"); } break; case 4://we get user phone number and user enter teach type if (IsPhoneNumber(text)) { phoneNumber = text; req = new SendMessage(item.Message.Chat.Id, "نوع آموزش درخواستی را انتخاب کنید") { ReplyMarkup = teachTypeMenu }; await bot.MakeRequestAsync(req); teachReqID = 5; } else { req = new SendMessage(item.Message.Chat.Id, "شماره موبایل وارد شده معتبر نمیباشد") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); } break; case 5://we get user teachType Req and user enter teacLang if (teachTypeArray.Contains(text)) { teachType = text; req = new SendMessage(item.Message.Chat.Id, "مبحث درخواستی خود را انتخاب کنید") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); teachReqID = 6; } else { req = new SendMessage(item.Message.Chat.Id, "نوع آموزش انتخابی نا معتبر است") { ReplyMarkup = teachTypeMenu }; await bot.MakeRequestAsync(req); } break; case 6://we get teachLang and finish if (text.Length > 1) { teachLang = text; username = item.Message.Chat.Username; req = new SendMessage(item.Message.Chat.Id, "درخواست آموزش شما ثبت شد ") { ReplyMarkup = mainMenu }; await bot.MakeRequestAsync(req); } else { req = new SendMessage(item.Message.Chat.Id, "مبحث درخواستی انتخابی نامعتبر است") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); } break; default: break; } } } if (name != null && family != null && age != null && phoneNumber != null && teachLang != null && teachType != null && username != null) { teachRequest = new TeachRequest(name, family, age, phoneNumber, teachType, teachLang, username); teachReqID = 7; } } catch (Exception ex) { throw; } } teachReqID = 0; }
کلاس ProjectReq برای زمانی که کاربر سفارش پروژه میدهد
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ProgRunBot { class ProjectReq { private string name; public string _name { get { return name; } set { name = value; } } private string family; public string _family { get { return family; } set { family = value; } } private string email; public string _email { get { return email; } set { email = value; } } private string phoneNumber; public string _phoneNumber { get { return phoneNumber; } set { phoneNumber = value; } } private string city; public string _city { get { return city; } set { city = value; } } private string projectSubject; public string _projectSubject { get { return projectSubject; } set { projectSubject = value; } } private string projectDesc; public string _projectDesc { get { return projectDesc; } set { projectDesc = value; } } public ProjectReq(string name, string family, string city, string phoneNum,string projectTitle, string projectDesc, string email) { this.name = name; this.family = family; this.email = email; this.city = city; this.phoneNumber = phoneNum; this.projectDesc = projectDesc; this.projectSubject = projectTitle; } } }
کلاس CooperationReq برای زمانی که کاربر درخواست همکاری میدهد
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ProgRunBot { class CooperationReq { string name; string family; string phoneNum; string userName; string education; string profession; string city; string description; public CooperationReq(string name, string family, string phoneNum, string userName, string education, string profession, string city, string Description) { this.name = name; this.family = family; this.phoneNum = phoneNum; this.userName = userName; this.education = education; this.profession = profession; this.city = city; this.description = Description; } } }
حال میتوانیم متدهای TeachBot , CooprationReq , ProjectReq را برنامه نویسی کنیم.
متد TeachBot برای کدنویسی ری اکشن بات زمانی که درخواست آموزش داریم
public static async Task TeachBot() { TeachRequest teachRequest; string name = null, family = null, phoneNumber = null, age = null, teachType = null, teachLang = null,username=null; var bot = new TelegramBot(Token); var me = await bot.MakeRequestAsync(new GetMe()); Console.WriteLine("user name is {0}", me.Username); long offset = 0; int whileCount = 0; while (teachReqID <7 ) { Console.WriteLine("while is {0}", whileCount); whileCount = +1; var updates = await bot.MakeRequestAsync( new GetUpdates() { Offset = offset }); Console.WriteLine("update count is {0}", updates.Count()); Console.WriteLine("-------------------------------------"); try { foreach (var item in updates) { offset = item.UpdateId + 1; var text = item.Message.Text; if (text == "بازگشت") { teachReqID = 0; req = new SendMessage( item.Message.Chat.Id, "درخواست آموزش شما کنسل شد") { ReplyMarkup = mainMenu }; await bot.MakeRequestAsync(req); await Task.Run(() => RunBot()); } else { switch (teachReqID) { case 0: //user enter name req = new SendMessage( item.Message.Chat.Id, "نام خود را وارد کنید") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); teachReqID = 1; break; case 1://we get user name and user enter family if (text.Length > 2) { name = text; req = new SendMessage( item.Message.Chat.Id, "نام خانوادگی خود را وارد کنید") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); teachReqID = 2; } else { req = new SendMessage( item.Message.Chat.Id, "نام ورودی شما باید بیش از ۲ حرف باشد") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); } break; case 2://we get user family and user enter age if (text.Length > 2) { family = text; req = new SendMessage( item.Message.Chat.Id, "سن خود را وارد کنید") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); teachReqID = 3; } else { req = new SendMessage( item.Message.Chat.Id, "نام خانوادگی ورودی شما باید بیش از ۲ حرف باشد") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); } break; case 3://we get user age and user enter phone number int agei = Convert.ToInt32(text); if (agei > 9 && agei < 70) { age = text; req = new SendMessage(item.Message.Chat.Id, "شماره موبایل خود را وارد کنید") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); teachReqID = 4; } else { req = new SendMessage(item.Message.Chat.Id, "سن ورودی شما معتبر نیست") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); //req = new SendMessage("@RoiDev", "dfjksf"); } break; case 4://we get user phone number and user enter teach type if (IsPhoneNumber(text)) { phoneNumber = text; req = new SendMessage(item.Message.Chat.Id, "نوع آموزش درخواستی را انتخاب کنید") { ReplyMarkup = teachTypeMenu }; await bot.MakeRequestAsync(req); teachReqID = 5; } else { req = new SendMessage(item.Message.Chat.Id, "شماره موبایل وارد شده معتبر نمیباشد") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); } break; case 5://we get user teachType Req and user enter teacLang if (teachTypeArray.Contains(text)) { teachType = text; req = new SendMessage(item.Message.Chat.Id, "مبحث درخواستی خود را انتخاب کنید") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); teachReqID = 6; } else { req = new SendMessage(item.Message.Chat.Id, "نوع آموزش انتخابی نا معتبر است") { ReplyMarkup = teachTypeMenu }; await bot.MakeRequestAsync(req); } break; case 6://we get teachLang and finish if (text.Length > 1) { teachLang = text; username = item.Message.Chat.Username; req = new SendMessage(item.Message.Chat.Id, "درخواست آموزش شما ثبت شد ") { ReplyMarkup = mainMenu }; await bot.MakeRequestAsync(req); } else { req = new SendMessage(item.Message.Chat.Id, "مبحث درخواستی انتخابی نامعتبر است") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); } break; default: break; } } } if (name != null && family != null && age != null && phoneNumber != null && teachLang != null && teachType != null && username != null) { teachRequest = new TeachRequest(name, family, age, phoneNumber, teachType, teachLang, username); teachReqID = 7; } } catch (Exception ex) { throw; } } teachReqID = 0; }
متد CooprationReq برای فیدبک های بات زمانی که کاربر درقسمت درخواست همکاری است
public static async Task CooperationReq() { CooperationReq cooperationReq; string name = null, family = null, phoneNumber = null, age = null, username = null,education=null, profession=null,city=null,desc=null; var bot = new TelegramBot(Token); var me = await bot.MakeRequestAsync(new GetMe()); Console.WriteLine("user name is {0}", me.Username); long offset = 0; int whileCount = 0; while (cooperationReqID<9) { Console.WriteLine("while is {0}", whileCount); whileCount = +1; var updates = await bot.MakeRequestAsync( new GetUpdates() { Offset = offset }); Console.WriteLine("update count is {0}", updates.Count()); Console.WriteLine("--------------------------------------"); try { foreach (var item in updates) { offset = item.UpdateId + 1; var text = item.Message.Text; if (text == "بازگشت") { cooperationReqID = 0; req = new SendMessage( item.Message.Chat.Id, "درخواست همکاری شما کنسل شد") ; await bot.MakeRequestAsync(req); await Task.Run(() => RunBot()); } else { switch (cooperationReqID) { case 0: //user enter name req = new SendMessage( item.Message.Chat.Id, "نام خود را وارد کنید") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); cooperationReqID = 1; break; case 1://we get user name and user enter family if (text.Length > 2) { name = text; req = new SendMessage( item.Message.Chat.Id, "نام خانوادگی خود را وارد کنید") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); cooperationReqID = 2; } else { req = new SendMessage(item.Message.Chat.Id, "نام ورودی شما باید بیش از ۲ حرف باشد") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); } break; case 2://we get user family and user enter age if (text.Length > 2) { family = text; req = new SendMessage(item.Message.Chat.Id, "سن خود را وارد کنید") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); cooperationReqID = 3; } else { req = new SendMessage(item.Message.Chat.Id, "نام خانوادگی ورودی شما باید بیش از ۲ حرف باشد") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); } break; case 3://we get user age and user enter phone number int agei = Convert.ToInt32(text); if (agei > 9 && agei < 70) { age = text; req = new SendMessage(item.Message.Chat.Id, "شماره موبایل خود را وارد کنید") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); cooperationReqID = 4; } else { req = new SendMessage(item.Message.Chat.Id, "سن ورودی شما معتبر نیست") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); } break; case 4://we get user phone number and user enter city if (IsPhoneNumber(text)) { phoneNumber = text; req = new SendMessage(item.Message.Chat.Id, "در کدام شهر ساکن هستید؟" { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); cooperationReqID = 5; } else { req = new SendMessage(item.Message.Chat.Id, "شماره موبایل وارد شده معتبر نمیباشد") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); } break; case 5://we get user city and user enter education if (text.Length > 2) { city = text; req = new SendMessage(item.Message.Chat.Id, "اخرین مدرک تحصیلی خود را وارد کنید") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); cooperationReqID = 6; } else { req = new SendMessage(item.Message.Chat.Id, "شهر وارد شده معتبر نمیباشد") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); } break; case 6://we get user education and user enter proffesion if (text.Length > 2) { education = text; req = new SendMessage(item.Message.Chat.Id, "تخصص های خود که در همکاری با ما به شما کمک میکنند را کامل بنویسید") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); cooperationReqID = 7; } else { req = new SendMessage(item.Message.Chat.Id, "مدرک وارد شده معتبر نمیباشد") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); } break; case 7://we get user proffesion and user enter description if (text.Length >= 1) { profession = text; req = new SendMessage(item.Message.Chat.Id, "هر توضیحی که فکر میکنید درباره همکاری شما با ما " +"نیاز هست رو بنویسید در غیر این صورت یک علامت - بنویسید") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); cooperationReqID = 8; } else { req = new SendMessage(item.Message.Chat.Id, "تخصص های شما معتبر نمیباشد") { ReplyMarkup = returnMenu }; req = new SendMessage(item.Message.Chat.Id, "توضیحات معتبر نیست ,درصورت نداشتن توضیح لطفا علامت - را وارد کنید") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); } break; case 8: if (text.Length > 5 || text == "-") { desc = text; username = item.Message.Chat.Username; req = new SendMessage(item.Message.Chat.Id, "اطلاعات درخواست همکاری شما با موفقت ثبت شد") { ReplyMarkup = mainMenu }; await bot.MakeRequestAsync(req); // cooperationReqID = 9; } else { req = new SendMessage(item.Message.Chat.Id, "توضیحات معتبر نیست ,درصورت نداشتن توضیح لطفا علامت - را وارد کنید") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); } break; } } } if (name != null && family != null && username != null && city != null && desc != null && profession != null && education != null && phoneNumber != null) { cooperationReq = new CooperationReq(name, family, phoneNumber, username, education, profession, city, desc); cooperationReqID = 9; } } catch (Exception ec) { throw; } } }
متد ProjectReq نیز برای زمانی ست که بات باید پاسخگو درخواست پروژه کاربر باشد
public static async Task ProjectReq() { ProjectReq projectReq; string name = null, family = null, email = null, phoneNum = null, city = null, projectTitle = null, projectDesc = null; var bot = new TelegramBot(Token); var me = await bot.MakeRequestAsync(new GetMe()); Console.WriteLine("user name is {0}", me.Username); long offset = 0; int whileCount = 0; while (projectReqID < 8) { Console.WriteLine("while is {0}", whileCount); whileCount = +1; var updates = await bot.MakeRequestAsync(new GetUpdates() { Offset = offset }); Console.WriteLine("update count is {0}", updates.Count()); Console.WriteLine("-------------------------------"); try { foreach (var item in updates) { offset = item.UpdateId + 1; var text = item.Message.Text; if (text == "بازگشت") { projectReqID = 0; req = new SendMessage( item.Message.Chat.Id, "درخواست پروژه شما کنسل شد") { ReplyMarkup = mainMenu }; await bot.MakeRequestAsync(req); await Task.Run(() => RunBot()); } else { switch (projectReqID) { case 0: //user enter name req = new SendMessage( item.Message.Chat.Id, "نام خود را وارد کنید") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); projectReqID = 1; break; case 1://we get user name and user enter family if (text.Length > 2) { name = text; req = new SendMessage(item.Message.Chat.Id, "نام خانوادگی خود را وارد کنید") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); projectReqID = 2; } else { req = new SendMessage(item.Message.Chat.Id, "نام خانوادگی ورودی شما باید بیش از ۲ حرف باشد") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); } break; case 2://we get user family and user enter age if (text.Length >2) { family = text; req = new SendMessage(item.Message.Chat.Id, "ایمیل خود را وارد کنید") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); projectReqID = 3; } else { req = new SendMessage(item.Message.Chat.Id, "نام خانوادگی ورودی شما باید بیش از ۲ حرف باشد") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); } break; case 3://we get user email and user enter city if (IsValidEmail(text)) { email = text; req = new SendMessage(item.Message.Chat.Id, "در کدام شهر ساکن هستید؟") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); projectReqID = 4; } else { req = new SendMessage(item.Message.Chat.Id, "ایمیل ورودی معتبر نمیباشد") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); } break; case 4://we get user city and user enter phoneNum if (text.Length>2) { city = text; req = new SendMessage(item.Message.Chat.Id, "شماره موبایل خودرا وارد کنید") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); projectReqID = 5; } else { req = new SendMessage(item.Message.Chat.Id, "شهر وارد شده معتبر نمیباشد") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); } break; case 5://we get user phoneNum and user enter ProjectTitle if (IsPhoneNumber(text)) { phoneNum = text; req = new SendMessage(item.Message.Chat.Id, "موضوع پروژه درخواستی خود را وارد کنید") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); projectReqID = 6; } else { req = new SendMessage(item.Message.Chat.Id, "شماره موبایل وارد شده معتبر نمیباشد") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); } break; case 6://we get user projectTitle and user enter ProjectDesc if (text.Length >3) { projectTitle = text; req = new SendMessage(item.Message.Chat.Id, "توضیحات لازم برای پروژه درخواستی خود را وارد کنید") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); projectReqID = 7; } else { req = new SendMessage(item.Message.Chat.Id, "موضوع پروژه معتبر نمباشد") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); } break; case 7://we get user ProjectDesc and finish if (text.Length > 3) { projectDesc = text; req = new SendMessage(item.Message.Chat.Id, "اطلاعات پروژه درخواستی شما ثبت شد.") { ReplyMarkup = mainMenu }; await bot.MakeRequestAsync(req); } else { req = new SendMessage(item.Message.Chat.Id, "توضیحات پروژه شما کافی نیست") { ReplyMarkup = returnMenu }; await bot.MakeRequestAsync(req); } break; default: break; } } } if (name != null && family != null && city != null && email != null && projectDesc != null && projectTitle != null && phoneNum != null) { projectReq = new ProjectReq(name, family, city, phoneNum, projectTitle, projectDesc, email); projectReqID = 8; } } catch (Exception ex) { throw; } } }
همچنین ۲متد isPhoneNumber و IsValidEmail نیز داریم که برای تست درستی مقدار شماره موبایل و ایمیل استفاده میشود
public static bool IsPhoneNumber(string number) { return Regex.Match(number, @"^(09[0-9]{9})$").Success; } static bool IsValidEmail(string email) { try { var addr = new System.Net.Mail.MailAddress(email); return addr.Address == email; } catch { return false; } }
حالا میتوان برنامه را اجرا کرد و اجرای صحیح و درست بات تلگرام را دید.
همچنین سورس کامل پروژه رو میتونید از کانال تلگرام ما دریافت کنید