File size: 3,519 Bytes
b8cc51e
8c535ea
73233f6
b8cc51e
 
b17dfbe
b8cc51e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import logging
from telegram import Update
from telegram import InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import ApplicationBuilder, CommandHandler, MessageHandler, CallbackQueryHandler, filters, ContextTypes
from g4f.client import Client

# إعداد تسجيل الأخطاء والمعلومات
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)

# تهيئة عميل g4f
client = Client()

# قائمة النماذج المتاحة
MODELS = {
    "GPT-3.5": "gpt-3.5-turbo",
    "GPT-4": "gpt-4",
    "Zephyr-7B": "HuggingFaceH4/zephyr-7b-beta"
}

# نموذج افتراضي
user_selected_model = {}

# وظيفة لبدء البوت وتعريف الأمر /start
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
    await update.message.reply_text("مرحبًا! أرسل رسالتك لبدء المحادثة.\n"
                                    "للاختيار بين النماذج، استخدم الأمر /choose_model.")

# وظيفة لاختيار النموذج عبر زر Inline
async def choose_model(update: Update, context: ContextTypes.DEFAULT_TYPE):
    keyboard = [
        [InlineKeyboardButton(name, callback_data=name) for name in MODELS]
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)
    await update.message.reply_text("اختر النموذج الذي ترغب باستخدامه:", reply_markup=reply_markup)

# وظيفة لمعالجة اختيار النموذج
async def set_model(update: Update, context: ContextTypes.DEFAULT_TYPE):
    query = update.callback_query
    user_id = query.from_user.id
    selected_model = query.data
    user_selected_model[user_id] = MODELS[selected_model]
    
    await query.answer()
    await query.edit_message_text(text=f"تم اختيار النموذج: {selected_model}")

# وظيفة للرد على الرسائل من خلال النموذج المحدد
async def respond_to_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
    user_id = update.message.from_user.id
    user_message = update.message.text

    # اختيار النموذج الحالي للمستخدم، أو النموذج الافتراضي
    model = user_selected_model.get(user_id, MODELS["GPT-3.5"])

    # إعداد الرسالة لإرسالها إلى g4f
    messages = [{"role": "user", "content": user_message}]
    
    # الحصول على رد النموذج
    response = client.chat.completions.create(
        model=model,
        messages=messages,
        max_tokens=100  # حدد الحد الأقصى لعدد الكلمات في الرد
    )
    bot_response = response.choices[0].message.content

    # إرسال الرد إلى المستخدم
    await update.message.reply_text(bot_response)

# إعداد البوت ومعالجات الرسائل
def main():
    # استبدل 'YOUR_TELEGRAM_BOT_TOKEN' بالتوكن الخاص بالبوت
    app = ApplicationBuilder().token('7899242313:AAFFGciUkN7td9D4ixS0OQu_biI9CBKR7FQ').build()

    # الأوامر ومعالجات الرسائل
    app.add_handler(CommandHandler("start", start))
    app.add_handler(CommandHandler("choose_model", choose_model))
    app.add_handler(CallbackQueryHandler(set_model))  # معالجة اختيار النموذج من الأزرار
    app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, respond_to_message))

    # تشغيل البوت
    app.run_polling()

if __name__ == "__main__":
    main()