@Simon440-png
Beginner python developer

Телеграм бот не выполняет дальнешие действия, как исправить?

Почему-то при очередном тестировании бота он перестал работать в определённой точке (место остановки отмечено комментарием ниже)
import telebot
import sqlite3
from telebot import types
from clickupython import client
import strings
from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton

bot = telebot.TeleBot(strings.token)
conn = sqlite3.connect('db/clickup.db', check_same_thread=False)
cursor = conn.cursor()

user_api = {}
user_id = {}
user_list_id = {}
user_password = {}
user_name = {}
user_description = {}
user_date = {}
user_clickup = {}
user_list = {}
user_name1 = {}
user_descr = {}
user_aidi = {}


def db_table_val(user_id: int, api: str, list_id: str, password: str, organis: str):
    cursor.execute('INSERT INTO clickup (user_id, api, list_id, password, oranis) VALUES (?, ?, ?, ?, ?)',
                   (user_id, api, list_id, password, organis))
    conn.commit()


@bot.message_handler(commands=['start'])
def button_message(message):
    print(message.chat.id)
    bot.send_message(message.chat.id,
                     f'Здравствуйте, {message.from_user.first_name} {message.from_user.last_name}! Позвольте мне помочь вам интегрировать ваше рабочее пространство ClickUp. Первое, что вам нужно сделать, это зарегистрироваться (/register) или авторизоваться (/login).')


@bot.message_handler(commands=['register'])
def reg(message):
    reg = bot.send_message(message.chat.id,
                           "Введите ваш токен. Для этого вам необходимо войти в свою учетную запись ClickUp, нажать на кружок с вашим аватаром в левом нижнем углу, выбрать «Приложения» и нажать кнопку «Копировать» в поле токена API. После вставить его в наш диалог и отправить.")
    bot.register_next_step_handler(reg, reg2)


def reg2(message):
    user_api[message.chat.id] = message.text
    user_id[message.chat.id] = message.from_user.id
    reg2 = bot.send_message(message.chat.id, "Введите ваш лист. Для этого вам необходимо войти в свою учетную запись ClickUp, нажать на 3 точки у вашего листа под пространством, нажать на кнопку 'Скопировать ссылку' (Copy link), вставить ее в браузер и скопировать в ней крайние цифры после 'слэша' (/)")
    bot.register_next_step_handler(reg2, reg3)


def reg3(message):
    user_list_id[message.chat.id] = message.text
    reg3 = bot.send_message(message.chat.id, "Придумайте пароль и отправьте его")
    bot.register_next_step_handler(reg3, reg4)


def reg4(message):
    user_password[message.chat.id] = message.text
    db_table_val(user_id=user_id[message.chat.id], api=user_api[message.chat.id], list_id=user_list_id[message.message.chat.id], password=user_password[message.chat.id])
    bot.send_message(message.chat.id, "Супер! Теперь Вы можете войти, используя команду /login")


@bot.message_handler(commands=['login'])
def login(message):
    Variable = message.from_user.id
    cursor.execute("SELECT * FROM clickup WHERE user_id=?", (Variable,))
    rows = cursor.fetchall()
    if len(rows) == 0:
        bot.send_message(message.chat.id, 'Вас нет в базе данных. Зарегистрируйтесь, введя команду /register')
    else:
        login = bot.send_message(message.chat.id, "Введите ваш пароль")
        bot.register_next_step_handler(login, login2)


def login2(message):
    user_password[message.chat.id] = message.text
    us_id = message.from_user.id
    cursor.execute("SELECT * FROM clickup WHERE user_id=? AND password=?", (us_id, user_password[message.chat.id],))
    password = cursor.fetchall()
    if len(password) == 0:
        bot.send_message(message.chat.id, "Не верный пароль!")
        login(message)
    else:
        print(user_password)
        bot.send_message(message.chat.id, "Вы вошли в систему! Введите /menu, чтобы перейти в меню")
    us_id = message.from_user.id
    cursor.execute("SELECT * FROM clickup WHERE user_id=?", (us_id,))
    password = cursor.fetchall()
    for row in password:
        user_clickup[message.chat.id] = row[2]
        user_list[message.chat.id] = row[3]
        print(user_clickup, user_list)


@bot.message_handler(commands=['help'])
def help(message):
    bot.send_message(message.chat.id, "/register")


@bot.message_handler(commands=['menu'])
def button_message(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
    item1 = types.KeyboardButton("Просмотреть задачи")
    item2 = types.KeyboardButton("Создать задачу")
    markup.add(item1, item2)
    bot.send_message(message.chat.id, 'Выберите действие:', reply_markup=markup)
    message_reply(message)

@bot.message_handler(func=lambda call: True)
def message_reply(message):
    if message.text == "Просмотреть задачи": #здесь он тормозит и не выполняет if
        mark = InlineKeyboardMarkup()
        mark.row_width = 1
        mark.add(InlineKeyboardButton("Изменить задачу", callback_data="chng_tsk"),
                 InlineKeyboardButton("Удалить задачу", callback_data="del_tsk"))
        c = client.ClickUpClient(user_clickup[message.chat.id])
        tasks = c.get_tasks(str(user_list[message.chat.id]), subtasks=True)
        for task in tasks:
            bot.send_message(message.chat.id,
                             f"ID: {task.id} \n Имя: {task.name} \n Описание: {task.description} \n Статус: {task.status.status} \n Создатель: {task.creator.username} \n Приоритет: {task.priority} \n Ответственные: \n Ссылка: {task.url}",
                             reply_markup=mark)
            print(tasks)
    elif message.text == "Создать задачу": #но почему-то этот шаг спокойно выполняется
    sent = bot.send_message(message.chat.id, "Введите имя задачи")
    bot.register_next_step_handler(sent, descr)

Но почему-то шаг "Создать задачу" выполняется. С чем это может быть связано и как это исправить?
  • Вопрос задан
  • 144 просмотра
Решения вопроса 1
@samanwirst
Вроде бы человек
Сравнение не срабатывает. Попробуйте вывести в консоль message. Возможно значение пременной неправильное

Также советую не использовать так много хендлеров. Лучше всего сделайте 1 хендлер на получение команд и 1 на получение callback, а дальше уже как (if message == "/start") понимать какая команда введена
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы