@Vitaliy445

Нужно как-то остановить цикл и после проверки модератора продолжить его. Бот телеграм(Telebot). Как это сделать?

Здесь проверка на сообщение пользователя, после этого в глобальные листы зиписываются текст сообщение, айди чата пользователя и айди сообщение
@bot.message_handler(content_types=['text'])
def send(message):  # ПРОВЕРКА МОДЕРАТОРОМ
    global Id_pp_users, Id_chat_user, Id_message_user  # List
    bot.send_message(message.chat.id,
                     "*Подождите, менеджер проверяет введённый ID...*\n Это может занять какое-то время...".format(
                         message.from_user, bot.get_me()),
                     parse_mode="Markdown")
    if message.text.isdigit():
        if len(str(message.text)) >= 8:
            Id_pp_users.append(message.text)
            Id_chat_user.append(message.chat.id)
            Id_message_user.append(message.message_id)
            funcFor()


После этого вызывается функция funcFor() которая выводит все елементы листа
def funcFor():
    global chat_user_id
    markup = types.InlineKeyboardMarkup(row_width=2)
    item = types.InlineKeyboardButton("Подтвердить", callback_data='Successful')
    item2 = types.InlineKeyboardButton("Отменить", callback_data='Failed')
    item3 = types.InlineKeyboardButton("Недостаточный депозит", callback_data='FailedDep')
    markup.add(item, item2, item3)

    length1 = len(Id_pp_users)
    length2 = len(Id_chat_user)
    length3 = len(Id_message_user)

    i = 0
    j = 0
    g = 0
    while i < length1:
        while j < length2:
            while g < length3:
                if i and j and g == 0:
                    bot.forward_message(TO_CHAT_ID, Id_chat_user[j], Id_message_user[g])
                    bot.send_message(TO_CHAT_ID,
                                     Id_pp_users[i].format(bot.get_me()), reply_markup=markup)
                    chat_user_id = Id_chat_user[j]
                else:
                    i += 1
                    j += 1
                    g += 1


Мне нужно что-бы цикл остановился на елементе и ждал пока модератор нажмет InlineKeyboardButton, после чего продолжил цикл

Функия которая вызываеться после нажатие InlineKeyboardButton
@bot.callback_query_handler(func=lambda call: True)
def check(call):  
    if call.message:
        if call.data == "Successful":
            bot.send_message(chat_user_id,  "Текст который отправится рользователю")
            bot.send_message(TO_CHAT_ID, "*Подтверждено*", parse_mode="Markdown")
        elif call.data == "Failed":
            bot.send_message(chat_user_id, "Текст который отправится рользователю")
            bot.send_message(TO_CHAT_ID, "*Отказано*", parse_mode="Markdown")
        elif call.data == "FailedDep":
            bot.send_message(chat_user_id, "Текст который отправится рользователю")
            bot.send_message(TO_CHAT_ID, "*Отказано по причине...*", parse_mode="Markdown"


Вообще это возможно сделать?

P.S. - Функция funcFor() будет вызыватся с помощю /команды, и после окончание цикла, в листе будут удалятся все елементы.
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Нет, нельзя. Нужно архитектуру бота менять, так ты результата не добьёшься.

1. Поступающие запросы складываешь в очередь (а лучше в БД).
2. Бот периодически проверяет наличие непроверенных запросов и выкидывает их менеджеру. Так как менеджер - существо неторопливое, это можно делать раз в пару минут или даже реже.
3. По реакции от менеджера запрос помечается как проверенный (одобренный/отклонённый).
4. Бот периодически проверяет, есть ли проверенные, но не обработанные запросы. Если есть, обрабатывает их, и помечает их как обработанные.
5. Опционально: периодически запросы, отмеченные как обработанные, удаляются из БД.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
01 июн. 2024, в 19:07
100000 руб./за проект
01 июн. 2024, в 18:41
100 руб./за проект
01 июн. 2024, в 18:41
1000 руб./за проект