Добрый день. Делал годовой школьный проект за 9 класс. Суть проекта - тг бот для моей школы.
Вот полный код, ниже опишу в чем проблема
import telebot
from telebot import types
# Введите токен вашего бота в кавычки
TOKEN = 'токен'
admins = [1234556789]
# Создайте объект бота
bot = telebot.TeleBot(TOKEN)
olimpiad_text = ["ghbdtn"]
olimpiad_test_text =[]
# Обработчик команды /start
@bot.message_handler(commands=['start'])
def send_welcome(message):
# Создаем объект клавиатуры с одной кнопкой
keyboard = types.InlineKeyboardMarkup()
important_events_button = types.InlineKeyboardButton(text="Важные события", callback_data="important_events")
doska = types.InlineKeyboardButton(text="Доска достижений", callback_data="doska")
admin_panel = types.InlineKeyboardButton(text="ADMIN PANEL", callback_data="admin_panel")
keyboard.add(important_events_button,doska)
if message.chat.id in admins:
keyboard.add(admin_panel)
# Отправляем приветственное сообщение с клавиатурой
bot.reply_to(message, "Привет! " + message.from_user.first_name + ", Это бот ИША", reply_markup=keyboard)
# Обработчик нажатия на кнопку "Важные события"
@bot.callback_query_handler(func=lambda call: call.data == "important_events")
def important_events_handler(call):
# Создаем объект клавиатуры с 4 кнопками
keyboard = types.InlineKeyboardMarkup()
olympiad_button = types.InlineKeyboardButton(text="Олимпиады", callback_data="olympiad_events")
test_button = types.InlineKeyboardButton(text="Пробники", callback_data="test_events")
other_button = types.InlineKeyboardButton(text="Другое", callback_data="other_events")
menu_button = types.InlineKeyboardButton(text="В меню", callback_data="menu")
keyboard.add(olympiad_button, test_button, other_button, menu_button)
# Отправляем сообщение "Выберите категорию" с клавиатурой
bot.send_message(call.message.chat.id, "Выберите категорию", reply_markup=keyboard)
@bot.callback_query_handler(func=lambda call: call.data == 'olympiad_events')
def handle_olympiads(callback_query):
# Создаем инлайн-кнопку "в меню"
menu_button = types.InlineKeyboardButton(text="в меню", callback_data="menu")
admin_new_text_olimpiad = types.InlineKeyboardButton(text="изменить текст", callback_data="new_text_olimp")
# Создаем клавиатуру и добавляем кнопку "в меню"
keyboard = types.InlineKeyboardMarkup(row_width=1)
keyboard.add(menu_button)
if callback_query.message.chat.id in admins:
keyboard.add(admin_new_text_olimpiad)
# Отправляем сообщение
bot.send_message(callback_query.message.chat.id, olimpiad_text[-1],reply_markup=keyboard)
@bot.callback_query_handler(func=lambda call: call.data == 'new_text_olimp')
def handle_olympiads(callback_query):
# Создаем инлайн-кнопку "в меню"
menu_button = types.InlineKeyboardButton(text="в меню", callback_data="menu")
# Создаем клавиатуру и добавляем кнопку "в меню"
keyboard = types.InlineKeyboardMarkup(row_width=1)
keyboard.add(menu_button)
# Отправляем сообщение
text = "отправте новый текст, новые строки разделите \\n. \nПример : Петя иванов получил 5.\\nВася иванов получил 4.\\n\nВ данном случае вывод будет таким : \nПетя иванов получил 5.\nВася иванов получил 4.\n Примечание : Даже если новый текст содержит всего одну строчку все равно поставте в конец \\n "
msg = bot.send_message(callback_query.message.chat.id, text,reply_markup=keyboard)
bot.register_next_step_handler(msg, new_text_olimp)
def new_text_olimp(message):
olimpiad_test_text.append(message.text)
text = olimpiad_test_text[-1].split("\\n")
text.pop(-1)
pr = []
for k in range(len(text)):
j = list(text[k])
j.insert(0,"◉ ")
j.append("\n")
pr.append("".join(j))
j = list(pr[-1])
j.pop(-1)
j.pop(-1)
pr.pop(-1)
pr.append("".join(j))
olimpiad_test_text.append("".join(pr))
text = "После изменения текст будет выглядеть так :\nОлимпиады\n" + olimpiad_test_text[-1]
accept_correct_text_button = types.InlineKeyboardButton(text="подтвердить изменение", callback_data="accept_correct_olimp_text")
menu_button = types.InlineKeyboardButton(text="в меню", callback_data="menu")
# Создаем клавиатуру и добавляем кнопку "в меню"
keyboard = types.InlineKeyboardMarkup(row_width=1)
keyboard.add(accept_correct_text_button,menu_button)
bot.send_message(message.chat.id,text,reply_markup=keyboard)
@bot.callback_query_handler(func=lambda call: call.data == 'accept_correct_olimp_text')
def handle_trials(callback_query):
olimpiad_text.append(olimpiad_text[-1])
menu_button = types.InlineKeyboardButton(text="в меню", callback_data="menu")
keyboard = types.InlineKeyboardMarkup(row_width=1)
keyboard.add(menu_button)
bot.send_message(callback_query.message.chat.id, "Текст успешно изменен",reply_markup=keyboard)
@bot.callback_query_handler(func=lambda call: call.data == 'test_events')
def handle_trials(callback_query):
# Создаем инлайн-кнопку "в меню"
menu_button = types.InlineKeyboardButton(text="в меню", callback_data="menu")
# Создаем клавиатуру и добавляем кнопку "в меню"
keyboard = types.InlineKeyboardMarkup(row_width=1)
keyboard.add(menu_button)
# Отправляем сообщение
bot.send_message(callback_query.message.chat.id, "1\n2\n3\n",reply_markup=keyboard)
@bot.callback_query_handler(func=lambda call: call.data == 'other_events')
def handle_trials(callback_query):
# Создаем инлайн-кнопку "в меню"
menu_button = types.InlineKeyboardButton(text="в меню", callback_data="menu")
# Создаем клавиатуру и добавляем кнопку "в меню"
keyboard = types.InlineKeyboardMarkup(row_width=1)
keyboard.add(menu_button)
# Отправляем сообщение
bot.send_message(callback_query.message.chat.id, "Другие события",reply_markup=keyboard)
# Обработчик нажатия на кнопку "В меню"
@bot.callback_query_handler(func=lambda call: call.data == "menu")
def menu_handler(call):
# Создаем объект клавиатуры с одной кнопкой
keyboard = types.InlineKeyboardMarkup()
important_events_button = types.InlineKeyboardButton(text="Важные события", callback_data="important_events")
doska = types.InlineKeyboardButton(text="Доска достижений", callback_data="doska")
admin_panel = types.InlineKeyboardButton(text="ADMIN PANEL", callback_data="admin_panel")
keyboard.add(important_events_button,doska)
if call.message.chat.id in admins:
keyboard.add(admin_panel)
# Отправляем сообщение "Привет! Имя, Это бот ИША" с клавиатурой
bot.send_message(call.message.chat.id, "Привет! " + call.message.chat.first_name + ", Это бот ИША", reply_markup=keyboard)
# Запускаем бота
bot.polling()
проблема у меня тут :
@bot.callback_query_handler(func=lambda call: call.data == 'new_text_olimp')
def handle_olympiads(callback_query):
# Создаем инлайн-кнопку "в меню"
menu_button = types.InlineKeyboardButton(text="в меню", callback_data="menu")
# Создаем клавиатуру и добавляем кнопку "в меню"
keyboard = types.InlineKeyboardMarkup(row_width=1)
keyboard.add(menu_button)
# Отправляем сообщение
text = "отправте новый текст, новые строки разделите \\n. \nПример : Петя иванов получил 5.\\nВася иванов получил 4.\\n\nВ данном случае вывод будет таким : \nПетя иванов получил 5.\nВася иванов получил 4.\n Примечание : Даже если новый текст содержит всего одну строчку все равно поставте в конец \\n "
msg = bot.send_message(callback_query.message.chat.id, text,reply_markup=keyboard)
bot.register_next_step_handler(msg, new_text_olimp)
def new_text_olimp(message):
olimpiad_test_text.append(message.text)
text = olimpiad_test_text[-1].split("\\n")
text.pop(-1)
pr = []
for k in range(len(text)):
j = list(text[k])
j.insert(0,"◉ ")
j.append("\n")
pr.append("".join(j))
j = list(pr[-1])
j.pop(-1)
j.pop(-1)
pr.pop(-1)
pr.append("".join(j))
olimpiad_test_text.append("".join(pr))
text = "После изменения текст будет выглядеть так :\nОлимпиады\n" + olimpiad_test_text[-1]
accept_correct_text_button = types.InlineKeyboardButton(text="подтвердить изменение", callback_data="accept_correct_olimp_text")
menu_button = types.InlineKeyboardButton(text="в меню", callback_data="menu")
# Создаем клавиатуру и добавляем кнопку "в меню"
keyboard = types.InlineKeyboardMarkup(row_width=1)
keyboard.add(accept_correct_text_button,menu_button)
bot.send_message(message.chat.id,text,reply_markup=keyboard)
@bot.callback_query_handler(func=lambda call: call.data == 'accept_correct_olimp_text')
def handle_trials(callback_query):
olimpiad_text.append(olimpiad_text[-1])
menu_button = types.InlineKeyboardButton(text="в меню", callback_data="menu")
keyboard = types.InlineKeyboardMarkup(row_width=1)
keyboard.add(menu_button)
bot.send_message(callback_query.message.chat.id, "Текст успешно изменен",reply_markup=keyboard)
а точнее : bot.register_next_step_handler(msg, new_text_olimp);def new_text_olimp(message):
ошибка , которую выдает консоль : UnboundLocalError: local variable 'new_text_olimp' referenced before assignment
Был бы вам признателен , если бы вы мне помогли !