NameError: имя «обновление» не определено телеграмм-ботом ⇐ Python
NameError: имя «обновление» не определено телеграмм-ботом
пытаюсь создать бота на replit;
для проведения интервью, которые могут:
[*]
При первом запуске создайте словарь всех участников группы, чтобы предотвратить мошенничество со стороны пользователей, которые меняют свои имена пользователей, установите поле как предыдущие интервью со значением по умолчанию 0. При следующем запуске обратитесь к этому словарю, чтобы подсчет ответов на опросы. Подключено к таблицам Google
[*]
При начале интервью предложите автору интервью следующие варианты:
Текст опроса, ограничение времени опроса, ограничение времени отправки профиля, минимальное количество предыдущих интервью.
[*]
Создайте опрос на основе введенных данных, укажите текст и ограничение по времени опроса со следующими параметрами: Да-нет, проверка наставника.
[*]
По истечении установленного срока из ответов «да» выберите случайного респондента, количество предыдущих интервью которого равно или меньше введенного, и сравните его с уже созданным словарем. Если ни один ответчик не подходит, выберите случайным образом.
[*]
Отметьте выбранного пользователя, чтобы отправить «краткое описание профиля» в течение срока, установленного для отправки профиля, создателю опроса и ответив боту «Да» после отправки файла, добавьте 1 к предыдущим интервью для этого пользователя. как только ответят «да».
[*]
Если выбранный пользователь не ответил «да», вернитесь к шагу 4. Если 2-й выбранный пользователь тоже не справился, напишите: выбранные респонденты не прислали анкету, собеседование отменяется.
`
импорт журнала импортировать случайный пытаться: из telegram.ext импортировать Update, Updater, CommandHandler, CallbackContext, PollHandler кроме ImportError: импортировать ОС os.system("pip install python-telegram-bot --upgrade") импортировать gspread из oauth2client.service_account импортировать ServiceAccountCredentials # Включить ведение журнала logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO) logger = logging.getLogger(__name__) # Загрузите учетные данные Google Таблиц область = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"] creds = ServiceAccountCredentials.from_json_keyfile_name("*************.json", область действия) клиент = gspread.authorize(creds) # Откройте Google Sheet по названию лист_заголовок = "*****" лист = client.open(sheet_title).sheet1 # Словарь для хранения данных об участниках и их предыдущих интервью. members_dict = {} # Загрузите данные из Google Sheet вmember_dict в начале вашего скрипта. защита load_from_sheet(): глобальныйmember_dict members_dict = {} данные = лист.get_all_records() для строки в данных: user_id = row["Идентификатор пользователя"] prev_interviews = row["Предыдущие интервью"] members_dict[user_id] = предыдущие_интервью # Функция для обновления Google Sheet с помощьюmember_dict защита update_sheet(): # Получить существующие данные с листа существующие_данные = лист.get_all_records() # Обновляем данные в списке существующих_данных для user_id, prev_interviews вmember_dict.items(): # Проверяем, есть ли user_id уже на листе user_row = next((строка для строки в существующих_данных, если строка["Идентификатор пользователя"] == user_id), Нет) если строка_пользователя: # Обновляем существующую строку user_row["Предыдущие интервью"] = prev_interviews еще: # Добавляем новую строку существующий_data.append({"Идентификатор пользователя": user_id, "Предыдущие интервью": prev_interviews}) # Очистить существующие данные на листе лист.очистить() # Написать заголовок header = ["Идентификатор пользователя", "Предыдущие интервью"] лист.append_row(заголовок) # Запись измененных данных для строки в существующих_данных: sheet.append_row([row["Идентификатор пользователя"], row["Предыдущие интервью"]]) # Функция обратного вызова для обработки команды /start def start (обновление: Обновление, контекст: CallbackContext) -> Нет: update.message.reply_text("Добро пожаловать на собеседование! Укажите следующие параметры:\n" "/setoptions ") # Функция обратного вызова для обработки команды /setoptions def set_options (обновление: Обновление, контекст: CallbackContext) -> Нет: args = context.args если len(args) != 4: update.message.reply_text("Использование: /setoptions ") возвращаться poll_text, poll_time_limit, Profile_time_limit, min_previous_interviews = args context.user_data['poll_text'] = poll_text context.user_data['poll_time_limit'] = int(poll_time_limit) * 60 # Преобразование минут в секунды context.user_data['profile_time_limit'] = int(profile_time_limit) * 60 # Преобразование минут в секунды context.user_data['min_previous_interviews'] = int(min_previous_interviews) update.message.reply_text("Параметры установлены успешно!") # Функция обратного вызова для обработки команды /interview def интервью (обновление: Обновление, контекст: CallbackContext) -> Нет: если 'poll_text' нет в context.user_data: update.message.reply_text("Сначала установите параметры с помощью команды /setoptions.") возвращаться # Создаем опрос poll_message = update.message.reply_poll( context.user_data['poll_text'], options=["Да", "Нет", "Проверка опроса наставника"], тип = PollHandler.ANSWER_OPTIONS, is_anonymous = Ложь, allows_multiple_answers=False, open_ period=context.user_data['poll_time_limit'] ) # Получить идентификатор опроса poll_id = poll_message.poll.id # Установите таймер для проверки результатов опроса context.job_queue.run_once(check_poll_results, context.user_data['poll_time_limit'], context=poll_id) # Отображение ограничения по времени update.message.reply_text(f"Опрос создан с ограничением по времени: {context.user_data['poll_time_limit'] / 60} минут.") # Функция обратного вызова для проверки результатов опроса защита check_poll_results (контекст: CallbackContext) -> Никто: poll_id = context.job.context poll_results = context.bot.stop_poll(chat_id=context.job.context, message_id=poll_id) # Обработка результатов опроса process_poll_results(context.bot, context.user_data, poll_results) # Функция для обработки результатов опроса defprocess_poll_results(bot, user_data, poll_results): yes_responses = poll_results['options'][0]['voter_count'] если да_ответы == 0: update.message.reply_text("Никто не ответил "да" на опрос. Интервью отменено.") возвращаться # Отфильтровать участников, у которых предыдущие собеседования меньше или равны указанному лимиту. допущенные_члены = [user_id для user_id, prev_interviews вmembers_dict.items(), если prev_interviews Нет: selected_user_id, user_data = context.job.context еслиmember_dict[selected_user_id] == 0: # Уведомить создателя опроса о том, что выбранный пользователь не ответил «да» context.bot.send_message(context.chat_data['chat_id'], f"Выбранный пользователь @{selected_user_id} не ответил "да".") # Повторяем процесс с другим пользователем process_poll_results(context.bot, user_data, context.chat_data) еще: # Сообщите создателю опроса об успешной отправке профиля context.bot.send_message(context.chat_data['chat_id'], f"Профиль получен от @{selected_user_id}.") # Увеличиваем количество предыдущих интервью для выбранного пользователя members_dict[selected_user_id] += 1 # Обновить Google Таблицу update_sheet() # Функция обратного вызова для обработки команды /stop def stop (обновление: Обновление, контекст: CallbackContext) -> Нет: update.message.reply_text("Бот останавливается...") context.job_queue.stop() context.bot.stop() # Основная функция для запуска бота def main() -> Нет: # Установите свой токен бота Telegram updater = Updater("*********") # Попросите диспетчера зарегистрировать обработчики dp = updater.dispatcher # Регистрируем обработчики команд dp.add_handler(CommandHandler("старт", старт)) dp.add_handler(CommandHandler("setoptions", set_options)) dp.add_handler(CommandHandler("интервью", интервью)) dp.add_handler(CommandHandler("stop", stop)) # Добавлен обработчик команды /stop # Запускаем бота updater.start_polling() # Запускайте бота, пока не пошлете сигнал его остановить updater.idle() если __name__ == '__main__': основной() получение ошибки,
Файл «/home/runner/CalmHeartyObject/main.py», строка 73, в def start(Update: Update, context: CallbackContext) -> None: NameError: имя «Update» не является определено
пробовал изменить операторы импорта, но не смог понять ошибку..
пытаюсь создать бота на replit;
для проведения интервью, которые могут:
[*]
При первом запуске создайте словарь всех участников группы, чтобы предотвратить мошенничество со стороны пользователей, которые меняют свои имена пользователей, установите поле как предыдущие интервью со значением по умолчанию 0. При следующем запуске обратитесь к этому словарю, чтобы подсчет ответов на опросы. Подключено к таблицам Google
[*]
При начале интервью предложите автору интервью следующие варианты:
Текст опроса, ограничение времени опроса, ограничение времени отправки профиля, минимальное количество предыдущих интервью.
[*]
Создайте опрос на основе введенных данных, укажите текст и ограничение по времени опроса со следующими параметрами: Да-нет, проверка наставника.
[*]
По истечении установленного срока из ответов «да» выберите случайного респондента, количество предыдущих интервью которого равно или меньше введенного, и сравните его с уже созданным словарем. Если ни один ответчик не подходит, выберите случайным образом.
[*]
Отметьте выбранного пользователя, чтобы отправить «краткое описание профиля» в течение срока, установленного для отправки профиля, создателю опроса и ответив боту «Да» после отправки файла, добавьте 1 к предыдущим интервью для этого пользователя. как только ответят «да».
[*]
Если выбранный пользователь не ответил «да», вернитесь к шагу 4. Если 2-й выбранный пользователь тоже не справился, напишите: выбранные респонденты не прислали анкету, собеседование отменяется.
`
импорт журнала импортировать случайный пытаться: из telegram.ext импортировать Update, Updater, CommandHandler, CallbackContext, PollHandler кроме ImportError: импортировать ОС os.system("pip install python-telegram-bot --upgrade") импортировать gspread из oauth2client.service_account импортировать ServiceAccountCredentials # Включить ведение журнала logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO) logger = logging.getLogger(__name__) # Загрузите учетные данные Google Таблиц область = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"] creds = ServiceAccountCredentials.from_json_keyfile_name("*************.json", область действия) клиент = gspread.authorize(creds) # Откройте Google Sheet по названию лист_заголовок = "*****" лист = client.open(sheet_title).sheet1 # Словарь для хранения данных об участниках и их предыдущих интервью. members_dict = {} # Загрузите данные из Google Sheet вmember_dict в начале вашего скрипта. защита load_from_sheet(): глобальныйmember_dict members_dict = {} данные = лист.get_all_records() для строки в данных: user_id = row["Идентификатор пользователя"] prev_interviews = row["Предыдущие интервью"] members_dict[user_id] = предыдущие_интервью # Функция для обновления Google Sheet с помощьюmember_dict защита update_sheet(): # Получить существующие данные с листа существующие_данные = лист.get_all_records() # Обновляем данные в списке существующих_данных для user_id, prev_interviews вmember_dict.items(): # Проверяем, есть ли user_id уже на листе user_row = next((строка для строки в существующих_данных, если строка["Идентификатор пользователя"] == user_id), Нет) если строка_пользователя: # Обновляем существующую строку user_row["Предыдущие интервью"] = prev_interviews еще: # Добавляем новую строку существующий_data.append({"Идентификатор пользователя": user_id, "Предыдущие интервью": prev_interviews}) # Очистить существующие данные на листе лист.очистить() # Написать заголовок header = ["Идентификатор пользователя", "Предыдущие интервью"] лист.append_row(заголовок) # Запись измененных данных для строки в существующих_данных: sheet.append_row([row["Идентификатор пользователя"], row["Предыдущие интервью"]]) # Функция обратного вызова для обработки команды /start def start (обновление: Обновление, контекст: CallbackContext) -> Нет: update.message.reply_text("Добро пожаловать на собеседование! Укажите следующие параметры:\n" "/setoptions ") # Функция обратного вызова для обработки команды /setoptions def set_options (обновление: Обновление, контекст: CallbackContext) -> Нет: args = context.args если len(args) != 4: update.message.reply_text("Использование: /setoptions ") возвращаться poll_text, poll_time_limit, Profile_time_limit, min_previous_interviews = args context.user_data['poll_text'] = poll_text context.user_data['poll_time_limit'] = int(poll_time_limit) * 60 # Преобразование минут в секунды context.user_data['profile_time_limit'] = int(profile_time_limit) * 60 # Преобразование минут в секунды context.user_data['min_previous_interviews'] = int(min_previous_interviews) update.message.reply_text("Параметры установлены успешно!") # Функция обратного вызова для обработки команды /interview def интервью (обновление: Обновление, контекст: CallbackContext) -> Нет: если 'poll_text' нет в context.user_data: update.message.reply_text("Сначала установите параметры с помощью команды /setoptions.") возвращаться # Создаем опрос poll_message = update.message.reply_poll( context.user_data['poll_text'], options=["Да", "Нет", "Проверка опроса наставника"], тип = PollHandler.ANSWER_OPTIONS, is_anonymous = Ложь, allows_multiple_answers=False, open_ period=context.user_data['poll_time_limit'] ) # Получить идентификатор опроса poll_id = poll_message.poll.id # Установите таймер для проверки результатов опроса context.job_queue.run_once(check_poll_results, context.user_data['poll_time_limit'], context=poll_id) # Отображение ограничения по времени update.message.reply_text(f"Опрос создан с ограничением по времени: {context.user_data['poll_time_limit'] / 60} минут.") # Функция обратного вызова для проверки результатов опроса защита check_poll_results (контекст: CallbackContext) -> Никто: poll_id = context.job.context poll_results = context.bot.stop_poll(chat_id=context.job.context, message_id=poll_id) # Обработка результатов опроса process_poll_results(context.bot, context.user_data, poll_results) # Функция для обработки результатов опроса defprocess_poll_results(bot, user_data, poll_results): yes_responses = poll_results['options'][0]['voter_count'] если да_ответы == 0: update.message.reply_text("Никто не ответил "да" на опрос. Интервью отменено.") возвращаться # Отфильтровать участников, у которых предыдущие собеседования меньше или равны указанному лимиту. допущенные_члены = [user_id для user_id, prev_interviews вmembers_dict.items(), если prev_interviews Нет: selected_user_id, user_data = context.job.context еслиmember_dict[selected_user_id] == 0: # Уведомить создателя опроса о том, что выбранный пользователь не ответил «да» context.bot.send_message(context.chat_data['chat_id'], f"Выбранный пользователь @{selected_user_id} не ответил "да".") # Повторяем процесс с другим пользователем process_poll_results(context.bot, user_data, context.chat_data) еще: # Сообщите создателю опроса об успешной отправке профиля context.bot.send_message(context.chat_data['chat_id'], f"Профиль получен от @{selected_user_id}.") # Увеличиваем количество предыдущих интервью для выбранного пользователя members_dict[selected_user_id] += 1 # Обновить Google Таблицу update_sheet() # Функция обратного вызова для обработки команды /stop def stop (обновление: Обновление, контекст: CallbackContext) -> Нет: update.message.reply_text("Бот останавливается...") context.job_queue.stop() context.bot.stop() # Основная функция для запуска бота def main() -> Нет: # Установите свой токен бота Telegram updater = Updater("*********") # Попросите диспетчера зарегистрировать обработчики dp = updater.dispatcher # Регистрируем обработчики команд dp.add_handler(CommandHandler("старт", старт)) dp.add_handler(CommandHandler("setoptions", set_options)) dp.add_handler(CommandHandler("интервью", интервью)) dp.add_handler(CommandHandler("stop", stop)) # Добавлен обработчик команды /stop # Запускаем бота updater.start_polling() # Запускайте бота, пока не пошлете сигнал его остановить updater.idle() если __name__ == '__main__': основной() получение ошибки,
Файл «/home/runner/CalmHeartyObject/main.py», строка 73, в def start(Update: Update, context: CallbackContext) -> None: NameError: имя «Update» не является определено
пробовал изменить операторы импорта, но не смог понять ошибку..
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение