نمونه پروژههای کاربردی در پایتون (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) توصیه میشود:
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())