پرش به محتویات

نمونه پروژه‌های کاربردی در پایتون (Python)

در این بخش کدهای آماده و تست‌شده به زبان پایتون برای ساخت انواع ربات‌های منودار، ناوبری با کیبورد شیشه‌ای و ربات ناهمگام (Asyncio / HTTPX) آورده شده است.


۱. ربات تعاملی با کیبورد شیشه‌ای و دکمه‌های Callback (Synchronous)

این ربات یک منوی شیشه‌ای ارسال کرده و به کلیک‌های کاربر پاسخ می‌دهد:

import requests
import time

TOKEN = "YOUR_BOT_TOKEN_HERE"
API = f"https://botapi.codemeet.chat/bot{TOKEN}"

def send_message(chat_id, text, reply_markup=None):
    payload = {"chat_id": chat_id, "text": text}
    if reply_markup:
        payload["reply_markup"] = reply_markup
    return requests.post(f"{API}/sendMessage", json=payload, timeout=10).json()

def answer_callback(query_id, text, show_alert=False):
    return requests.post(f"{API}/answerCallbackQuery", json={
        "callback_query_id": query_id,
        "text": text,
        "show_alert": show_alert
    }, timeout=10).json()

def main():
    print("ربات پایتون شروع به کار کرد...")
    offset = None

    while True:
        try:
            res = requests.get(f"{API}/getUpdates", params={"timeout": 25, "offset": offset}, timeout=30).json()
            if not res.get("ok"):
                time.sleep(1)
                continue

            for update in res.get("result", []):
                offset = update["update_id"] + 1

                # پردازش پیام‌های ورودی
                if "message" in update:
                    msg = update["message"]
                    chat_id = msg["chat"]["id"]
                    text = msg.get("text", "")

                    if text == "/start":
                        keyboard = {
                            "inline_keyboard": [
                                [
                                    {"text": "آمار و گزارشات", "callback_data": "menu_stats"},
                                    {"text": "تنظیمات", "callback_data": "menu_settings"}
                                ],
                                [
                                    {"text": "وب‌سایت کدمیت", "url": "https://codemeet.chat"}
                                ]
                            ]
                        }
                        send_message(chat_id, "سلام! منوی اصلی ربات:", reply_markup=keyboard)

                # پردازش کلیک‌های دکمه شیشه‌ای
                elif "callback_query" in update:
                    cq = update["callback_query"]
                    query_id = cq["id"]
                    data = cq.get("data", "")
                    chat_id = cq["message"]["chat"]["id"]

                    if data == "menu_stats":
                        answer_callback(query_id, "در حال دریافت آمار...", show_alert=False)
                        send_message(chat_id, "گزارش سیستم: همه سرویس‌ها فعال و پایدار هستند.")
                    elif data == "menu_settings":
                        answer_callback(query_id, "تنظیمات باز شد!", show_alert=True)

        except Exception as e:
            print("خطا:", e)
            time.sleep(2)

if __name__ == "__main__":
    main()

۲. ربات ناهمگام پرسرعت با httpx و asyncio (High-Performance Async)

برای پروژه‌هایی با حجم پیام بالا، استفاده از مدل غیرمسدودکننده (Async) توصیه می‌شود:

pip install httpx
import asyncio
import httpx

TOKEN = "YOUR_BOT_TOKEN_HERE"
API = f"https://botapi.codemeet.chat/bot{TOKEN}"

async def main():
    async with httpx.AsyncClient(timeout=httpx.Timeout(30.0)) as client:
        print("ربات ناهمگام فعال شد...")
        offset = None

        while True:
            try:
                params = {"timeout": 20}
                if offset:
                    params["offset"] = offset

                resp = await client.get(f"{API}/getUpdates", params=params)
                data = resp.json()

                if not data.get("ok"):
                    await asyncio.sleep(1)
                    continue

                for update in data.get("result", []):
                    offset = update["update_id"] + 1

                    if "message" in update:
                        msg = update["message"]
                        chat_id = msg["chat"]["id"]
                        text = msg.get("text", "")

                        # ارسال پاسخ به صورت Async
                        await client.post(f"{API}/sendMessage", json={
                            "chat_id": chat_id,
                            "text": f"پاسخ ناهمگام: {text}"
                        })

            except Exception as e:
                print("Error:", e)
                await asyncio.sleep(2)

if __name__ == "__main__":
    asyncio.run(main())