در دنیای امروز، تلگرام به یکی از محبوبترین پیامرسانها تبدیل شده است که علاوه بر امکانات ارتباطی، پتانسیل بالایی برای اتوماسیون وظایف و ارائه خدمات از طریق رباتها دارد. رباتهای تلگرام ابزارهایی هستند که میتوانند برای مقاصد مختلفی مثل پاسخدهی خودکار، مدیریت کاربران، ارائه اطلاعات و حتی سرگرمی استفاده شوند.
چرا باید از پایتون استفاده کنیم؟ پایتون یکی از قدرتمندترین و سادهترین زبانهای برنامهنویسی برای توسعه رباتهای تلگرام است. با استفاده از کتابخانههای آماده و مستندات جامع، ساخت ربات با پایتون به کاری آسان و جذاب تبدیل شده است. علاوه بر این، جامعه بزرگی از توسعهدهندگان پایتون وجود دارد که همیشه میتوان از آنها کمک گرفت.
در این مقاله، قصد داریم شما را قدمبهقدم با نحوه ساخت ربات تلگرام با استفاده از زبان پایتون آشنا کنیم. این آموزش به گونهای طراحی شده که حتی اگر تجربه زیادی در برنامهنویسی ندارید، بتوانید ربات خود را ساخته و اجرا کنید. در نهایت، شما خواهید آموخت چگونه یک ربات ساده بسازید و آن را به ویژگیهای پیشرفتهتر مجهز کنید.
آنچه در این آموزش خواهید آموخت:
- نحوه دریافت توکن ربات از BotFather.
- نصب و استفاده از کتابخانههای پایتون برای ارتباط با API تلگرام.
- ایجاد دستورات مختلف و تعامل با کاربران.
- افزودن قابلیتهایی مثل کلیدهای شیشهای و مدیریت پیامها.
- اجرای دائمی ربات بر روی یک سرور.
این مقاله برای علاقهمندان به یادگیری برنامهنویسی، توسعهدهندگان تازهکار و حتی افراد حرفهای که به دنبال گسترش مهارتهای خود هستند، مناسب است. با ما همراه باشید تا اولین ربات تلگرام خود را بسازید!
پیشنیازها
قبل از شروع ساخت ربات تلگرام با پایتون، لازم است چند مورد را آماده کنید و با ابزارها و مفاهیم پایهای آشنا شوید. در این بخش، پیشنیازهای لازم را معرفی میکنیم و شما را برای شروع پروژه آماده میکنیم.
آشنایی اولیه با پایتون
اگر با زبان برنامهنویسی پایتون آشنایی ندارید، بهتر است ابتدا مفاهیم پایهای مانند نصب پایتون، تعریف متغیرها، حلقهها، و توابع را مرور کنید. شما نیازی به دانش پیشرفته در برنامهنویسی ندارید و مفاهیم موردنیاز در طول مقاله توضیح داده خواهند شد.
نصب Python
ابتدا باید پایتون را روی سیستم خود نصب کنید:
- به وبسایت Python.org بروید.
- آخرین نسخه پایدار پایتون را دانلود کنید.
- هنگام نصب، گزینه Add Python to PATH را فعال کنید.
برای اطمینان از نصب صحیح، دستور زیر را در ترمینال یا Command Prompt اجرا کنید:
python --version
یا در برخی سیستمها:
python3 --version
نصب IDE یا ویرایشگر کد
برای نوشتن کدها، به یک محیط توسعه نیاز دارید. از گزینههای زیر میتوانید استفاده کنید:
- VSCode: یک ویرایشگر قدرتمند و سبک.
- PyCharm: یک IDE پیشرفته برای پروژههای پایتون.
دریافت تلگرام و BotFather
برای ایجاد ربات تلگرام، به یک حساب تلگرام نیاز دارید. اگر هنوز تلگرام را نصب نکردهاید، آن را از وبسایت تلگرام دانلود کنید.
سپس باید با BotFather، ابزاری رسمی تلگرام برای مدیریت رباتها، آشنا شوید:
- در تلگرام، BotFather را جستجو کنید و وارد گفتوگو شوید.
- دستور
/start
را ارسال کنید.
جزئیات نحوه دریافت توکن در بخش بعدی توضیح داده خواهد شد.
نصب کتابخانههای موردنیاز
برای برقراری ارتباط با API تلگرام، از کتابخانههای زیر استفاده میکنیم:
- python-telegram-bot: کتابخانهای قدرتمند و پرکاربرد.
- telebot: گزینهای سبکتر برای پروژههای ساده.
برای نصب کتابخانه موردنظر، ترمینال را باز کنید و دستور زیر را اجرا کنید:
pip install python-telegram-bot
یا برای نصب Telebot:
pip install pyTelegramBotAPI
آمادگی ذهنی
- مطمئن شوید که محیطی برای تمرکز دارید.
- پروژه را به بخشهای کوچک تقسیم کنید و هر بخش را به ترتیب انجام دهید.
- از آزمون و خطا نترسید! ایجاد خطا بخشی از فرآیند یادگیری است.
ساخت توکن ربات تلگرام
برای شروع ساخت ربات تلگرام، ابتدا باید یک توکن دریافت کنید. این توکن بهعنوان کلید ارتباطی شما با API تلگرام عمل میکند و از طریق ربات رسمی تلگرام به نام BotFather ارائه میشود. در این بخش، قدمبهقدم مراحل دریافت توکن را توضیح میدهیم.
مرحله 1: جستجوی BotFather
- وارد تلگرام شوید.
- در قسمت جستجوی تلگرام، عبارت
BotFather
را تایپ کنید. - ربات رسمی تلگرام با علامت تأیید آبی (✔) را پیدا کرده و روی آن کلیک کنید.
مرحله 2: شروع گفتوگو با BotFather
- پس از ورود به گفتوگو با BotFather، دستور زیر را ارسال کنید:
/start
- BotFather لیستی از دستورات را برای شما ارسال میکند. در میان این دستورات، گزینه /newbot را پیدا کنید.
مرحله 3: ایجاد ربات جدید
- دستور
/newbot
را ارسال کنید. - BotFather از شما میخواهد که یک نام برای ربات خود انتخاب کنید. نام ربات را وارد کنید (مثلاً:
MyFirstBot
). - سپس، BotFather از شما یک نام کاربری (Username) میخواهد. این نام باید با کلمه “bot” پایان یابد (مثلاً:
MyFirstBot_bot
).- اگر نام انتخابی شما تکراری باشد، BotFather از شما میخواهد نام دیگری وارد کنید.
مرحله 4: دریافت توکن
- پس از انتخاب موفقیتآمیز نام کاربری، BotFather یک پیام شامل توکن ربات برای شما ارسال میکند.
- پیام به شکل زیر خواهد بود:
Done! Congratulations on your new bot. You will find it at t.me/MyFirstBot. Use this token to access the HTTP API: 123456789:ABCdefGhIjkLmNoPqRsTuVWxYz
- پیام به شکل زیر خواهد بود:
- توکن را کپی کرده و در یک مکان امن ذخیره کنید. (برای مثال، میتوانید آن را در فایل متنی ذخیره کنید.)
مرحله 5: آزمایش ربات
- روی لینک ارائهشده توسط BotFather کلیک کنید (مثلاً:
t.me/MyFirstBot
). - وارد صفحه چت ربات شوید و دکمه Start را فشار دهید.
- هنوز ربات شما هیچ عملکردی ندارد، اما این گام برای اطمینان از فعال بودن ربات ضروری است.
نکتههای مهم:
- توکن ربات را با کسی به اشتراک نگذارید. این توکن به دیگران امکان میدهد تا به ربات شما دسترسی پیدا کنند.
- اگر به هر دلیلی توکن شما فاش شد، میتوانید از دستور
/revoke
در BotFather استفاده کنید تا توکن جدیدی دریافت کنید.
ایجاد پروژه ربات در پایتون
در این بخش، اولین پروژه ربات تلگرام خود را در پایتون ایجاد میکنیم. این شامل تنظیم محیط پروژه، نصب کتابخانههای موردنیاز و نوشتن اولین کد برای اجرای ربات است.
مرحله 1: ایجاد پوشه پروژه
ابتدا یک پوشه جدید برای پروژه خود ایجاد کنید. این پوشه محلی است که تمامی فایلهای مرتبط با ربات، از جمله اسکریپتها و دادهها، در آن ذخیره خواهند شد. مثلاً نام پوشه را TelegramBot
بگذارید.
مرحله 2: تنظیم محیط مجازی (اختیاری اما توصیهشده)
ایجاد یک محیط مجازی به شما کمک میکند کتابخانههای موردنیاز پروژه را بهصورت مجزا مدیریت کنید:
- در ترمینال یا Command Prompt، به پوشه پروژه بروید:
cd path/to/TelegramBot
- دستور زیر را برای ایجاد محیط مجازی اجرا کنید:
python -m venv venv
- محیط مجازی را فعال کنید:
- در ویندوز:
venv\Scripts\activate
- در مک یا لینوکس:
source venv/bin/activate
- در ویندوز:
مرحله 3: نصب کتابخانههای موردنیاز
در محیط مجازی یا سیستم اصلی، دستور زیر را برای نصب کتابخانه python-telegram-bot
اجرا کنید:
pip install python-telegram-bot
این کتابخانه ابزارهای لازم برای برقراری ارتباط با API تلگرام را فراهم میکند.
مرحله 4: ایجاد فایل کد
در پوشه پروژه، یک فایل جدید با نام bot.py
ایجاد کنید. این فایل حاوی کدهای مربوط به ربات شما خواهد بود.
مرحله 5: نوشتن اولین کد ربات
کد زیر را در فایل bot.py
کپی کنید. این کد یک ربات ساده است که پیام “Hello, World!” را به کاربر برمیگرداند:
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes
# دستور /start
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
await update.message.reply_text("Hello, World!")
# ایجاد اپلیکیشن
app = ApplicationBuilder().token("توکن_شما").build()
# اضافه کردن دستور /start
app.add_handler(CommandHandler("start", start))
# اجرای ربات
print("ربات در حال اجرا است...")
app.run_polling()
مرحله 6: جایگزینی توکن
در خط زیر:
app = ApplicationBuilder().token("توکن_شما").build()
عبارت "توکن_شما"
را با توکن دریافتی از BotFather جایگزین کنید. مثلاً:
app = ApplicationBuilder().token("123456789:ABCdefGhIjkLmNoPqRsTuVWxYz").build()
مرحله 7: اجرای کد
برای اجرای ربات، دستور زیر را در ترمینال وارد کنید:
python bot.py
اگر کدی با موفقیت اجرا شود، پیامی مانند زیر نمایش داده میشود:
ربات در حال اجرا است...
مرحله 8: تست ربات
- به تلگرام بروید و وارد چت ربات شوید.
- دستور
/start
را ارسال کنید. - باید پیام “Hello, World!” را از ربات دریافت کنید.
نکات و خطاهای احتمالی
- اگر ربات شما پاسخی ارسال نکرد، مطمئن شوید که توکن را به درستی جایگزین کردهاید.
- خطای نصب: اگر با خطای نصب
python-telegram-bot
مواجه شدید، اطمینان حاصل کنید که pip بهروزرسانی شده باشد:pip install --upgrade pip
افزودن دستورات به ربات
در این بخش، یاد میگیرید چگونه دستورات (Commands) مختلفی را به ربات تلگرام خود اضافه کنید. دستورات، تعامل کاربران با ربات را سادهتر میکنند و امکان اجرای عملکردهای متنوعی را فراهم میسازند. در ادامه، دستورات رایجی مانند /start
و /help
را اضافه میکنیم و نحوه استفاده از آنها را بررسی میکنیم.
مرحله 1: افزودن دستور /help
دستور /help
معمولاً برای نمایش اطلاعاتی درباره عملکرد ربات استفاده میشود. برای اضافه کردن این دستور، ابتدا باید یک تابع جدید تعریف کنید:
async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
await update.message.reply_text(
"دستورات موجود:\n"
"/start - شروع ربات\n"
"/help - دریافت لیست دستورات\n"
"/about - درباره ربات"
)
این تابع پیامی شامل توضیح دستورات موجود در ربات را به کاربر ارسال میکند.
مرحله 2: افزودن دستور /about
دستور /about
میتواند اطلاعاتی درباره ربات یا سازنده آن ارائه دهد. مثال زیر را اضافه کنید:
async def about_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
await update.message.reply_text("این ربات توسط [نام شما] ساخته شده است. 🚀")
مرحله 3: اضافه کردن دستورات به ربات
اکنون باید دستورات جدید را به ربات اضافه کنید. برای این کار، متد add_handler
را برای هر دستور فراخوانی کنید. کد کامل شما باید شبیه زیر باشد:
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes
# دستور /start
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
await update.message.reply_text("سلام! به ربات خوش آمدید.")
# دستور /help
async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
await update.message.reply_text(
"دستورات موجود:\n"
"/start - شروع ربات\n"
"/help - دریافت لیست دستورات\n"
"/about - درباره ربات"
)
# دستور /about
async def about_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
await update.message.reply_text("این ربات توسط [نام شما] ساخته شده است. 🚀")
# ایجاد اپلیکیشن
app = ApplicationBuilder().token("توکن_شما").build()
# اضافه کردن دستورات
app.add_handler(CommandHandler("start", start))
app.add_handler(CommandHandler("help", help_command))
app.add_handler(CommandHandler("about", about_command))
# اجرای ربات
print("ربات در حال اجرا است...")
app.run_polling()
مرحله 4: تست دستورات
- فایل
bot.py
را ذخیره کنید و مجدداً اجرا کنید:python bot.py
- در تلگرام، دستورات
/start
,/help
, و/about
را ارسال کنید. - مطمئن شوید که پیامهای تعریفشده به درستی ارسال میشوند.
مرحله 5: شخصیسازی دستورات
میتوانید پیامها و عملکرد دستورات را بر اساس نیاز خود تغییر دهید. برای مثال:
- در دستور
/help
، دستورات بیشتری اضافه کنید. - در دستور
/about
، لینک به شبکههای اجتماعی خود را قرار دهید.
نکات اضافی
- اگر تعداد دستورات شما زیاد شد، میتوانید آنها را در فایلهای جداگانه مدیریت کنید.
- میتوانید از دستورات شرطی برای ایجاد پاسخهای متفاوت بر اساس محتوای پیام استفاده کنید.
مدیریت پیامها
در این بخش، نحوه دریافت و مدیریت پیامهای کاربران را بررسی میکنیم. علاوه بر دستورات از پیش تعریفشده، ربات میتواند پیامهای مختلفی را که کاربران ارسال میکنند پردازش کند و بر اساس آنها پاسخ دهد.
مرحله 1: افزودن مدیریت پیامهای متنی
برای مدیریت پیامهای عمومی (غیر دستوری)، از MessageHandler
استفاده میکنیم. این هندلر به شما اجازه میدهد پیامهایی را که کاربران ارسال میکنند دریافت کرده و پاسخ مناسب ارسال کنید. مثال زیر نحوه پیادهسازی این قابلیت را نشان میدهد:
from telegram.ext import MessageHandler, filters
async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
# دریافت پیام کاربر
user_message = update.message.text
# پاسخ به پیام
await update.message.reply_text(f"شما گفتید: {user_message}")
مرحله 2: اضافه کردن MessageHandler به ربات
برای اینکه ربات بتواند پیامهای عمومی را پردازش کند، باید MessageHandler
را به اپلیکیشن اضافه کنید. کد کامل شما به این شکل خواهد بود:
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes, MessageHandler, filters
# دستور /start
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
await update.message.reply_text("سلام! به ربات خوش آمدید.")
# دستور /help
async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
await update.message.reply_text(
"دستورات موجود:\n"
"/start - شروع ربات\n"
"/help - دریافت لیست دستورات\n"
"/about - درباره ربات"
)
# دستور /about
async def about_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
await update.message.reply_text("این ربات توسط [نام شما] ساخته شده است. 🚀")
# مدیریت پیامهای متنی
async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
user_message = update.message.text
await update.message.reply_text(f"شما گفتید: {user_message}")
# ایجاد اپلیکیشن
app = ApplicationBuilder().token("توکن_شما").build()
# اضافه کردن دستورات
app.add_handler(CommandHandler("start", start))
app.add_handler(CommandHandler("help", help_command))
app.add_handler(CommandHandler("about", about_command))
# اضافه کردن مدیریت پیامهای عمومی
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
# اجرای ربات
print("ربات در حال اجرا است...")
app.run_polling()
مرحله 3: تست پاسخ به پیامها
- فایل
bot.py
را ذخیره کرده و اجرا کنید:python bot.py
- در تلگرام، هر متنی (غیر دستوری) را به ربات ارسال کنید.
- ربات باید پیام شما را دریافت کرده و پاسخ مشابه ارسال کند. مثلاً:
- شما: “سلام”
- ربات: “شما گفتید: سلام”
مرحله 4: افزودن منطق پیچیدهتر
شما میتوانید پیامها را بر اساس محتوای آنها تحلیل کرده و پاسخهای مختلفی ارسال کنید. برای مثال:
- اگر کاربر پیام “سلام” ارسال کرد، پاسخ خاصی ارسال شود:
if user_message.lower() == "سلام": await update.message.reply_text("سلام! حال شما چطور است؟") else: await update.message.reply_text(f"شما گفتید: {user_message}")
مرحله 5: پاسخ به انواع دیگر پیامها
میتوانید ربات را بهگونهای تنظیم کنید که به انواع دیگری از پیامها (مانند عکس، ویدیو، یا فایل) نیز پاسخ دهد. برای این کار از فیلترهای مناسب استفاده کنید. مثال:
- پاسخ به عکس:
async def handle_photo(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: await update.message.reply_text("متشکرم برای ارسال عکس!") app.add_handler(MessageHandler(filters.PHOTO, handle_photo))
نکات اضافی
- از کتابخانههایی مانند NLTK یا spaCy برای پردازش زبان طبیعی (Natural Language Processing) استفاده کنید.
- برای ذخیره پیامهای کاربران (مثلاً برای تحلیل دادهها)، میتوانید از فایل یا پایگاه داده استفاده کنید.
7. افزودن امکانات پیشرفته به ربات
در این بخش، نحوه افزودن امکانات پیشرفته مانند کلیدهای شیشهای (Inline Keyboards) و پیامهای تعاملی را بررسی میکنیم. این امکانات، تعامل با کاربران را جذابتر و حرفهایتر میکند.
مرحله 1: استفاده از کلیدهای شیشهای (Inline Keyboards)
کلیدهای شیشهای دکمههایی هستند که در زیر پیام ظاهر میشوند و میتوانند عملکردهای مختلفی را اجرا کنند.
ایجاد کلیدهای شیشهای
برای ایجاد یک کلید ساده که یک پیام خاص را ارسال کند، کد زیر را به فایل خود اضافه کنید:
from telegram import InlineKeyboardButton, InlineKeyboardMarkup
async def inline_keyboard(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
# تعریف کلیدها
keyboard = [
[InlineKeyboardButton("وبسایت", url="https://example.com")],
[InlineKeyboardButton("دکمه دیگر", callback_data="button_clicked")],
]
reply_markup = InlineKeyboardMarkup(keyboard)
# ارسال پیام با کلیدهای شیشهای
await update.message.reply_text(
"یکی از گزینههای زیر را انتخاب کنید:", reply_markup=reply_markup
)
مدیریت کلیک روی دکمهها
برای مدیریت کلیکهای کاربران روی دکمههایی که از callback_data
استفاده میکنند، باید یک CallbackQueryHandler اضافه کنید:
from telegram.ext import CallbackQueryHandler
async def handle_button_click(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
query = update.callback_query
await query.answer() # پاسخ سریع برای تأیید کلیک
# بررسی داده کلیکشده
if query.data == "button_clicked":
await query.edit_message_text("شما دکمه را کلیک کردید!")
اضافه کردن هندلرها
کلیدهای شیشهای و مدیریت کلیکها را به اپلیکیشن اضافه کنید:
# اضافه کردن دستور برای کلیدهای شیشهای
app.add_handler(CommandHandler("keyboard", inline_keyboard))
# اضافه کردن مدیریت کلیکها
app.add_handler(CallbackQueryHandler(handle_button_click))
اکنون دستور /keyboard
را ارسال کنید تا کلیدهای شیشهای را مشاهده کنید.
مرحله 2: ارسال پیامهای تعاملی
پیامهای تعاملی میتوانند شامل پاسخ به یک نظر یا بهروزرسانی پیام باشند. مثال زیر نحوه ویرایش پیام ارسالشده پس از کلیک روی یک دکمه را نشان میدهد:
async def update_message(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
query = update.callback_query
await query.answer()
await query.edit_message_text("این پیام بهروزرسانی شد!")
برای استفاده از این قابلیت، میتوانید از هندلر قبلی (CallbackQueryHandler
) استفاده کنید.
مرحله 3: ارسال دکمههای متنی ساده (Reply Keyboards)
اگر بخواهید دکمهها در صفحه چت (نه زیر پیام) ظاهر شوند، میتوانید از Reply Keyboards استفاده کنید:
from telegram import ReplyKeyboardMarkup
async def reply_keyboard(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
# تعریف کلیدها
keyboard = [["گزینه ۱", "گزینه ۲"], ["لغو"]]
reply_markup = ReplyKeyboardMarkup(keyboard, resize_keyboard=True)
# ارسال پیام با دکمهها
await update.message.reply_text("یکی از گزینهها را انتخاب کنید:", reply_markup=reply_markup)
اضافه کردن این دستور:
app.add_handler(CommandHandler("reply_keyboard", reply_keyboard))
مرحله 4: ترکیب دکمهها و پیامهای شرطی
میتوانید تعاملات پیچیدهتری ایجاد کنید، مانند نمایش منوهای چندمرحلهای یا پاسخهای دینامیک به دادههای ورودی کاربر.
تست کلیدها و تعاملات
- فایل
bot.py
را ذخیره کنید و اجرا کنید:python bot.py
- دستورات زیر را ارسال کنید:
/keyboard
: نمایش کلیدهای شیشهای./reply_keyboard
: نمایش کلیدهای متنی.
نکات تکمیلی
- دکمههای Inline vs Reply: از Inline Keyboards برای تعاملات متمرکزتر و Reply Keyboards برای انتخابهای عمومیتر استفاده کنید.
- استفاده از APIهای خارجی: میتوانید از APIهای دیگر برای دریافت داده و نمایش آن در ربات استفاده کنید.
ذخیره و مدیریت دادهها
رباتها اغلب نیاز دارند اطلاعاتی مانند پیامهای کاربران، تنظیمات، یا دادههای دیگر را ذخیره و مدیریت کنند. در این بخش، روشهای مختلف برای ذخیره دادهها (از فایلهای ساده تا پایگاههای داده) و نحوه استفاده از آنها در ربات را بررسی میکنیم.
روشهای ذخیره دادهها
روشهای رایج برای ذخیره دادهها عبارتاند از:
- فایلهای متنی یا JSON: مناسب برای پروژههای کوچک.
- پایگاهداده SQLite: مناسب برای دادههای سبک و متوسط.
- پایگاهداده MySQL یا PostgreSQL: مناسب برای پروژههای بزرگ و پیچیده.
روش اول: ذخیره دادهها در فایل JSON
فایلهای JSON برای ذخیرهسازی دادههای ساده و ساختاریافته مناسب هستند. مثال زیر نشان میدهد که چگونه میتوانید دادههای کاربران را ذخیره کنید:
ذخیره اطلاعات کاربر در JSON
import json
# ذخیره اطلاعات کاربر
def save_user_data(user_id, username):
# بارگذاری دادههای موجود
try:
with open("users.json", "r") as file:
users = json.load(file)
except FileNotFoundError:
users = {}
# بهروزرسانی دادهها
users[user_id] = {"username": username}
# ذخیره دادهها در فایل
with open("users.json", "w") as file:
json.dump(users, file, indent=4)
خواندن دادههای ذخیرهشده
def get_user_data(user_id):
try:
with open("users.json", "r") as file:
users = json.load(file)
return users.get(user_id, None)
except FileNotFoundError:
return None
استفاده از این توابع در ربات
برای مثال، هنگام دریافت پیام از کاربر:
async def save_user_message(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
user_id = str(update.message.from_user.id)
username = update.message.from_user.username
save_user_data(user_id, username)
await update.message.reply_text("اطلاعات شما ذخیره شد!")
اضافه کردن MessageHandler برای مدیریت پیامها:
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, save_user_message))
روش دوم: استفاده از پایگاهداده SQLite
SQLite یک پایگاهداده سبک و ساده است که برای پروژههای کوچک تا متوسط مناسب است.
ایجاد پایگاهداده و جدول
ابتدا یک پایگاهداده ایجاد کرده و جداول موردنیاز را تنظیم کنید:
import sqlite3
# ایجاد پایگاهداده و جدول کاربران
def create_database():
connection = sqlite3.connect("bot_data.db")
cursor = connection.cursor()
cursor.execute(
"""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
username TEXT
)
"""
)
connection.commit()
connection.close()
ذخیره اطلاعات کاربر
def save_user_to_db(user_id, username):
connection = sqlite3.connect("bot_data.db")
cursor = connection.cursor()
cursor.execute(
"INSERT OR REPLACE INTO users (id, username) VALUES (?, ?)",
(user_id, username),
)
connection.commit()
connection.close()
خواندن اطلاعات کاربر
def get_user_from_db(user_id):
connection = sqlite3.connect("bot_data.db")
cursor = connection.cursor()
cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))
user = cursor.fetchone()
connection.close()
return user
استفاده در ربات
مثال برای ذخیره اطلاعات:
async def save_user_to_database(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
user_id = update.message.from_user.id
username = update.message.from_user.username
save_user_to_db(user_id, username)
await update.message.reply_text("اطلاعات شما در پایگاهداده ذخیره شد!")
اضافه کردن هندلر:
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, save_user_to_database))
قبل از اجرای ربات، مطمئن شوید که پایگاهداده ایجاد شده است:
create_database()
روش سوم: استفاده از MySQL یا PostgreSQL
اگر نیاز به یک پایگاهداده قویتر دارید، میتوانید از MySQL یا PostgreSQL استفاده کنید. این پایگاههای داده برای مدیریت حجم بالای داده و نیازهای پیچیده مناسب هستند. برای استفاده، باید کتابخانههایی مانند mysql-connector-python
یا psycopg2
را نصب کنید.
نکات امنیتی
- توکن ربات را ذخیره نکنید: توکن را در کد خود هاردکد نکنید. از متغیرهای محیطی یا فایلهای پیکربندی استفاده کنید.
- دادهها را رمزگذاری کنید: در صورت ذخیره اطلاعات حساس، مانند شماره تماس کاربران، آنها را رمزگذاری کنید.
رفع خطاها و نکات امنیتی
در این بخش، روشهای شناسایی و رفع خطاهای رایج در توسعه رباتهای تلگرام را بررسی میکنیم و نکات امنیتی مهمی که باید رعایت کنید تا ربات شما ایمن باشد را توضیح میدهیم.
رفع خطاهای رایج
1. خطای Invalid Token
این خطا معمولاً زمانی رخ میدهد که توکن ارائهشده به ربات اشتباه باشد یا تغییر کرده باشد.
- راهحل:
- مطمئن شوید که توکن را به درستی از BotFather دریافت کردهاید.
- بررسی کنید که توکن به درستی در کد جایگزین شده باشد:
app = ApplicationBuilder().token("توکن_شما").build()
- اگر توکن فاش شده است، از دستور
/revoke
در BotFather برای دریافت توکن جدید استفاده کنید.
2. خطای Timed Out
یا Connection Error
این خطا معمولاً به دلیل مشکلات شبکه یا فیلترینگ تلگرام در کشور شما رخ میدهد.
- راهحل:
- از یک پروکسی یا VPN برای دسترسی به تلگرام استفاده کنید.
- مطمئن شوید که کتابخانه
python-telegram-bot
بهروز است:pip install --upgrade python-telegram-bot
3. خطای Conflict
در استفاده از Polling
و Webhook
این خطا زمانی رخ میدهد که همزمان از دو روش Polling
و Webhook
استفاده میکنید.
- راهحل:
- فقط یکی از این دو روش را استفاده کنید:
- برای
Polling
:app.run_polling()
- برای
Webhook
:app.run_webhook(listen="0.0.0.0", port=8443, url_path="توکن_شما")
- برای
- فقط یکی از این دو روش را استفاده کنید:
4. خطاهای مربوط به دادههای ورودی
اگر کاربر دادهای ارسال کند که توسط کد مدیریت نشده باشد، ممکن است خطا رخ دهد.
- راهحل: از بلاکهای
try-except
برای مدیریت خطاها استفاده کنید:async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: try: user_message = update.message.text await update.message.reply_text(f"شما گفتید: {user_message}") except Exception as e: await update.message.reply_text("یک خطا رخ داده است.") print(f"Error: {e}")
5. خطاهای کتابخانه
اگر از نسخههای قدیمی کتابخانه استفاده کنید، ممکن است با خطاهای ناسازگاری مواجه شوید.
- راهحل: کتابخانهها را بهروز کنید:
pip install --upgrade python-telegram-bot
نکات امنیتی مهم
1. محافظت از توکن ربات
توکن ربات شما مانند یک کلید امنیتی عمل میکند. اگر شخص دیگری به آن دسترسی پیدا کند، میتواند کنترل کامل ربات شما را به دست گیرد.
- راهحل:
- توکن را در کد هاردکد نکنید. از متغیرهای محیطی استفاده کنید:
import os TOKEN = os.getenv("TELEGRAM_TOKEN") app = ApplicationBuilder().token(TOKEN).build()
- برای تنظیم متغیر محیطی، از روشهای زیر استفاده کنید:
- در ویندوز:
set TELEGRAM_TOKEN=توکن_شما
- در مک یا لینوکس:
export TELEGRAM_TOKEN=توکن_شما
- در ویندوز:
- توکن را در کد هاردکد نکنید. از متغیرهای محیطی استفاده کنید:
2. محدود کردن دسترسی به ربات
اگر ربات شما عمومی است، ممکن است افراد ناشناس به آن دسترسی پیدا کنند. برای محدود کردن دسترسی:
- کاربران مجاز را مشخص کنید:
allowed_users = [12345678, 98765432] # شناسه کاربران مجاز async def restricted_access(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: user_id = update.message.from_user.id if user_id not in allowed_users: await update.message.reply_text("شما مجاز به استفاده از این ربات نیستید.") return await update.message.reply_text("به ربات خوش آمدید!")
3. جلوگیری از حملات اسپم
برای جلوگیری از ارسال پیامهای بیش از حد توسط کاربران:
- از محدودیت سرعت (Rate Limiting) استفاده کنید:
from datetime import datetime, timedelta user_last_message = {} async def rate_limit(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: user_id = update.message.from_user.id now = datetime.now() if user_id in user_last_message: last_message_time = user_last_message[user_id] if now - last_message_time < timedelta(seconds=5): await update.message.reply_text("لطفاً چند ثانیه صبر کنید.") return user_last_message[user_id] = now await update.message.reply_text("پیام شما دریافت شد!")
4. ذخیره دادههای حساس بهصورت رمزگذاریشده
برای امنیت بیشتر، دادههای حساس کاربران (مانند شماره تماس یا ایمیل) را رمزگذاری کنید.
- از کتابخانه cryptography استفاده کنید:
pip install cryptography
مثال رمزگذاری:
from cryptography.fernet import Fernet
key = Fernet.generate_key() # ذخیره کلید در یک مکان امن
cipher_suite = Fernet(key)
# رمزگذاری
encrypted_data = cipher_suite.encrypt(b"my_secret_data")
# رمزگشایی
decrypted_data = cipher_suite.decrypt(encrypted_data)
5. استفاده از HTTPS برای Webhook
اگر از Webhook برای اجرای ربات استفاده میکنید، مطمئن شوید که ارتباط شما رمزگذاری شده باشد. برای این کار از گواهینامههای SSL استفاده کنید.
انتشار ربات روی سرور و اجرای دائمی
برای اینکه ربات شما بهصورت دائمی در دسترس باشد، باید آن را روی یک سرور یا هاست اجرا کنید. در این بخش، نحوه استفاده از سرویسهای رایگان و سرورهای اختصاصی برای اجرای ربات تلگرام را بررسی میکنیم.
گزینههای میزبانی برای ربات
- اجرای محلی (برای تست): ربات روی سیستم محلی شما اجرا میشود، اما تنها زمانی فعال است که اسکریپت را اجرا کرده باشید.
- استفاده از هاستهای رایگان (مانند Heroku): گزینهای ساده و بدون هزینه برای میزبانی.
- استفاده از VPS (سرور مجازی): مناسب برای پروژههای حرفهای و نیاز به کنترل بیشتر.
- Docker (برای انعطافپذیری بیشتر): مناسب برای پروژههایی با نیاز به کانتینرهای مجزا.
روش اول: استفاده از Heroku (رایگان)
Heroku یک پلتفرم رایگان برای اجرای پروژههای کوچک است.
1. ثبتنام در Heroku
- به وبسایت Heroku مراجعه کنید.
- یک حساب کاربری ایجاد کنید.
2. نصب ابزار Heroku CLI
برای آپلود پروژه خود، باید Heroku CLI را نصب کنید:
- دانلود و نصب Heroku CLI:
- بررسی نصب با دستور زیر:
heroku --version
3. آمادهسازی پروژه برای Heroku
- یک فایل به نام
requirements.txt
ایجاد کنید و کتابخانههای موردنیاز خود را در آن لیست کنید:python-telegram-bot
- یک فایل به نام
Procfile
ایجاد کنید و نحوه اجرای پروژه را مشخص کنید:worker: python bot.py
4. آپلود پروژه به Heroku
- وارد پوشه پروژه شوید و دستورات زیر را اجرا کنید:
git init heroku login heroku create git add . git commit -m "Initial commit" git push heroku master
- دستور زیر را اجرا کنید تا ربات شروع به کار کند:
heroku ps:scale worker=1
5. بررسی وضعیت ربات
- به داشبورد Heroku بروید و مطمئن شوید که پروژه شما در حال اجرا است.
روش دوم: استفاده از VPS
اگر نیاز به کنترل بیشتر دارید، میتوانید از یک سرور مجازی (VPS) استفاده کنید. برای مثال، سرورهای ابری مانند DigitalOcean، Vultr، یا Linode مناسب هستند.
1. اتصال به سرور
- یک VPS تهیه کنید.
- با استفاده از SSH به سرور متصل شوید:
ssh username@your_server_ip
2. نصب پایتون و کتابخانهها
- مطمئن شوید پایتون و pip روی سرور نصب شدهاند:
sudo apt update sudo apt install python3 python3-pip
- کتابخانههای موردنیاز را نصب کنید:
pip3 install python-telegram-bot
3. آپلود پروژه
- فایلهای پروژه خود را با استفاده از scp یا git به سرور منتقل کنید:
scp -r /path/to/your/project username@your_server_ip:/path/to/destination
- وارد پوشه پروژه شوید و ربات را اجرا کنید:
python3 bot.py
4. اجرای دائمی با Systemd
برای اجرای دائمی ربات از Systemd استفاده کنید:
- یک فایل سرویس ایجاد کنید:
sudo nano /etc/systemd/system/telegram_bot.service
- محتوا را وارد کنید:
[Unit] Description=Telegram Bot After=network.target [Service] ExecStart=/usr/bin/python3 /path/to/your/project/bot.py Restart=always User=your_username Group=your_group [Install] WantedBy=multi-user.target
- سرویس را فعال کنید:
sudo systemctl start telegram_bot sudo systemctl enable telegram_bot
روش سوم: استفاده از Docker
اگر با Docker آشنا هستید، میتوانید ربات خود را در یک کانتینر اجرا کنید.
1. ایجاد فایل Dockerfile
در پوشه پروژه، یک فایل به نام Dockerfile
ایجاد کنید:
FROM python:3.9-slim
WORKDIR /app
COPY . /app
RUN pip install -r requirements.txt
CMD ["python", "bot.py"]
2. ساخت و اجرای کانتینر
- ساخت تصویر:
docker build -t telegram-bot .
- اجرای کانتینر:
docker run -d --name telegram-bot telegram-bot
نکات مهم
- نگهداری سرور: اگر از VPS استفاده میکنید، باید سرور را بهطور مرتب بهروزرسانی و نظارت کنید.
- مدیریت خطاها: مطمئن شوید که از
try-except
در کد خود استفاده کردهاید تا ربات در صورت بروز خطا متوقف نشود. - سرویسهای پولی: اگر پروژه شما رشد کرد، میتوانید به سرویسهای پولی برای اطمینان از عملکرد بهتر منتقل شوید.
جمعبندی و نکات پایانی
در این مقاله، مراحل کامل ساخت ربات تلگرام با پایتون را از ابتدا تا انتشار دائمی روی سرور بررسی کردیم. شما اکنون توانایی ایجاد یک ربات تلگرام با ویژگیهای پایه و پیشرفته را دارید و میتوانید آن را برای پروژههای خود گسترش دهید.
مروری بر مراحل انجامشده
- مقدمه و پیشنیازها:
- با مفهوم ربات تلگرام و کاربردهای آن آشنا شدیم.
- ابزارها و کتابخانههای لازم را معرفی و نصب کردیم.
- ایجاد توکن ربات:
- با استفاده از BotFather یک ربات جدید ساختیم و توکن آن را دریافت کردیم.
- نوشتن اولین کد:
- یک ربات ساده ایجاد کردیم که به دستور
/start
پاسخ میدهد.
- یک ربات ساده ایجاد کردیم که به دستور
- افزودن دستورات:
- دستورات جدیدی مانند
/help
و/about
را به ربات اضافه کردیم.
- دستورات جدیدی مانند
- مدیریت پیامها:
- نحوه پردازش پیامهای کاربران و پاسخ به آنها را یاد گرفتیم.
- امکانات پیشرفته:
- کلیدهای شیشهای (Inline Keyboards) و پیامهای تعاملی را به ربات اضافه کردیم.
- ذخیره و مدیریت دادهها:
- اطلاعات کاربران را در فایل JSON یا پایگاهداده SQLite ذخیره کردیم.
- رفع خطاها و امنیت:
- خطاهای رایج را مدیریت کردیم و نکات امنیتی مهم مانند محافظت از توکن و جلوگیری از اسپم را یاد گرفتیم.
- انتشار و اجرای دائمی:
- ربات را روی سرورهای رایگان (مانند Heroku) و سرور مجازی (VPS) بهصورت دائمی اجرا کردیم.
چالشها و گسترش ربات
اگرچه این مقاله شما را به ساخت یک ربات کاربردی مجهز کرد، میتوانید ربات خود را با ایدههای زیر گسترش دهید:
- افزودن قابلیتهای جدید:
- ارسال تصاویر، ویدیوها یا فایلها.
- اتصال به APIهای خارجی (مانند آبوهوا، ارز، یا اخبار).
- بهبود تعاملات:
- استفاده از پردازش زبان طبیعی (NLP) برای درک بهتر پیامهای کاربران.
- ایجاد سیستمهای پاسخدهی هوشمند.
- مدیریت پیشرفته دادهها:
- استفاده از پایگاهدادههای قویتر مانند MySQL یا MongoDB.
- ذخیره تاریخچه پیامها یا ایجاد سیستم گزارشگیری.
- تجاریسازی ربات:
- افزودن امکانات پریمیوم یا دریافت هزینه اشتراک.
- یکپارچهسازی با درگاههای پرداخت.
- اجرای مقیاسپذیر:
- استفاده از معماری کانتینر (Docker) برای گسترش مقیاس.
- انتقال به سرویسهای ابری پیشرفته مانند AWS یا Google Cloud.
نکات پایانی
- تمرین مداوم: هرچه بیشتر با کد و ویژگیهای ربات کار کنید، مهارتهای شما افزایش مییابد.
- کمک گرفتن از جامعه توسعهدهندگان: مستندات رسمی کتابخانهها و انجمنهای برنامهنویسی مانند Stack Overflow منابع بسیار خوبی هستند.
- ایمن نگهداشتن ربات: همیشه توکنها و دادههای حساس کاربران را محافظت کنید.
منابع مفید
دیدگاهها