 |

07.07.2023, 15:45
|
|
Познающий
Регистрация: 13.02.2022
Сообщений: 85
С нами:
2237294
Репутация:
8
|
|
Подскажите пожалуйста че делать если у меня багнулся код? При запуске бота нажимая на кнопку он отправляет сообщение которое вообще не должен, его нет в коде. Все сообщения такого типа у меня через query. По нажатию на кнопку назад он должен возвращать старое меню выбора панели но он пишет что у меня нет доступа и одновременно пишет что я вернулся в админ панель.
Python:
Код:
import
telebot
from
telebot
.
types
import
InlineKeyboardMarkup
,
InlineKeyboardButton
bot
=
telebot
.
TeleBot
(
'6085288264:AAE3pTGI_y2g3EHG4tEBGaICyaw27sC0hl0'
)
films
=
[
]
films_panel_message_id
=
None
# Идентификатор сообщения с админ панелью "Управление фильмами"
# Команда /start
@bot.message_handler
(
commands
=
[
'start'
]
)
def
start
(
message
)
:
bot
.
send_message
(
message
.
chat
.
id
,
"Отправьте мне код из видео, и я скажу вам, что это за фильм."
)
# Команда /admin
@bot.message_handler
(
commands
=
[
'admin'
]
)
def
admin_panel
(
message
)
:
if
message
.
from_user
.
id
not
in
[
5194125239
,
635457750
]
:
bot
.
answer_callback_query
(
call
.
id
,
text
=
"У вас нет доступа для админ панели."
)
return
keyboard
=
InlineKeyboardMarkup
(
row_width
=
1
)
buttons
=
[
InlineKeyboardButton
(
"Управление рекламой"
,
callback_data
=
"advertising"
)
,
InlineKeyboardButton
(
"Управление фильмами"
,
callback_data
=
"films"
)
]
keyboard
.
add
(
*
buttons
)
bot
.
send_message
(
message
.
chat
.
id
,
"Админ панель:"
,
reply_markup
=
keyboard
)
@bot.callback_query_handler
(
func
=
lambda
call
:
True
)
def
admin_panel_callback
(
call
)
:
if
call
.
data
==
"advertising"
:
advertising_panel
(
call
.
message
)
elif
call
.
data
==
"films"
:
films_panel
(
call
.
message
)
elif
call
.
data
==
"back"
:
admin_panel
(
call
.
message
)
# Исправленный код: передача message в admin_panel
bot
.
answer_callback_query
(
call
.
id
,
text
=
"Вы вернулись к выбору админ панели."
)
return
bot
.
answer_callback_query
(
call
.
id
)
def
advertising_panel
(
message
)
:
keyboard
=
InlineKeyboardMarkup
(
row_width
=
1
)
buttons
=
[
InlineKeyboardButton
(
"Добавить рекламу"
,
callback_data
=
"add_film_button"
)
,
InlineKeyboardButton
(
"« Назад"
,
callback_data
=
"back"
)
]
keyboard
.
add
(
*
buttons
)
send_admin_message
(
message
.
chat
.
id
,
"Управление рекламой:"
,
reply_markup
=
keyboard
)
def
films_panel
(
message
)
:
keyboard
=
InlineKeyboardMarkup
(
row_width
=
2
)
# Ряд с кнопкой "Добавить фильм"
add_film_button_row
=
[
InlineKeyboardButton
(
"Добавить канал"
,
callback_data
=
"add_channel_button"
)
]
keyboard
.
add
(
*
add_film_button_row
)
# Ряд с кнопкой "« Назад"
back_button_row
=
[
InlineKeyboardButton
(
"« Назад"
,
callback_data
=
"back"
)
]
keyboard
.
add
(
*
back_button_row
)
# Добавление кнопок фильмов
for
film
in
films
:
keyboard
.
add
(
InlineKeyboardButton
(
film
[
'title'
]
,
callback_data
=
f"film_{film['code']}"
)
)
send_admin_message
(
message
.
chat
.
id
,
"Управление фильмами:"
,
reply_markup
=
keyboard
)
# Отправка сообщения в админ панель
def
send_admin_message
(
chat_id
,
message_text
,
reply_markup
=
None
)
:
global
films_panel_message_id
# Используем глобальную переменную
if
films_panel_message_id
is
not
None
:
# Обновление сообщения
bot
.
edit_message_text
(
chat_id
=
chat_id
,
message_id
=
films_panel_message_id
,
text
=
message_text
,
reply_markup
=
reply_markup
,
parse_mode
=
"HTML"
)
else
:
# Отправка нового сообщения
msg
=
bot
.
send_message
(
chat_id
,
message_text
,
reply_markup
=
reply_markup
,
parse_mode
=
"HTML"
)
films_panel_message_id
=
msg
.
message_id
def
add_film_button
(
title
,
code
,
description
,
poster
)
:
films
.
append
(
{
'title'
:
title
,
'code'
:
code
,
'description'
:
description
,
'poster'
:
poster
}
)
def
find_film_by_code
(
code
)
:
for
film
in
films
:
if
film
[
'code'
]
==
code
:
return
film
return
None
@bot.callback_query_handler
(
func
=
lambda
call
:
call
.
data
.
startswith
(
"film_"
)
)
def
film_callback
(
call
)
:
film_code
=
call
.
data
.
split
(
"_"
)
[
1
]
film
=
find_film_by_code
(
film_code
)
if
film
is
not
None
:
bot
.
answer_callback_query
(
call
.
id
,
f"Фильм:{film['title']}"
)
else
:
bot
.
answer_callback_query
(
call
.
id
,
"Фильм не найден"
)
@bot.callback_query_handler
(
func
=
lambda
call
:
call
.
data
==
"add_film_button"
)
def
add_film_callback
(
call
)
:
msg
=
bot
.
send_message
(
call
.
message
.
chat
.
id
,
"Введите название фильма:"
)
bot
.
register_next_step_handler
(
msg
,
process_film_title_step
)
def
process_film_title_step
(
message
)
:
title
=
message
.
text
msg
=
bot
.
send_message
(
message
.
chat
.
id
,
"Введите код для поиска фильма:"
)
bot
.
register_next_step_handler
(
msg
,
process_film_code_step
,
title
)
def
process_film_code_step
(
message
,
title
)
:
code
=
message
.
text
msg
=
bot
.
send_message
(
message
.
chat
.
id
,
"Введите описание фильма:"
)
bot
.
register_next_step_handler
(
msg
,
process_film_description_step
,
title
,
code
)
def
process_film_description_step
(
message
,
title
,
code
)
:
description
=
message
.
text
msg
=
bot
.
send_message
(
message
.
chat
.
id
,
"Пришлите постер фильма:"
)
bot
.
register_next_step_handler
(
msg
,
process_film_poster_step
,
title
,
code
,
description
)
def
process_film_poster_step
(
message
,
title
,
code
,
description
)
:
poster_url
=
"https://example.com/poster.jpg"
add_film_button
(
title
,
code
,
description
,
poster_url
)
bot
.
send_message
(
message
.
chat
.
id
,
"Фильм успешно добавлен!"
)
bot
.
polling
(
)
|
|
|

