آموزش ساخت ربات تلگرام کوتاه کننده لینک در سی شارپ
به احتمال زیاد شما هم یکی از کاربران پیام رسان تلگرام هستید و تا به حال با ربات های زیادی که در این پیام رسان وجود دارند، کار کرده اید. در این مقاله نحوه ساخت و راه اندازی یک ربات تلگرام در سی شارپ را به شما آموزش خواهیم داد. این ربات یک آدرس (URL) از کاربر دریافت می کند و آن را به صورت کوتاه شده به کاربر تحویل می دهد. بخش هایی که در این مقاله آموزشی بررسی می شوند را در زیر مشاهده می کنید.
- معرفی ربات تلگرام
- نحوه کار ربات تلگرام
- ایجاد یک ربات تلگرام به صورت گام به گام
- ایجاد نرم افزار کنترل کننده ربات با سی شارپ
- تست ربات کوتاه کننده لینک
- نکات آموزش
معرفی ربات تلگرام
ربات ها برنامه های شخص ثالثی هستند که در داخل تلگرام اجرا می شوند. از ربات ها به منظور ارائه خدمات مختلفی (مانند دریافت اخبار جدید، کوتاه کردن لینک، دانلود فایل از YouTube و غیره) استفاده می شود. کاربران می توانند با ارسال پیام های خود با آن ها ارتباط برقرار کنند. ربات ها توسط درخواست های HTTPS به API تلگرام کنترل می شوند.
نحوه کار ربات تلگرام
در هسته تلگرام، حساب های خاصی وجود دارند که برای کار کردن نیازی به شماره تلفن ندارند و کاربران برای ارتباط با آن ها می توانند از دو روش زیر استفاده کنند:
- ارسال پیام و دستورات به ربات به وسیله ایجاد یک چت با آن یا اضافه کردن آن به گروه ها.
- ارسال درخواست به صورت مستقیم، به این روش inline گفته می شود (مانند ربات @gif).
پیام ها، دستورات و درخواست های ارسال شده به ربات توسط کاربران، به نرم افزاری که بر روی سرور شما اجرا می شود، فرستاده می شوند. سرور واسط تلگرام تمام کارهای مربوط به رمزنگاری و برقراری ارتباط را انجام می دهد. نرم افزارهای که برای مدیریت ربات ها نوشته می شوند، از طریق رابط ساده HTTPS با سرور تلگرام ارتباط برقرار می کنند که یک نسخه ساده از API تلگرام را ارائه می دهد. منظور از API ربات، همین رابطی است که در بالا ذکر شد. برای مشاهده مستندات کامل API ربات تلگرام به لینک Telegram Bot API مراجعه کنید.
ایجاد یک ربات تلگرام
به منظور ایجاد یک ربات جدید، باید از ربات BotFather استفاده کنید. این ربات پدر همه ربات های موجود در تلگرام است و برای مدیریت آن ها استفاده می شود. با استفاده از BotFather می توانید یک ربات جدید ایجاد کنید و یا تنظیمات مربوط به رباتی که قبلا ایجاد کرده اید را تغییر دهید. برای ایجاد ربات با استفاده از BotFahter مراحل زیر را دنبال کنید:
ورود به ربات BotFahter
عبارت BotFather را جستجو کنید.
وارد ربات @BotFahter شوید و گزینه Start را بزنید تا لیست کارهایی که می توانید با استفاده از این ربات انجام دهید، نمایش داده شود. در صورتی که این لیست نمایش داده نشود، می توانید از دستور /help استفاده کنید.
ساخت ربات جدید
در لیست دستورات نمایش داده شده، دستور /newbot برای ایجاد ربات جدید استفاده می شود و /mybots ربات هایی که ایجاد کرده اید را نشان می دهد. سایر دستورات برای ویرایش اطلاعات و تنظیمات ربات استفاده می شود. دستور /newbot را وارد یا انتخاب کنید.
انتخاب یک نام برای ربات
بعد از وارد کردن دستور ساخت ربات جدید از شما می خواهد تا یک نام برای این ربات انتخاب کنید. یک نام برای ربات خود وارد کنید.
انتخاب یک نام کاربری برای ربات
بعد از انتخاب نام ربات از شما می خواهد تا یک نام کاربری برای آن انتخاب کنید. این نام کاربری حتما باید به کلمه bot ختم شود. مانند tetris_bot یا TetrisBot.
دریافت token ربات
بعد از وارد کردن نام کاربری اگر این نام کاربری مشکلی نداشته باشد، پیام موفقیت آمیز بودن ساخت ربات به همراه token مربوط به ربات شما نمایش داده می شود. برای حفظ امینت ربات خود این token را به هیچ کسی ندهید. زیرا هر کسی که token ربات شما داشته باشد می تواند به طور کامل به آن دسترسی داشته باشد.
ایجاد نرم افزار کنترل کننده ربات با سی شارپ
تا اینجای کار ما ربات خود را در تلگرام ایجاد کردیم و می توانیم با استفاده از token، عملکرد آن را کنترل کنیم. حال باید یک نرم افزار برای کنترل ورودی / خروجی ربات خودمان ایجاد کنید. برای ایجاد این نرم افزار مراحل زیر را دنبال کنید:
ایجاد یک پروژه جدید از نوع WindowsForms
نرم افزار ویژوال استودیو (Visual Studio) را اجرا کنید سپس از قسمت منوی نرم افزار گزینه File > New > Project را انتخاب کنید.
یک پروژه از نوع WindowsForms ایجاد کنید.
نصب پکیج Telegram.Bot
از قسمت منوی نرم افزار گزینه Tools > NuGet Package Mananger > Manage NuGet Packages For Solution را انتخاب کنید.
در پنجره باز شده، عبارت Telegram.Bot را وارد کنید تا لیست بسته های موجود فیلتر شود. سپس بسته Telegram.Botرا انتخاب کرده و بر رو دکمه Install کلیک کنید تا نصب این بسته شروع شود.
طراحی ظاهر نرم افزار
برای ظاهر نرم افزار دو عدد Button با نام های BtnStart و BtnStop و یک عدد RichTextBox با نام TxtLogs برای نمایش ورودی / خروجی های ربات به فرم خود اضافه کنید.
ایجاد کلاس ShortenerBot
یک کلاس با نام ShortenerBot ایجاد کنید و کد های زیر را در آن بنویسید:
محتوای فایل ShortenerBot.cs
using System; using System.Linq; using System.Net; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using Telegram.Bot; using Telegram.Bot.Args; using Telegram.Bot.Types.Enums; namespace CSharpURLShortenerBot { public static class ShortenerBot { #region Fields /// <summary> /// پاسخ دستور /start - شما می توانید این پیام را با استفاده از درستور setdescription یا setabouttext برای ربات خود تنظیم کنید. /// </summary> private const string StartCommandResponse = "خوش آمدید.\n" + "آدرس خود را برای کوتاه کردن وارد کنید. مانند نمونه زیر:\n" + " https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png"; /// <summary> /// پاسخ آدرس نامعتبر /// </summary> private const string InvalidUrlResponse = "آدرس وارد شده نامعتبر است!"; /// <summary> /// آدرس کوتاه شده با استفاده از سایت yon.ir /// </summary> private const string ShortenedUrl = "http://yon.ir/{0}"; /// <summary> /// API سایت yon.ir برای کوتاه کردن آدرس /// </summary> private const string UrlShortenerApi = "http://api.yon.ir/?url={0}"; /// <summary> /// برای برقراری ارتباط با ربات تلگرامی /// </summary> private static ITelegramBotClient _botClient; #endregion #region Events /// <summary> /// زمانی که کاربر پیامی به ربات بفرست این رویداد فراخوانی می شود /// </summary> public static event EventHandler<ChatEventArgs> MessageReceived; private static void OnMessageReceived(ChatEventArgs e) { MessageReceived?.Invoke(null, e); } /// <summary> /// زمانی که ربات پاسخ کاربر را ارسال کند، این رویداد فراخوانی می شود /// </summary> public static event EventHandler<ChatEventArgs> MessageSent; private static void OnMessageSent(ChatEventArgs e) { MessageSent?.Invoke(null, e); } #endregion #region Public Members /// <summary> /// برای آماده سازی ربات با استفاده از token داده شده /// </summary> /// <param name="botToken">توکن ربات</param> public static void InitializeBot(string botToken) { _botClient = new TelegramBotClient(botToken); _botClient.OnMessage += OnMessageRecevied; } /// <summary> /// برای شروع کار ربات استفاده می شود /// </summary> public static void Start() { _botClient.StartReceiving(); } /// <summary> /// برای توقف کار ربات استفاده می شود /// </summary> public static void Stop() { _botClient.StopReceiving(); } #endregion #region Private Members /// <summary> /// برای بررسی معتبر بودن آدرس استفاده می شود /// </summary> /// <param name="url">آدرسی که باید بررسی شود</param> /// <returns></returns> private static bool IsValidUrl(string url) { if (url == null) return false; try { const string pattern = @"^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$"; var regex = new Regex(pattern); var match = regex.Match(url); return match.Success; } catch { return false; } } /// <summary> /// آدرسی که کاربر داده است را با استفاده از سایت yon.ir کوتاه می کند و نتیجه را به صورت یک رشته باز می گرداند /// </summary> /// <param name="url">آدرسی که باید کوتاه شود</param> /// <returns></returns> private static async Task<string> GetShortUrlAsync(string url) { try { using (var client = new WebClient()) { var data = await client.DownloadDataTaskAsync(string.Format(UrlShortenerApi, url)); var shortedUrl = Encoding.UTF8 .GetString(data) // {"status":true,"output":"iz8ye","clicks":0} .Split(',') // { "{\"status\":true", "\"output\":\"iz8ye\"", "\"clicks":0"} [1].Split(':') // { "\"output\"", "\"iz8ye\"" } .Last() // "\"iz8ye\"" .Replace("\"", null); // "iz8ye" return string.Format(ShortenedUrl, shortedUrl); } } catch (Exception ex) { throw new Exception(ex.Message); } } /// <summary> /// زمانی که کاربر پیامی به ربات ارسال کند این رویداد فراخوانی می شود /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private static async void OnMessageRecevied(object sender, MessageEventArgs e) { var message = e.Message.Text; if (string.IsNullOrEmpty(message)) return; OnMessageReceived(new ChatEventArgs { Message = message }); if (message.Equals("/start")) { // ارسال پیام خوش آمد گویی به کاربر await _botClient.SendTextMessageAsync(e.Message.Chat, StartCommandResponse, ParseMode.Default, true); OnMessageSent(new ChatEventArgs { Message = StartCommandResponse }); return; } if (!IsValidUrl(message)) { // ارسال پیام خطا به کاربر await _botClient.SendTextMessageAsync(e.Message.Chat, InvalidUrlResponse, ParseMode.Default, true, false, e.Message.MessageId); OnMessageSent(new ChatEventArgs { Message = InvalidUrlResponse }); return; } await SendShortenedUrlAsync(e, message); } /// <summary> /// برای ارسال آدرس کوتاه شده به کاربر استفاده می شود /// </summary> /// <param name="e"></param> /// <param name="message"></param> /// <returns></returns> private static async Task SendShortenedUrlAsync(MessageEventArgs e, string message) { var shoretedUrl = await GetShortUrlAsync(message); // ارسال آدرس کوتاه شده به کاربر await _botClient.SendTextMessageAsync(e.Message.Chat, shoretedUrl, // پیامی که ارسال می شود ParseMode.Default, // نوع پارس کردن پیام را مشخص می کند true, // مشخص می کند که آیا موقع ارسال شدن آدرس، پیش نمایشی از آن نشان داده شود یا خیر. false, // در صورت false بودن، کاربر هنگام دریافت پیام اعلان دریافت می کند. e.Message.MessageId); // این پارامتر شناسه پیامی که باید repley شود، را مشخص می کند. OnMessageSent(new ChatEventArgs { Message = shoretedUrl }); } #endregion } }
بخش های مختلف کد بالا با کامنت گذاری توضیح داده شده است. در صورت نا مفهوم بودن بخشی از کد، می توانید در قسمت نظرات مطرح کنید تا برای شما توضیح داده شود.
یک کلاس دیگر با نام ChatEventArgs ایجاد کنید و کد زیر را در آن بنویسید:
using System; namespace CSharpURLShortenerBot { public class ChatEventArgs : EventArgs { public string Message { get; set; } } }
این کلاس به عنوان آرگومان رویداد های MessageReceived و MessageSent کلاس ShortenerBot مورد استفاده قرار می گیرد.
استفاده از کلاس ShortenerBot
برای فرم نرم افزار یک رویداد Load و Button های آن رویداد Click ایجاد کنید و سپس کد زیر را در فایل Form1.cs بنویسید:
محتوای فایل Form1.cs
using System; using System.Windows.Forms; namespace CSharpURLShortenerBot { public partial class Form1 : Form { public Form1() { InitializeComponent(); // ایجاد handler برای رویداد های کلاس ShortenerBot // برای زمانی که پیام دریافت شود ShortenerBot.MessageReceived += OnMessageReceived; // برای زمانی که پیام ارسال شود ShortenerBot.MessageSent += OnMessageSent; } /// <summary> /// زمانی که ربات پیامی به کاربر ارسال کند، این متد فراخوانی می شود /// </summary> /// <param name="sender"></param> /// <param name="e">آرگومانی که شامل پیام ارسال شده است</param> private void OnMessageSent(object sender, ChatEventArgs e) { WriteLog($"پیام ارسال شده: {e.Message}"); } /// <summary> /// زمانی که کاربر پیامی به ربات ارسال کند، این متد فراخوانی می شود /// </summary> /// <param name="sender"></param> /// <param name="e">آرگومانی که شامل پیام ارسال شده است</param> private void OnMessageReceived(object sender, ChatEventArgs e) { WriteLog($"پیام دریافت شده: {e.Message}"); } private void Form1_Load(object sender, EventArgs e) { // آماده سازی ربات با استفاده token // token ربات خود را باید در این قسمت وارد کنید ShortenerBot.InitializeBot("706187293:AAFbcRwwRq9JJ6_oXtovFaCt-fF20PDlvZY"); } private void BtnStart_Click(object sender, EventArgs e) { BtnStop.Enabled = true; BtnStart.Enabled = false; ShortenerBot.Start(); } private void BtnStop_Click(object sender, EventArgs e) { BtnStop.Enabled = false; BtnStart.Enabled = true; ShortenerBot.Stop(); } private void WriteLog(string logContent) { TxtLogs.Invoke(new Action(() => TxtLogs.Text += logContent + Environment.NewLine)); } } }
بخش های مختلف کد بالا با کامنت گذاری توضیح داده شده است. در صورت نا مفهوم بودن بخشی از کد، می توانید در قسمت نظرات مطرح کنید تا برای شما توضیح داده شود.
تست ربات کوتاه کننده لینک با سی شارپ
بعد از انجام مراحل بالا، ربات شما آماده کار است و می توانید از آن استفاده کنید. نرم افزار را اجرا کنید و دکمه Start را بزنید تا ربات شما آماده دریافت پیام شود.
حال از طریق شناسه ربات وارد آن شوید و بر روی گزینه Start کلیک کنید.
برای تست یک آدرس وارد کنید.
همانطور که مشاهده می کنید، ربات به خوبی کار می کند.
نکات آموزش
- در این آموزش از نسخه ۲۰۱۵ نرم افزار Visual Studio استفاده شده است.
- برای کار با API ربات تلگرام از کتابخانه Telegram.Bot استفاده شده است.
- مستندات Telegram.Bot به صورت کامل
- برای کوتاه کردن لینک از API سایت yon.ir استفاده شده است.
- به منظور اتصال به API تلگرام باید از یک VPN استفاده کنید.
برای استفاده از این نرم افزار کافیست Token ربات خود را با Token موجود در رویداد Load جایگزین کنید:
private void Form1_Load(object sender, EventArgs e) { // token ربات خود را باید در این قسمت وارد کنید ShortenerBot.InitializeBot("706187293:AAFbcRwwRq9JJ6_oXtovFaCt-fF20PDlvZY"); }
نوشته آموزش ساخت ربات تلگرام کوتاه کننده لینک در سی شارپ اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.