rag_qavanin_api/_old/bale_qabot.py
2025-11-19 11:50:41 +00:00

156 lines
4.8 KiB
Python
Executable File

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()