11.07.2023, 14:29
|
|
Новичок
Регистрация: 07.06.2023
Сообщений: 0
С нами:
1546818
Репутация:
0
|
|
Переписал немного код, проблема была в том что ты использовал message.from_user.id и message.chat.id, наверно предполагая что это один и тот-же id. Так-же немного переписал админ панель, что-бы при нажатии на клавишу не отправлялось новое сообщение с настройками, а изменялось старое сообщнее.
Python:
Код:
import
telebot
from
telebot
.
types
import
InlineKeyboardMarkup
,
InlineKeyboardButton
bot
=
telebot
.
TeleBot
(
'6085288264:AAE3pTGI_y2g3EHG4tEBGaICyaw27sC0hl0'
)
films
=
[
]
films_panel_message_id
=
None
# Идентификатор сообщения с админ панелью "Управление фильмами"
def
get_admin_panel_keyboard
(
)
-
>
InlineKeyboardMarkup
:
keyboard
=
InlineKeyboardMarkup
(
row_width
=
1
)
buttons
=
[
InlineKeyboardButton
(
"Управление рекламой"
,
callback_data
=
"advertising"
)
,
InlineKeyboardButton
(
"Управление фильмами"
,
callback_data
=
"films"
)
]
keyboard
.
add
(
*
buttons
)
return
keyboard
def
get_advertising_keyboard
(
)
-
>
InlineKeyboardMarkup
:
keyboard
=
InlineKeyboardMarkup
(
row_width
=
1
)
buttons
=
[
InlineKeyboardButton
(
"Добавить рекламу"
,
callback_data
=
"add_film_button"
)
,
InlineKeyboardButton
(
"« Назад"
,
callback_data
=
"back"
)
]
keyboard
.
add
(
*
buttons
)
return
keyboard
def
get_films_keyboard
(
)
-
>
InlineKeyboardMarkup
:
keyboard
=
InlineKeyboardMarkup
(
row_width
=
2
)
# Ряд с кнопкой "Добавить фильм"
add_film_button_row
=
[
InlineKeyboardButton
(
"Добавить канал"
,
callback_data
=
"add_channel_button"
)
]
keyboard
.
add
(
*
add_film_button_row
)
# Ряд с кнопкой "« Назад"
back_button_row
=
[
InlineKeyboardButton
(
"« Назад"
,
callback_data
=
"back"
)
]
keyboard
.
add
(
*
back_button_row
)
# Добавление кнопок фильмов
for
film
in
films
:
keyboard
.
add
(
InlineKeyboardButton
(
film
[
'title'
]
,
callback_data
=
f"film_{film['code']}"
)
)
return
keyboard
# Команда /start
@bot.message_handler
(
commands
=
[
'start'
]
)
def
start
(
message
)
:
bot
.
send_message
(
message
.
chat
.
id
,
"Отправьте мне код из видео, и я скажу вам, что это за фильм."
)
# Команда /admin
@bot.message_handler
(
commands
=
[
'admin'
]
)
def
admin_panel
(
message
:
telebot
.
types
.
Message
)
:
if
message
.
chat
.
id
not
in
[
5194125239
,
635457750
]
:
bot
.
send_message
(
message
.
chat
.
id
,
text
=
"У вас нет доступа для админ панели."
)
return
keyboard
=
get_admin_panel_keyboard
(
)
bot
.
send_message
(
message
.
chat
.
id
,
"Админ панель:"
,
reply_markup
=
keyboard
)
@bot.callback_query_handler
(
func
=
lambda
call
:
True
)
def
admin_panel_callback
(
call
)
:
if
call
.
data
==
"advertising"
:
keyboard
=
get_advertising_keyboard
(
)
bot
.
edit_message_text
(
"Управление рекламой:"
,
call
.
message
.
chat
.
id
,
call
.
message
.
message_id
,
reply_markup
=
keyboard
)
elif
call
.
data
==
"films"
:
keyboard
=
get_films_keyboard
(
)
bot
.
edit_message_text
(
"Управление фильмами:"
,
call
.
message
.
chat
.
id
,
call
.
message
.
message_id
,
reply_markup
=
keyboard
)
elif
call
.
data
==
"back"
:
if
call
.
message
.
chat
.
id
not
in
[
5194125239
,
635457750
]
:
bot
.
send_message
(
call
.
message
.
chat
.
id
,
text
=
"У вас нет доступа для админ панели."
)
return
keyboard
=
get_admin_panel_keyboard
(
)
bot
.
edit_message_text
(
"Админ панель:"
,
call
.
message
.
chat
.
id
,
call
.
message
.
message_id
,
reply_markup
=
keyboard
)
bot
.
answer_callback_query
(
call
.
id
,
text
=
"Вы вернулись к выбору админ панели."
)
bot
.
answer_callback_query
(
call
.
id
)
# def advertising_panel(message):
# keyboard = InlineKeyboardMarkup(row_width=1)
# buttons = [
# InlineKeyboardButton("Добавить рекламу", callback_data="add_film_button"),
# InlineKeyboardButton("« Назад", callback_data="back")
# ]
# keyboard.add(*buttons)
# send_admin_message(message.chat.id, "Управление рекламой:", reply_markup=keyboard)
# def films_panel(message):
# keyboard = InlineKeyboardMarkup(row_width=2)
# # Ряд с кнопкой "Добавить фильм"
# add_film_button_row = [InlineKeyboardButton("Добавить канал", callback_data="add_channel_button")]
# keyboard.add(*add_film_button_row)
# # Ряд с кнопкой "« Назад"
# back_button_row = [InlineKeyboardButton("« Назад", callback_data="back")]
# keyboard.add(*back_button_row)
# # Добавление кнопок фильмов
# for film in films:
# keyboard.add(InlineKeyboardButton(film['title'], callback_data=f"film_{film['code']}"))
# send_admin_message(message.chat.id, "Управление фильмами:", reply_markup=keyboard)
# Отправка сообщения в админ панель
def
send_admin_message
(
chat_id
,
message_text
,
reply_markup
=
None
)
:
global
films_panel_message_id
# Используем глобальную переменную
if
films_panel_message_id
is
not
None
:
# Обновление сообщения
bot
.
edit_message_text
(
chat_id
=
chat_id
,
message_id
=
films_panel_message_id
,
text
=
message_text
,
reply_markup
=
reply_markup
,
parse_mode
=
"HTML"
)
else
:
# Отправка нового сообщения
msg
=
bot
.
send_message
(
chat_id
,
message_text
,
reply_markup
=
reply_markup
,
parse_mode
=
"HTML"
)
films_panel_message_id
=
msg
.
message_id
def
add_film_button
(
title
,
code
,
description
,
poster
)
:
films
.
append
(
{
'title'
:
title
,
'code'
:
code
,
'description'
:
description
,
'poster'
:
poster
}
)
def
find_film_by_code
(
code
)
:
for
film
in
films
:
if
film
[
'code'
]
==
code
:
return
film
return
None
@bot.callback_query_handler
(
func
=
lambda
call
:
call
.
data
.
startswith
(
"film_"
)
)
def
film_callback
(
call
)
:
film_code
=
call
.
data
.
split
(
"_"
)
[
1
]
film
=
find_film_by_code
(
film_code
)
if
film
is
not
None
:
bot
.
answer_callback_query
(
call
.
id
,
f"Фильм:{film['title']}"
)
else
:
bot
.
answer_callback_query
(
call
.
id
,
"Фильм не найден"
)
@bot.callback_query_handler
(
func
=
lambda
call
:
call
.
data
==
"add_film_button"
)
def
add_film_callback
(
call
)
:
msg
=
bot
.
send_message
(
call
.
message
.
chat
.
id
,
"Введите название фильма:"
)
bot
.
register_next_step_handler
(
msg
,
process_film_title_step
)
def
process_film_title_step
(
message
)
:
title
=
message
.
text
msg
=
bot
.
send_message
(
message
.
chat
.
id
,
"Введите код для поиска фильма:"
)
bot
.
register_next_step_handler
(
msg
,
process_film_code_step
,
title
)
def
process_film_code_step
(
message
,
title
)
:
code
=
message
.
text
msg
=
bot
.
send_message
(
message
.
chat
.
id
,
"Введите описание фильма:"
)
bot
.
register_next_step_handler
(
msg
,
process_film_description_step
,
title
,
code
)
def
process_film_description_step
(
message
,
title
,
code
)
:
description
=
message
.
text
msg
=
bot
.
send_message
(
message
.
chat
.
id
,
"Пришлите постер фильма:"
)
bot
.
register_next_step_handler
(
msg
,
process_film_poster_step
,
title
,
code
,
description
)
def
process_film_poster_step
(
message
,
title
,
code
,
description
)
:
poster_url
=
"https://example.com/poster.jpg"
add_film_button
(
title
,
code
,
description
,
poster_url
)
bot
.
send_message
(
message
.
chat
.
id
,
"Фильм успешно добавлен!"
)
bot
.
polling
(
)
|
|
|

