اذهب إلى المحتوى

السؤال

نشر

هذا الكود عبارة عن بوت تلغرام ويظهر هذا الخطا 
مع اني قمت بتحديث المكتبة ومازال يظهر

from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Updater, CommandHandler, CallbackContext, CallbackQueryHandler, ConversationHandler, MessageHandler

# استبدل "YOUR_TOKEN" بمفتاح الوصول الخاص ببوتك
TOKEN = "6660967112:AAFV_U36jt5u5hOdBfaPD38ozk1jg8GXyUE"

# تعريف حالات المحادثة
START, MY_ACCOUNT, WITHDRAW, ADD_TASK = range(4)

# دالة تعيد زرين داخل زر واحد (زر الرجوع)
def back_button():
    button = InlineKeyboardButton("رجوع", callback_data="back")
    keyboard = [[button]]
    return InlineKeyboardMarkup(keyboard)

# دالة تقوم بإرسال رسالة ترحيبية وزر "حسابي"
def start(update: Update, context: CallbackContext):
    user_id = update.message.chat_id
    update.message.reply_text(
        f"مرحبًا {update.effective_user.first_name}!",
        reply_markup=main_menu_keyboard(),
    )
    return START

# دالة تقوم بإنشاء وإرسال قائمة الزرز الرئيسية
def main_menu_keyboard():
    keyboard = [
        [
            InlineKeyboardButton("حسابي", callback_data="my_account"),
        ],
        [
            InlineKeyboardButton("بدء المهام", callback_data="start_tasks"),
            InlineKeyboardButton("إضافة مهمة", callback_data="add_task"),
        ],
    ]
    return InlineKeyboardMarkup(keyboard)

# دالة تقوم بالتعامل مع زر "حسابي"
def my_account(update: Update, context: CallbackContext):
    query = update.callback_query
    query.answer()
    query.edit_message_text(
        text="حسابي - اختر واحدة:",
        reply_markup=my_account_menu_keyboard(),
    )
    return MY_ACCOUNT

# دالة تقوم بإنشاء وإرسال قائمة الزرز داخل "حسابي"
def my_account_menu_keyboard():
    keyboard = [
        [
            InlineKeyboardButton("سحب الرصيد", callback_data="withdraw"),
            InlineKeyboardButton("مهامي المضافة", callback_data="added_tasks"),
        ],
        [back_button()],
    ]
    return InlineKeyboardMarkup(keyboard)

# دالة تقوم بالتعامل مع زر "سحب الرصيد"
def withdraw(update: Update, context: CallbackContext):
    query = update.callback_query
    query.answer()
    query.edit_message_text(text="قم بتنفيذ عملية سحب الرصيد هنا.")
    return WITHDRAW

# دالة تقوم بالتعامل مع زر "مهامي المضافة"
def added_tasks(update: Update, context: CallbackContext):
    query = update.callback_query
    query.answer()
    query.edit_message_text(text="قائمة مهامك المضافة.")
    return MY_ACCOUNT

# دالة تقوم بالتعامل مع زر "بدء المهام"
def start_tasks(update: Update, context: CallbackContext):
    query = update.callback_query
    query.answer()
    query.edit_message_text(text="بدء تنفيذ المهام.")
    return START

# دالة تقوم بالتعامل مع زر "إضافة مهمة"
def add_task(update: Update, context: CallbackContext):
    query = update.callback_query
    query.answer()
    query.edit_message_text(text="قم بإضافة مهمة جديدة.")
    return ADD_TASK

# دالة تقوم بالتعامل مع زر الرجوع
def back(update: Update, context: CallbackContext):
    query = update.callback_query
    query.answer()
    query.edit_message_text(
        text="مرحبًا مجددًا!",
        reply_markup=main_menu_keyboard(),
    )
    return START

# دالة تقوم بالتعامل مع الأوامر المرسلة
def handle_text(update: Update, context: CallbackContext):
    text = update.message.text
    update.message.reply_text(f"لقد تلقيت الرسالة: {text}")

# الدالة الرئيسية لتشغيل البوت
def main():
    updater = Updater(TOKEN, use_context=True)
    dispatcher = updater.dispatcher

    # إضافة معالجات الأزرار
    dispatcher.add_handler(CommandHandler('start', start))
    dispatcher.add_handler(CallbackQueryHandler(my_account, pattern='^my_account$'))
    dispatcher.add_handler(CallbackQueryHandler(withdraw, pattern='^withdraw$'))
    dispatcher.add_handler(CallbackQueryHandler(added_tasks, pattern='^added_tasks$'))
    dispatcher.add_handler(CallbackQueryHandler(start_tasks, pattern='^start_tasks$'))
    dispatcher.add_handler(CallbackQueryHandler(add_task, pattern='^add_task$'))
    dispatcher.add_handler(CallbackQueryHandler(back, pattern='^back$'))
    dispatcher.add_handler(MessageHandler(None, handle_text))

    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()

الخطا الذي يظهر هذا

 

 

Traceback (most recent call last):
  File "c:\Users\DELL\Desktop\مجلد جديد\fff.py", line 121, in <module>        
    main()
  File "c:\Users\DELL\Desktop\مجلد جديد\fff.py", line 104, in main
    updater = Updater(TOKEN, use_context=True)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: Updater.__init__() got an unexpected keyword argument 'use_context'
PS C:\Users\DELL\Desktop\مجلد جديد> 
 

Recommended Posts

  • 0
نشر

المشكلة الموجودة في الكود هو Updater لا يوجد لديه متحول بالاسم use_context، مع ذلك حتى لو قمت بحذفها سوف يعطي خطأ،
ينتج هذا الخطأ من استخدامك لنسخة telegram بإصدار اقل من 13، لكن انصحك باستخدام الاصدار 20 الاحدث من المكتبة
قم بالبداية بإلغاء تثبيت المكتبة على جهازك ثم قم بتثبيت الاصدار الاحدث عبر التعليمة

pip install python-telegram-bot==20.6

ثم يمكنك الاطلاع إلى دليل الاصدار 20 من هنا،  ويمكنك تصحيح كودك كالاتي:

  • بدلا من استخدام dispatcher  ,udpater يمكنك تعريف application  وتحديد جميع المتحولات فيه، الكود التالي قم بحذفه من كودك
    updater = Updater(TOKEN, use_context=True)
    dispatcher = updater.dispatcher

    ليصبح الاتي حيث تم استدعاء application

    from telegram.ext import Application # <---ضعه في الأعلى
    application = Application.builder().token(TOKEN).build()
  • استبدل كل سطر يحوي الكلمة dispatcher بالكلمة application كالاتي 
    dispatcher.add_handler(CommandHandler('start', start))
    dispatcher.add_handler(CallbackQueryHandler(my_account, pattern='^my_account$'))
    dispatcher.add_handler(CallbackQueryHandler(withdraw, pattern='^withdraw$'))
    .
    .
    .

    ليصبح

    application.add_handler(CommandHandler('start', start))
    application.add_handler(CallbackQueryHandler(my_account, pattern='^my_account$'))
    application.add_handler(CallbackQueryHandler(withdraw, pattern='^withdraw$'))
    .
    .
    .
  • استبدل الاسطر الخاصة بتشغيل التطبيق 
    dispatcher.start_polling()
    dispatcher.idle()

    بالاتي

    application.start_polling()

في النهاية كامل التعديلات في الكود كالاتي

# الدالة الرئيسية لتشغيل البوت
def main():
    application = Application.builder().token(TOKEN).build()
    # dispatcher = updater.dispatcher

    #إضافة معالجات الأزرار إلى التطبيق
    application.add_handler(CommandHandler('start', start))
    application.add_handler(CallbackQueryHandler(my_account, pattern='^my_account$'))
    application.add_handler(CallbackQueryHandler(withdraw, pattern='^withdraw$'))
    application.add_handler(CallbackQueryHandler(added_tasks, pattern='^added_tasks$'))
    application.add_handler(CallbackQueryHandler(start_tasks, pattern='^start_tasks$'))
    application.add_handler(CallbackQueryHandler(add_task, pattern='^add_task$'))
    application.add_handler(CallbackQueryHandler(back, pattern='^back$'))
    application.add_handler(MessageHandler(None, handle_text))
    
    #تشغيل التطبيق
    application.start_polling()

لا تنسى استدعاء Application كما وضحت سابقا

  • 0
نشر
بتاريخ 4 ساعة قال عمار معلا:
   #تشغيل التطبيق
    application.start_polling()

السلام عليكم لقد قمت بتعديل الكود ولكن ظهر لي هذا الخطا 
هل من الممكن المساعدة مرة اخرة لو سمحت

from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Updater, CommandHandler, CallbackContext, CallbackQueryHandler, ConversationHandler, MessageHandler
from telegram.ext import Application # <---ضعه في الأعلى

