print(f'import bale madule ...') import asyncio import json from fastapi import FastAPI, Request from pydantic import BaseModel import requests import logging import uvicorn import chatbot_handler as ch # =========================== # پیکربندی اولیه # =========================== TOKEN = '2052165365:Tt7u2qXB9oRTPISeZ0wmoAGpPsIgjq-vAxM' API_URL = f"https://tapi.bale.ai/bot{TOKEN}/" # راه‌اندازی لاگر logging.basicConfig( filename="./baleqabot/bot.log", level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s" ) # =========================== # define import model class # =========================== class Message(BaseModel): chat: dict text: str | None = None class Update(BaseModel): message: Message | None = None # =========================== # کلاس اصلی ربات بله # =========================== class BaleBot: def __init__(self, token: str): # self.api_url = f"https://api.bale.ai/bot{token}/" self.api_url = API_URL async def get_updates(self, offset = None): params = {"timeout": 20} if offset: params["offset"] = offset resp = requests.get(f"{self.api_url}getUpdates", params=params) return resp.json().get("result", []) async def send_message(self, chat_id: int, text: str, keyboard=None): payload = { "chat_id": chat_id, "text": text, "parse_mode": "HTML" } if keyboard: payload["reply_markup"] = keyboard try: response = requests.post(self.api_url + "sendMessage", json=payload) return response.json() except Exception as e: logging.error(f"Error sending message: {e}") return None async def get_latest_req_id(self): latest_req_id = 0 with open('./baleqabot/requests.json', 'r', encoding='utf-8') as file: prev_reqs = json.load(file) if prev_reqs: latest_req_id = prev_reqs[-1]['update_id'] return latest_req_id + 1 async def save_entery(self, update): all_reqs = [] with open('./baleqabot/requests.json', 'r', encoding='utf-8') as file: prev_reqs = json.load(file) all_reqs.extend(prev_reqs) all_reqs.extend(update) with open('./baleqabot/requests.json', 'w', encoding='utf-8') as file: data = json.dumps(all_reqs, ensure_ascii=False, indent=2) file.write(data) return True async def handle_update(self, update_reqs: dict): data = update_reqs[0] if "message" not in data: return message = data["message"] chat_id = message["chat"]["id"] text = message.get("text", "").strip() logging.info(f"Received message from {chat_id}: {text}") if text == "/start": reply = "سلام، من دستیار هوشمند قوانین هستم. لطفا پرسش خود را وارد نمائید ..." # keyboard = { # "keyboard": [["/help", "/status"]], # "resize_keyboard": True, # "one_time_keyboard": True # } self.send_message(chat_id, reply) elif text == "/chat": reply = "لطفا متن پرسش از قوانین را وارد نمائید ..." self.send_message(chat_id, reply) # elif text == "/help": # reply = ( # "دستورهای موجود:\n" # "/start - شروع ربات\n" # "/chat - گفت‌گو با دستیار هوشمند قانون\n" # "/status - وضعیت ربات" # ) # self.send_message(chat_id, reply) elif text == "/status": reply = "ربات فعال است ✅" self.send_message(chat_id, reply) else: answer = await chat.run_chatbot(text, chat.create_chat_id()) if answer: reply = answer else: reply = 'خطا در تولید پاسخ!' self.send_message(chat_id, reply) async def bale_main(): print(f'bale-qabot is Readey!!!!') while True: last_req_id = bale_bot.get_latest_req_id() update = bale_bot.get_updates(last_req_id) if update: bale_bot.save_entery(update) bale_bot.handle_update(update) print('ok') # =========================== # ساخت اپلیکیشن FastAPI # =========================== # app = FastAPI() bale_bot = BaleBot(TOKEN) result = asyncio.run(bale_main()) # =========================== # (local execution) # =========================== if __name__ == "__main__": # uvicorn.run("chatbot:app", host="https://bale.tavasi.ir/", port=5000) bale_main()