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