-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBot.py
More file actions
86 lines (60 loc) · 3.2 KB
/
Bot.py
File metadata and controls
86 lines (60 loc) · 3.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
from openai import OpenAI
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, MessageHandler, ContextTypes, filters
from model import save_user, save_message, load_recent_context, init_db
TELEGRAM_BOT_TOKEN = "Your Telegram Token"
OPENAI_API_KEY = "Your ChatGPT API Key"
MANAGER_ID = 123456789
client = OpenAI(api_key=OPENAI_API_KEY)
init_db()
async def chat(user_id: int, message: str) -> str:
previous_messages = load_recent_context(user_id, limit=10)
previous_messages.append({"role": "user", "content": message})
messages_to_send = [
{"role": "system", "content": "شما یک کارشناس حرفهای در حوزه موبایل هستید و فقط در این زمینه پاسخ میدهید."}
] + previous_messages
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=messages_to_send
)
reply = response.choices[0].message.content.strip()
return reply
async def is_mobile_related(user_id: int, message: str) -> bool:
previous_messages = load_recent_context(user_id, limit=10)
user_messages = [msg for msg in previous_messages if msg["role"] == "user"]
user_messages.append({"role": "user", "content": message})
messages_to_send = [
{"role": "system", "content": "بررسی کن که آیا موضوع کلی این گفتگو مربوط به موبایل و لوازم جانبی موبایل هست یا نه. فقط با Yes یا No پاسخ بده."},
*user_messages
]
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=messages_to_send
)
answer = response.choices[0].message.content.strip().lower()
return answer.startswith("yes")
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
user = update.effective_user
save_user(user.id, user.full_name, user.username)
await update.message.reply_text("سلام! لطفاً سوال خود را بپرسید.")
async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
user = update.effective_user
user_id = user.id
user_message = update.message.text
await update.message.reply_text("درحال بررسی سوال شما هستیم ... لطفا صبر کنید 🔁")
if not await is_mobile_related(user_id, user_message):
await update.message.reply_text("❌ لطفاً فقط سوالات مربوط به موبایل و لوازم جانبی بپرسید.")
return
reply = await chat(user_id, user_message)
save_message(user_id, "user", user_message)
save_message(user_id, "assistant", reply)
if "خرید" in user_message or "سفارش" in user_message:
await update.message.reply_text("برای ادامه، شما به مدیر وصل میشوید...")
await context.bot.send_message(chat_id=MANAGER_ID, text=f"کاربر پیام داد:\n{user_message}")
else:
await update.message.reply_text(reply)
app = ApplicationBuilder().token(TELEGRAM_BOT_TOKEN).build()
app.add_handler(CommandHandler("start", start))
app.add_handler(MessageHandler(filters.TEXT & (~filters.COMMAND), handle_message))
print("Bot is running ...")
app.run_polling()