13.07.2023, 20:19
|
|
Познающий
Регистрация: 13.02.2022
Сообщений: 85
С нами:
2237294
Репутация:
8
|
|
Сообщение от Python_newbie
Переписал немного код, проблема была в том что ты использовал message.from_user.id и message.chat.id, наверно предполагая что это один и тот-же id. Так-же немного переписал админ панель, что-бы при нажатии на клавишу не отправлялось новое сообщение с настройками, а изменялось старое сообщнее.
Python:
Код:
import
telebot
from
telebot
.
types
import
InlineKeyboardMarkup
,
InlineKeyboardButton
bot
=
telebot
.
TeleBot
(
'6085288264:AAE3pTGI_y2g3EHG4tEBGaICyaw27sC0hl0'
)
films
=
[
]
films_panel_message_id
=
None
# Идентификатор сообщения с админ панелью "Управление фильмами"
def
get_admin_panel_keyboard
(
)
-
>
InlineKeyboardMarkup
:
keyboard
=
InlineKeyboardMarkup
(
row_width
=
1
)
buttons
=
[
InlineKeyboardButton
(
"Управление рекламой"
,
callback_data
=
"advertising"
)
,
InlineKeyboardButton
(
"Управление фильмами"
,
callback_data
=
"films"
)
]
keyboard
.
add
(
*
buttons
)
return
keyboard
def
get_advertising_keyboard
(
)
-
>
InlineKeyboardMarkup
:
keyboard
=
InlineKeyboardMarkup
(
row_width
=
1
)
buttons
=
[
InlineKeyboardButton
(
"Добавить рекламу"
,
callback_data
=
"add_film_button"
)
,
InlineKeyboardButton
(
"« Назад"
,
callback_data
=
"back"
)
]
keyboard
.
add
(
*
buttons
)
return
keyboard
def
get_films_keyboard
(
)
-
>
InlineKeyboardMarkup
:
keyboard
=
InlineKeyboardMarkup
(
row_width
=
2
)
# Ряд с кнопкой "Добавить фильм"
add_film_button_row
=
[
InlineKeyboardButton
(
"Добавить канал"
,
callback_data
=
"add_channel_button"
)
]
keyboard
.
add
(
*
add_film_button_row
)
# Ряд с кнопкой "« Назад"
back_button_row
=
[
InlineKeyboardButton
(
"« Назад"
,
callback_data
=
"back"
)
]
keyboard
.
add
(
*
back_button_row
)
# Добавление кнопок фильмов
for
film
in
films
:
keyboard
.
add
(
InlineKeyboardButton
(
film
[
'title'
]
,
callback_data
=
f"film_{film['code']}"
)
)
return
keyboard
# Команда /start
@bot.message_handler
(
commands
=
[
'start'
]
)
def
start
(
message
)
:
bot
.
send_message
(
message
.
chat
.
id
,
"Отправьте мне код из видео, и я скажу вам, что это за фильм."
)
# Команда /admin
@bot.message_handler
(
commands
=
[
'admin'
]
)
def
admin_panel
(
message
:
telebot
.
types
.
Message
)
:
if
message
.
chat
.
id
not
in
[
5194125239
,
635457750
]
:
bot
.
send_message
(
message
.
chat
.
id
,
text
=
"У вас нет доступа для админ панели."
)
return
keyboard
=
get_admin_panel_keyboard
(
)
bot
.
send_message
(
message
.
chat
.
id
,
"Админ панель:"
,
reply_markup
=
keyboard
)
@bot.callback_query_handler
(
func
=
lambda
call
:
True
)
def
admin_panel_callback
(
call
)
:
if
call
.
data
==
"advertising"
:
keyboard
=
get_advertising_keyboard
(
)
bot
.
edit_message_text
(
"Управление рекламой:"
,
call
.
message
.
chat
.
id
,
call
.
message
.
message_id
,
reply_markup
=
keyboard
)
elif
call
.
data
==
"films"
:
keyboard
=
get_films_keyboard
(
)
bot
.
edit_message_text
(
"Управление фильмами:"
,
call
.
message
.
chat
.
id
,
call
.
message
.
message_id
,
reply_markup
=
keyboard
)
elif
call
.
data
==
"back"
:
if
call
.
message
.
chat
.
id
not
in
[
5194125239
,
635457750
]
:
bot
.
send_message
(
call
.
message
.
chat
.
id
,
text
=
"У вас нет доступа для админ панели."
)
return
keyboard
=
get_admin_panel_keyboard
(
)
bot
.
edit_message_text
(
"Админ панель:"
,
call
.
message
.
chat
.
id
,
call
.
message
.
message_id
,
reply_markup
=
keyboard
)
bot
.
answer_callback_query
(
call
.
id
,
text
=
"Вы вернулись к выбору админ панели."
)
bot
.
answer_callback_query
(
call
.
id
)
# def advertising_panel(message):
# keyboard = InlineKeyboardMarkup(row_width=1)
# buttons = [
# InlineKeyboardButton("Добавить рекламу", callback_data="add_film_button"),
# InlineKeyboardButton("« Назад", callback_data="back")
# ]
# keyboard.add(*buttons)
# send_admin_message(message.chat.id, "Управление рекламой:", reply_markup=keyboard)
# def films_panel(message):
# keyboard = InlineKeyboardMarkup(row_width=2)
# # Ряд с кнопкой "Добавить фильм"
# add_film_button_row = [InlineKeyboardButton("Добавить канал", callback_data="add_channel_button")]
# keyboard.add(*add_film_button_row)
# # Ряд с кнопкой "« Назад"
# back_button_row = [InlineKeyboardButton("« Назад", callback_data="back")]
# keyboard.add(*back_button_row)
# # Добавление кнопок фильмов
# for film in films:
# keyboard.add(InlineKeyboardButton(film['title'], callback_data=f"film_{film['code']}"))
# send_admin_message(message.chat.id, "Управление фильмами:", reply_markup=keyboard)
# Отправка сообщения в админ панель
def
send_admin_message
(
chat_id
,
message_text
,
reply_markup
=
None
)
:
global
films_panel_message_id
# Используем глобальную переменную
if
films_panel_message_id
is
not
None
:
# Обновление сообщения
bot
.
edit_message_text
(
chat_id
=
chat_id
,
message_id
=
films_panel_message_id
,
text
=
message_text
,
reply_markup
=
reply_markup
,
parse_mode
=
"HTML"
)
else
:
# Отправка нового сообщения
msg
=
bot
.
send_message
(
chat_id
,
message_text
,
reply_markup
=
reply_markup
,
parse_mode
=
"HTML"
)
films_panel_message_id
=
msg
.
message_id
def
add_film_button
(
title
,
code
,
description
,
poster
)
:
films
.
append
(
{
'title'
:
title
,
'code'
:
code
,
'description'
:
description
,
'poster'
:
poster
}
)
def
find_film_by_code
(
code
)
:
for
film
in
films
:
if
film
[
'code'
]
==
code
:
return
film
return
None
@bot.callback_query_handler
(
func
=
lambda
call
:
call
.
data
.
startswith
(
"film_"
)
)
def
film_callback
(
call
)
:
film_code
=
call
.
data
.
split
(
"_"
)
[
1
]
film
=
find_film_by_code
(
film_code
)
if
film
is
not
None
:
bot
.
answer_callback_query
(
call
.
id
,
f"Фильм:{film['title']}"
)
else
:
bot
.
answer_callback_query
(
call
.
id
,
"Фильм не найден"
)
@bot.callback_query_handler
(
func
=
lambda
call
:
call
.
data
==
"add_film_button"
)
def
add_film_callback
(
call
)
:
msg
=
bot
.
send_message
(
call
.
message
.
chat
.
id
,
"Введите название фильма:"
)
bot
.
register_next_step_handler
(
msg
,
process_film_title_step
)
def
process_film_title_step
(
message
)
:
title
=
message
.
text
msg
=
bot
.
send_message
(
message
.
chat
.
id
,
"Введите код для поиска фильма:"
)
bot
.
register_next_step_handler
(
msg
,
process_film_code_step
,
title
)
def
process_film_code_step
(
message
,
title
)
:
code
=
message
.
text
msg
=
bot
.
send_message
(
message
.
chat
.
id
,
"Введите описание фильма:"
)
bot
.
register_next_step_handler
(
msg
,
process_film_description_step
,
title
,
code
)
def
process_film_description_step
(
message
,
title
,
code
)
:
description
=
message
.
text
msg
=
bot
.
send_message
(
message
.
chat
.
id
,
"Пришлите постер фильма:"
)
bot
.
register_next_step_handler
(
msg
,
process_film_poster_step
,
title
,
code
,
description
)
def
process_film_poster_step
(
message
,
title
,
code
,
description
)
:
poster_url
=
"https://example.com/poster.jpg"
add_film_button
(
title
,
code
,
description
,
poster_url
)
bot
.
send_message
(
message
.
chat
.
id
,
"Фильм успешно добавлен!"
)
bot
.
polling
(
)
Пока ответил, я уже почти дописал. Правда все равно осталась одна ошибка. Не поможешь?
|
|
|

