@Denzel_cw

Как поменять global на return в коде? Как сделать, чтобы все сообщения от пользователя из разных функций передавались в последнюю функцию?

@bot.message_handler(commands=['start'])
def bot_send_message(message):
    markup = types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True)
    create = types.KeyboardButton('Создать задачу')
    markup.add(create)
    bot.send_message(message.chat.id, 'Я могу создать задачу.', reply_markup=markup)


@bot.message_handler(content_types=["text"])
def handle_text(message):
    markup = types.InlineKeyboardMarkup()
    show_project = types.InlineKeyboardButton(text='Проекты', callback_data='show_project')
    markup.add(show_project)
    if message.text.strip() == 'Создать задачу':
        bot.send_message(message.chat.id, 'Напишите название проекта. Для просмотра проектов нажмите кнопку.',
                         reply_markup=markup)
        bot.register_next_step_handler(message, get_project)


@bot.callback_query_handler(func=lambda call: call.data.startswith('show_project'))
def list_of_project(call):
    if call.data == 'show_project':
        jira_projects = jira.projects()
        keys = sorted(project.key for project in jira_projects)[0:]
        bot.send_message(call.message.chat.id, 'Вот все доступные проекты: ' + '\n'.join(keys))
    pass


def get_project(message):
    global jira_project
    jira_project = message.text.strip()
    bot.send_message(message.chat.id, 'Создание задачи. Напишите название.')
    bot.register_next_step_handler(message, get_create_issue_summary)


@bot.message_handler(content_types=["text"])
def get_create_issue_summary(message):
    markup = types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True)
    item1 = types.KeyboardButton("Highest")
    markup.add(item1)
    item2 = types.KeyboardButton("High")
    markup.add(item2)
    item3 = types.KeyboardButton("Middle")
    markup.add(item3)
    item4 = types.KeyboardButton("Low")
    markup.add(item4)
    item5= types.KeyboardButton("Lowest")
    markup.add(item5)
    global jira_summary
    jira_summary = message.text.strip()
    bot.send_message(message.chat.id, 'Создание задачи. Введите приоритет.', reply_markup=markup)
    bot.register_next_step_handler(message, get_create_issue_priority)


def get_create_issue_priority(message):
    global jira_priority
    jira_priority = message.text.strip()
    bot.send_message(message.chat.id, 'Создание задачи. Введите описание')
    bot.register_next_step_handler(message, get_create_issue_description)


@bot.message_handler(content_types=["text"])
def get_create_issue_description(message):
    keyboard = types.InlineKeyboardMarkup()
    key_yes = types.InlineKeyboardButton(text='Да', callback_data='yes')
    keyboard.add(key_yes)
    key_no = types.InlineKeyboardButton(text='Нет', callback_data='no')
    keyboard.add(key_no)
    global jira_description
    jira_description = message.text.strip()
    bot.send_message(message.chat.id, 'Проект: ' + jira_project + '\n' +
                                      'Название: ' + jira_summary + '\n' +
                                      'Приоритет: ' + jira_priority + '\n' +
                                      'Описание: ' + jira_description)
    bot.send_message(message.chat.id, 'Создать задачу? (Да/Нет)', reply_markup=keyboard)


@bot.callback_query_handler(func=lambda call: True)
def callback_worker(call):
    if call.data == 'yes':
        issue = jira.create_issue(project=jira_project,
                                      summary=jira_summary,
                                      issuetype={'name': 'Task'},
                                      priority ={'name': jira_priority},
                                      description =jira_description)
        bot.send_message(call.message.chat.id, 'Задача ' + issue.key + ' создана')
        bot.send_message(call.message.chat.id, 'Чтобы выернуться в начало нажите /start')
    if call.data == 'no':
        bot.send_message(call.message.chat.id, 'Создание задачи отменено.')
        bot.send_message(call.message.chat.id, 'Чтобы выернуться в начало нажите /start')


if __name__ == '__main__':
    bot.infinity_polling()
  • Вопрос задан
  • 67 просмотров
Пригласить эксперта
Ответы на вопрос 2
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Зачем у вас тег JIRA в этом вопросе, если вопрос никакого отношения не имеет к ней?
Ваша проблема в том, что вы не знаете языка, на котором пытаетесь писать. Вернее даже не писать, а исправлять что-то уже написанное.

global - это инструкция, которая объявляет переменную в функции глобальной на уровне модуля. return - это инструкция. позволяющая вернуть из вункции значение в точку вызова.
Вы пишете бота, и функции, задекорированные как обработчики событий от библиотеки для работы с протоколом мессенджера, не вызываются вами в коде непосредственно. Нет никакого смысла, чтобы эти функции что-то возвращали. Там, где они вызываются в недрах библиотеки их результаты не будут никем востребованы.
Здесь использованы глобальные переменные для сохранения результатов рботы хендлеров. По-хорошему нужно создать объектный контекст для этих хначений, сохранять отдельный контекст для каждой сессии общения бота с каждым человеком, но судя по вашему вопросу, вам всё это еще рано.

Просто правильный ответ на ваш вопрос будет не понят, или придётся объяснять с самых азов, или решать за вас вашу проблему, чему противореит суть данного ресурса.
Тут готовы помочь, что-то пояснить, ответить на конкретные вопросы, но не делать за кого-то чужую работу и не формировать индивидуальные курсы питона с нуля. С этим надо идти во фриланс.
Ответ написан
Комментировать
@slaventyigang
Вбиваете в гугле "Машина состояний телеграм" и хорошенько читаете.
global оставьте в покое.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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