# استبدل "YOUR_TOKEN" بمفتاح الوصول الخاص ببوتك
TOKEN = "6660967112:AAFV_U36jt5u5hOdBfaPD38ozk1jg8GXyUE"

# تعريف حالات المحادثة
START, MY_ACCOUNT, WITHDRAW, ADD_TASK = range(4)

# دالة تعيد زرين داخل زر واحد (زر الرجوع)
def back_button():
    button = InlineKeyboardButton("رجوع", callback_data="back")
    keyboard = [[button]]
    return InlineKeyboardMarkup(keyboard)

# دالة تقوم بإرسال رسالة ترحيبية وزر "حسابي"
def start(update: Update, context: CallbackContext):
    user_id = update.message.chat_id
    update.message.reply_text(
        f"مرحبًا {update.effective_user.first_name}!",
        reply_markup=main_menu_keyboard(),
    )
    return START

# دالة تقوم بإنشاء وإرسال قائمة الزرز الرئيسية
def main_menu_keyboard():
    keyboard = [
        [
            InlineKeyboardButton("حسابي", callback_data="my_account"),
        ],
        [
            InlineKeyboardButton("بدء المهام", callback_data="start_tasks"),
            InlineKeyboardButton("إضافة مهمة", callback_data="add_task"),
        ],
    ]
    return InlineKeyboardMarkup(keyboard)

# دالة تقوم بالتعامل مع زر "حسابي"
def my_account(update: Update, context: CallbackContext):
    query = update.callback_query
    query.answer()
    query.edit_message_text(
        text="حسابي - اختر واحدة:",
        reply_markup=my_account_menu_keyboard(),
    )
    return MY_ACCOUNT

# دالة تقوم بإنشاء وإرسال قائمة الزرز داخل "حسابي"
def my_account_menu_keyboard():
    keyboard = [
        [
            InlineKeyboardButton("سحب الرصيد", callback_data="withdraw"),
            InlineKeyboardButton("مهامي المضافة", callback_data="added_tasks"),
        ],
        [back_button()],
    ]
    return InlineKeyboardMarkup(keyboard)

# دالة تقوم بالتعامل مع زر "سحب الرصيد"
def withdraw(update: Update, context: CallbackContext):
    query = update.callback_query
    query.answer()
    query.edit_message_text(text="قم بتنفيذ عملية سحب الرصيد هنا.")
    return WITHDRAW

# دالة تقوم بالتعامل مع زر "مهامي المضافة"
def added_tasks(update: Update, context: CallbackContext):
    query = update.callback_query
    query.answer()
    query.edit_message_text(text="قائمة مهامك المضافة.")
    return MY_ACCOUNT

# دالة تقوم بالتعامل مع زر "بدء المهام"
def start_tasks(update: Update, context: CallbackContext):
    query = update.callback_query
    query.answer()
    query.edit_message_text(text="بدء تنفيذ المهام.")
    return START

# دالة تقوم بالتعامل مع زر "إضافة مهمة"
def add_task(update: Update, context: CallbackContext):
    query = update.callback_query
    query.answer()
    query.edit_message_text(text="قم بإضافة مهمة جديدة.")
    return ADD_TASK

# دالة تقوم بالتعامل مع زر الرجوع
def back(update: Update, context: CallbackContext):
    query = update.callback_query
    query.answer()
    query.edit_message_text(
        text="مرحبًا مجددًا!",
        reply_markup=main_menu_keyboard(),
    )
    return START

# دالة تقوم بالتعامل مع الأوامر المرسلة
def handle_text(update: Update, context: CallbackContext):
    text = update.message.text
    update.message.reply_text(f"لقد تلقيت الرسالة: {text}")

# الدالة الرئيسية لتشغيل البوت
def main():
    application = Application.builder().token(TOKEN).build()

  
     #إضافة معالجات الأزرار إلى التطبيق
    application.add_handler(CommandHandler('start', start))
    application.add_handler(CallbackQueryHandler(my_account, pattern='^my_account$'))
    application.add_handler(CallbackQueryHandler(withdraw, pattern='^withdraw$'))
    application.add_handler(CallbackQueryHandler(added_tasks, pattern='^added_tasks$'))
    application.add_handler(CallbackQueryHandler(start_tasks, pattern='^start_tasks$'))
    application.add_handler(CallbackQueryHandler(add_task, pattern='^add_task$'))
    application.add_handler(CallbackQueryHandler(back, pattern='^back$'))
    application.add_handler(MessageHandler(None, handle_text))
    
    #تشغيل التطبيق
    application.start_polling()

if __name__ == '__main__':
    main()

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...