--- title: انتشار ساقی‌بات layout: post tags: تلگرام بات telegram bot ساقی SaaghiBot uuid: ac09dbf5-7bec-47ca-a3ce-763fa62356ae category: پروژه --- بعد از سپری کردن یک آخر هفته پرکار بالاخره اولین ربات تلگرام من آماده شد. [ساقی‌بات](https://telegram.me/SaaghiBot) از این لحظه آماده استفاده است. ## بات چیست؟ پیام‌رسان تلگرام را احتمالا می‌شناسید، چرا که در ایران کاربران زیادی دارد. در ماه ژوئن سال گذشته میلادی (تقریبا تیرماه) تیم تلگرام [بات](https://telegram.org/blog/bot-revolution) را برای اولین بار معرفی کرد. یک بات تلگرام مثل یک اکانت معمولی می‌ماند با اندکی تفاوت. اول اینکه نام (username) همه‌ی بات‌ها به Bot ختم می‌شود. پس می‌شود بسادگی آنها را از سایر حسابهای کاربری تشخیص داد. دیگر اینکه بات نمی‌تواند سرخود به کاربر پیام بدهد بلکه فقط قادر است به پیام‌ها جواب بدهد. بنابراین بات‌ها نمی‌توانند مزاحمتی برای کاربران ایجاد کنند. از جایی که بات هم یک حساب تلگرام است بنابراین می‌تواند مثل سایر حسابها برایش پیام فرستاد. اما پاسخ دادن یا ندادن به پیام بر عهده‌ی خود بات است (همانطور که هر کسی تصمیم می‌گیرد که به پیام ما جواب بدهد یا آنرا ندید بگیرد). هر بات هم تعدادی فرمان دارد که با`/` شروع می‌شوند. بیشتر بات‌ها فرامین `/start` و `/help` را دارند. {: .center .post-image} ![Image not found](assets/pimg/saaghiabout.jpg) ### تعامل با بات به دو طریق می‌توان با بات تعامل داشت. اول ارسال عادی پیام (یا فرمان) مستقیما به خود بات. دوم صدا زدن یک بات در یک گروه یا گفتگوی ثالث. به این قابلیت بات‌ها `Inline Query` گفته می‌شود که تیم تلگرام در روز چهارم ژانویه [معرفی کرد](https://telegram.org/blog/inline-bots). در هر گفتگو یا گروهی می‌توان بات را به صورت `@BotName` یاد کرد (مِنشِن کرد). همچنین همزمان می‌توان پارامترهایی به بات ارسال کرد: `@BotName param1 param2 etc.`. بات در پاسخ به این درخواست (کوئری) می‌تواند چند نتیجه مثل عکس، لینک، جیف و مانند اینها را در پایین صفحه نمایش لیست کند و کاربر یکی نتیجه را از میان آنها انتخاب می‌کند تا در گفتگوی مربوطه نوشته شود. من از این قابلیت در ساقی‌بات برای نمایش لیستی از رباعیات استفاده کرده‌ام. {: .center .post-image} ![Image not found](assets/pimg/saaghiquery.jpg) ## بات چطور کار می‌کند؟ یک بات هم شبیه به حساب کاربری یک دوست است. اول اینکه باید نام کاربری‌اش را دانست و بعد می‌توان با بات گفتگو کرد. بات‌ها می‌توانند به پیام‌ها پاسخ بدهند یا یک `State Machine` پیچیده را پیاده‌سازی کنند. ولی معماری کلی کار بات ساده است. وقتی یک کاربر به یک بات پیامی می‌فرستد، تلگرام یک `Update` را یا از طریق `Polling` یا `Web Hooks` به یک برنامه که جایی روی یک کامپیوتر متصل به اینترنت در حال اجراست ارسال می‌کند. این آپدیت حاوی مشخصات پیام و مشخصات کاربر ارسال کننده پیام است. برنامه‌ی بات هم پس از انجام پردازش‌های لازم پیامی به سرور تلگرام ارسال می‌کند که حاوی توکن و پاسخ است که به نوبه خود پاسخ را تلگرام از آن استخراج کرده و به کاربر می‌فرستد و همینطور الی آخر. ## چطور می‌شود یک بات ساخت؟ برای اینکار هم یک بات وجود دارد! تلگرام بسادگی و از طریق [BotFather](https://telegram.me/BotFather) امکان ساخت بات جدید را می‌دهد. اگر با این بات چت کنید می‌توانید با ارسال فرمان `/newbot` و با دادن نام و نام کاربری دلخواه یک بات جدید بسازید. `BotFather` در عوض به شما یک Token می‌دهد که برای تعامل با بات باید از آن استفاده کرد. یعنی باید با هر درخواست آن را به سرور تلگرام ارسال کرد. تلگرام یک HTTP API فراهم کرده که می‌توان از آن طریق با بات صحبت کرد. ولی نیازی به انجام مسقتیم اینکار نیست چرا که برای زبانهای برنامه‌نویسی مختلف روال‌های سطح پایین نوشته شده‌اند. ## ساقی‌بات چیست؟ [ساقی‌بات](http://mehdix.ir/projects/SaaghiBot) یک ربات تلگرام است که برای کاربر رباعی خیام می‌فرستد. این کار را به دو طریق انجام می‌دهد. اگر با «ساقی» چت کنید، او در دیتاهای خودش دنبال هر کلمه‌ای که برایش بفرستید می‌گردد و یک رباعی شامل آن کلمه را به عنوان پاسخ می‌فرستد. اگر چند با هم ارسال کنید او دنبال یک رباعی می‌گردد که شامل همه‌ی آن کلمات باشد. > ساقی‌بات یک روبات تلگرام است. اسم خودمانی‌اش ساقی است. کارش هم ارسال رباعی خیام به انتخاب کاربر است. اما ساقی از `Inline Query` هم پیشتبانی می‌کند که در حقیقت روش بهتر کار با ساقی است. برای اینکار در ورودی تلگرام باید نام ساقی و بعد یک فاصله و بعد کلمات دلخواه را وارد کرد: ~~~bash @SaaghiBot می پیاله ~~~ ## داده‌های ساقی‌بات کجاست؟ ساقی بات از فایل `YAML` [رباعیات خیام](http://mehdix.ir/omar-khayyam-in-yaml-format.html) که پیش از این منتشر کرده‌ام استفاده می‌کند. خود ساقی هم یک برنامه‌ی اوپن‌سورس است و با نود نوشته شده است. اطلاعات دیگری هم در [صفحه ویژه پروژه](http://mehdix.ir/projects/SaaghiBot) وارد کرده‌ام. ## نتیجه‌گیری ساقی یک بات تمرینی است. تلگرام یک پلتفرم اختصاصی است و من علاقه چندانی به کار روی پلتفرم‌های خاص ندارم اما تلگرام میلیون‌ها کاربر در ایران دارد و به همین خاطر مهم است. از طریق بات‌ها می‌توان سرویس‌های زیادی به کاربر عرضه کرد، از یک جستجوگر ساده مثل ساقی گرفته تا رباتی که با شما گیم بازی کند یا مشاوره بدهد یا راه را نشانتان بدهد یا برایتان محصولی سفارش بدهد. خلاصه خیلی ایده‌ها را می‌توان روی آن سوار کرد. امیدوارم که رباتهای جالبی در وب فارسی ببینیم. ## دوشنبه‌های شاد آخر ماه من از [جادی](http://jadi.net/) خواستم که ساقی را در لینک‌های دوشنبه‌های شاد آخر ماه به خوانندگانش معرفی کند. قرار هم گذاشته‌ام که اگر ساقی جواب داد بات دیگری به همین سبک منشر کنم که کار ساده ولی مهمی انجام می‌دهد. بابت معرفی ساقی از او تشکر می‌کنم.