Запрос обратного вызова не отвечает после нескольких кликов в телеграмм-боте python

#callback #python-telegram-bot

Вопрос:

Вот мой код. После нескольких нажатий на встроенную кнопку сервер не отвечает, кроме значка загрузки на кнопке. Любая помощь будет признательна. Я должен упомянуть, что это происходит, когда люди нажимают на кнопку одновременно (например, более 100 пользователей нажимают на кнопку менее чем за секунду). У меня есть двухъядерный сервер с 4 ГБ оперативной памяти.

 def button(self, update: Update, context: CallbackContext) -> None:
    user = query.from_user
    tdate = time.time()
    dat = 0
    if "postButton::" in query.data:
        try:
            name = query.data.replace("postButton::", "")
            channels = list(pd.read_sql("select distinct(chatid) as chs from allusers where lower(username) in (select distinct(lower(username)) from channels where lower(name) = '{}')".format(name.lower()), self.mydb).chs)
            b = True
            try:
                for i in channels:
                    result = query.bot.get_chat_member(user_id=update.callback_query.from_user.id, chat_id=i)
                    if result.status == 'left' or result.status == 'kicked':
                        b = False
                        break
                    except:
                    b = False
        if b:
            sql = """
                            INSERT INTO participants (name, tdate, chatid)
                            SELECT '{}', {}, {}
                            WHERE
                                NOT EXISTS (
                                SELECT chatid FROM participants WHERE chatid = {} and lower(name) = lower('{}')
                            );
                            """.format(name, tdate, user.id, user.id, name)
            conn = self.mydb
            # connect to the PostgreSQL server
            cur = conn.cursor()
            # create table one by one
            cur.execute(sql)
            # close communication with the PostgreSQL database server
            cur.close()
            # commit the changes
            conn.commit()
            query.answer(text='you are participated', show_alert=True)
        else:
            query.answer(text='you are not participated ', show_alert=True)
    except (Exception, pg.DatabaseError) as error:
        print(error)
    dat = int(pd.read_sql("select count(*) as cc from participants where lower(name) = lower('{}')".format(name),self.mydb).iloc[0].cc)
    keyboard = [[
        InlineKeyboardButton('Участвовать-'   str(dat),
                             callback_data=query.data),
        ],
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)
    try:
        query.edit_message_reply_markup(reply_markup=reply_markup)
    except:
        print('CallBackQuery Error')
 

Комментарии:

1. Привет. Было бы полезно также повидаться с вашими обработчиками. Также, пожалуйста, убедитесь, что вы правильно сделали отступ в своем коде — его трудно прочитать в том виде, в каком он сейчас отформатирован. Наконец, пожалуйста, взгляните на статью PTB «Спрашивай правильно»: github.com/python-telegram-bot/python-telegram-bot/wiki/…