15.07.2023, 00:35
|
|
Новичок
Регистрация: 07.06.2023
Сообщений: 0
С нами:
1546818
Репутация:
0
|
|
Сообщение от Python_newbie
Переписал немного код, проблема была в том что ты использовал message.from_user.id и message.chat.id, наверно предполагая что это один и тот-же id. Так-же немного переписал админ панель, что-бы при нажатии на клавишу не отправлялось новое сообщение с настройками, а изменялось старое сообщнее.
Python:
Код:
import
telebot
from
telebot
.
types
import
InlineKeyboardMarkup
,
InlineKeyboardButton
bot
=
telebot
.
TeleBot
(
'6085288264:AAE3pTGI_y2g3EHG4tEBGaICyaw27sC0hl0'
)
films
=
[
]
films_panel_message_id
=
None
# Идентификатор сообщения с админ панелью "Управление фильмами"
def
get_admin_panel_keyboard
(
)
-
>
InlineKeyboardMarkup
:
keyboard
=
InlineKeyboardMarkup
(
row_width
=
1
)
buttons
=
[
InlineKeyboardButton
(
"Управление рекламой"
,
callback_data
=
"advertising"
)
,
InlineKeyboardButton
(
"Управление фильмами"
,
callback_data
=
"films"
)
]
keyboard
.
add
(
*
buttons
)
return
keyboard
def
get_advertising_keyboard
(
)
-
>
InlineKeyboardMarkup
:
keyboard
=
InlineKeyboardMarkup
(
row_width
=
1
)
buttons
=
[
InlineKeyboardButton
(
"Добавить рекламу"
,
callback_data
=
"add_film_button"
)
,
InlineKeyboardButton
(
"« Назад"
,
callback_data
=
"back"
)
]
keyboard
.
add
(
*
buttons
)
return
keyboard
def
get_films_keyboard
(
)
-
>
InlineKeyboardMarkup
:
keyboard
=
InlineKeyboardMarkup
(
row_width
=
2
)
# Ряд с кнопкой "Добавить фильм"
add_film_button_row
=
[
InlineKeyboardButton
(
"Добавить канал"
,
callback_data
=
"add_channel_button"
)
]
keyboard
.
add
(
*
add_film_button_row
)
# Ряд с кнопкой "« Назад"
back_button_row
=
[
InlineKeyboardButton
(
"« Назад"
,
callback_data
=
"back"
)
]
keyboard
.
add
(
*
back_button_row
)
# Добавление кнопок фильмов
for
film
in
films
:
keyboard
.
add
(
InlineKeyboardButton
(
film
[
'title'
]
,
callback_data
=
f"film_{film['code']}"
)
)
return
keyboard
# Команда /start
@bot.message_handler
(
commands
=
[
'start'
]
)
def
start
(
message
)
:
bot
.
send_message
(
message
.
chat
.
id
,
"Отправьте мне код из видео, и я скажу вам, что это за фильм."
)
# Команда /admin
@bot.message_handler
(
commands
=
[
'admin'
]
)
def
admin_panel
(
message
:
telebot
.
types
.
Message
)
:
if
message
.
chat
.
id
not
in
[
5194125239
,
635457750
]
:
bot
.
send_message
(
message
.
chat
.
id
,
text
=
"У вас нет доступа для админ панели."
)
return
keyboard
=
get_admin_panel_keyboard
(
)
bot
.
send_message
(
message
.
chat
.
id
,
"Админ панель:"
,
reply_markup
=
keyboard
)
@bot.callback_query_handler
(
func
=
lambda
call
:
True
)
def
admin_panel_callback
(
call
)
:
if
call
.
data
==
"advertising"
:
keyboard
=
get_advertising_keyboard
(
)
bot
.
edit_message_text
(
"Управление рекламой:"
,
call
.
message
.
chat
.
id
,
call
.
message
.
message_id
,
reply_markup
=
keyboard
)
elif
call
.
data
==
"films"
:
keyboard
=
get_films_keyboard
(
)
bot
.
edit_message_text
(
"Управление фильмами:"
,
call
.
message
.
chat
.
id
,
call
.
message
.
message_id
,
reply_markup
=
keyboard
)
elif
call
.
data
==
"back"
:
if
call
.
message
.
chat
.
id
not
in
[
5194125239
,
635457750
]
:
bot
.
send_message
(
call
.
message
.
chat
.
id
,
text
=
"У вас нет доступа для админ панели."
)
return
keyboard
=
get_admin_panel_keyboard
(
)
bot
.
edit_message_text
(
"Админ панель:"
,
call
.
message
.
chat
.
id
,
call
.
message
.
message_id
,
reply_markup
=
keyboard
)
bot
.
answer_callback_query
(
call
.
id
,
text
=
"Вы вернулись к выбору админ панели."
)
bot
.
answer_callback_query
(
call
.
id
)
# def advertising_panel(message):
# keyboard = InlineKeyboardMarkup(row_width=1)
# buttons = [
# InlineKeyboardButton("Добавить рекламу", callback_data="add_film_button"),
# InlineKeyboardButton("« Назад", callback_data="back")
# ]
# keyboard.add(*buttons)
# send_admin_message(message.chat.id, "Управление рекламой:", reply_markup=keyboard)
# def films_panel(message):
# keyboard = InlineKeyboardMarkup(row_width=2)
# # Ряд с кнопкой "Добавить фильм"
# add_film_button_row = [InlineKeyboardButton("Добавить канал", callback_data="add_channel_button")]
# keyboard.add(*add_film_button_row)
# # Ряд с кнопкой "« Назад"
# back_button_row = [InlineKeyboardButton("« Назад", callback_data="back")]
# keyboard.add(*back_button_row)
# # Добавление кнопок фильмов
# for film in films:
# keyboard.add(InlineKeyboardButton(film['title'], callback_data=f"film_{film['code']}"))
# send_admin_message(message.chat.id, "Управление фильмами:", reply_markup=keyboard)
# Отправка сообщения в админ панель
def
send_admin_message
(
chat_id
,
message_text
,
reply_markup
=
None
)
:
global
films_panel_message_id
# Используем глобальную переменную
if
films_panel_message_id
is
not
None
:
# Обновление сообщения
bot
.
edit_message_text
(
chat_id
=
chat_id
,
message_id
=
films_panel_message_id
,
text
=
message_text
,
reply_markup
=
reply_markup
,
parse_mode
=
"HTML"
)
else
:
# Отправка нового сообщения
msg
=
bot
.
send_message
(
chat_id
,
message_text
,
reply_markup
=
reply_markup
,
parse_mode
=
"HTML"
)
films_panel_message_id
=
msg
.
message_id
def
add_film_button
(
title
,
code
,
description
,
poster
)
:
films
.
append
(
{
'title'
:
title
,
'code'
:
code
,
'description'
:
description
,
'poster'
:
poster
}
)
def
find_film_by_code
(
code
)
:
for
film
in
films
:
if
film
[
'code'
]
==
code
:
return
film
return
None
@bot.callback_query_handler
(
func
=
lambda
call
:
call
.
data
.
startswith
(
"film_"
)
)
def
film_callback
(
call
)
:
film_code
=
call
.
data
.
split
(
"_"
)
[
1
]
film
=
find_film_by_code
(
film_code
)
if
film
is
not
None
:
bot
.
answer_callback_query
(
call
.
id
,
f"Фильм:{film['title']}"
)
else
:
bot
.
answer_callback_query
(
call
.
id
,
"Фильм не найден"
)
@bot.callback_query_handler
(
func
=
lambda
call
:
call
.
data
==
"add_film_button"
)
def
add_film_callback
(
call
)
:
msg
=
bot
.
send_message
(
call
.
message
.
chat
.
id
,
"Введите название фильма:"
)
bot
.
register_next_step_handler
(
msg
,
process_film_title_step
)
def
process_film_title_step
(
message
)
:
title
=
message
.
text
msg
=
bot
.
send_message
(
message
.
chat
.
id
,
"Введите код для поиска фильма:"
)
bot
.
register_next_step_handler
(
msg
,
process_film_code_step
,
title
)
def
process_film_code_step
(
message
,
title
)
:
code
=
message
.
text
msg
=
bot
.
send_message
(
message
.
chat
.
id
,
"Введите описание фильма:"
)
bot
.
register_next_step_handler
(
msg
,
process_film_description_step
,
title
,
code
)
def
process_film_description_step
(
message
,
title
,
code
)
:
description
=
message
.
text
msg
=
bot
.
send_message
(
message
.
chat
.
id
,
"Пришлите постер фильма:"
)
bot
.
register_next_step_handler
(
msg
,
process_film_poster_step
,
title
,
code
,
description
)
def
process_film_poster_step
(
message
,
title
,
code
,
description
)
:
poster_url
=
"https://example.com/poster.jpg"
add_film_button
(
title
,
code
,
description
,
poster_url
)
bot
.
send_message
(
message
.
chat
.
id
,
"Фильм успешно добавлен!"
)
bot
.
polling
(
)
Пиши, помогу
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|