Update bot_manager.py
Этот коммит содержится в:
@@ -75,7 +75,8 @@ main_menu_markup = InlineKeyboardMarkup(row_width=1).add(
|
|||||||
InlineKeyboardButton("Получить конфигурацию пользователя", callback_data="get_config"),
|
InlineKeyboardButton("Получить конфигурацию пользователя", callback_data="get_config"),
|
||||||
InlineKeyboardButton("Список клиентов", callback_data="list_users"),
|
InlineKeyboardButton("Список клиентов", callback_data="list_users"),
|
||||||
InlineKeyboardButton("Создать бекап", callback_data="create_backup"),
|
InlineKeyboardButton("Создать бекап", callback_data="create_backup"),
|
||||||
InlineKeyboardButton("Список админов", callback_data="list_admins") # Новая кнопка
|
InlineKeyboardButton("Список админов", callback_data="list_admins"),
|
||||||
|
InlineKeyboardButton("Добавить администратора", callback_data="add_admin") # Новая кнопка
|
||||||
)
|
)
|
||||||
|
|
||||||
user_main_messages = {}
|
user_main_messages = {}
|
||||||
@@ -266,6 +267,7 @@ async def handle_messages(message: types.Message):
|
|||||||
return
|
return
|
||||||
user_state = user_main_messages.get(message.from_user.id, {}).get('state')
|
user_state = user_main_messages.get(message.from_user.id, {}).get('state')
|
||||||
if user_state == 'waiting_for_user_name':
|
if user_state == 'waiting_for_user_name':
|
||||||
|
# Существующий код для добавления пользователя
|
||||||
user_name = message.text.strip()
|
user_name = message.text.strip()
|
||||||
if not all(c.isalnum() or c in "-_" for c in user_name):
|
if not all(c.isalnum() or c in "-_" for c in user_name):
|
||||||
await message.reply("Имя пользователя может содержать только буквы, цифры, дефисы и подчёркивания.")
|
await message.reply("Имя пользователя может содержать только буквы, цифры, дефисы и подчёркивания.")
|
||||||
@@ -294,10 +296,66 @@ async def handle_messages(message: types.Message):
|
|||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
await message.answer("Ошибка: главное сообщение не найдено.")
|
await message.answer("Ошибка: главное сообщение не найдено.")
|
||||||
|
elif user_state == 'waiting_for_admin_id':
|
||||||
|
try:
|
||||||
|
new_admin_id = int(message.text.strip())
|
||||||
|
if new_admin_id in admins:
|
||||||
|
await message.reply(f"Пользователь {new_admin_id} уже является администратором.")
|
||||||
|
asyncio.create_task(delete_message_after_delay(message.chat.id, message.message_id, delay=2))
|
||||||
|
return
|
||||||
|
db.add_admin(new_admin_id)
|
||||||
|
admins.append(new_admin_id)
|
||||||
|
await message.reply(f"Пользователь {new_admin_id} добавлен в администраторы.")
|
||||||
|
await bot.send_message(new_admin_id, "Вы были назначены администратором бота!")
|
||||||
|
logger.info(f"Админ {message.from_user.id} добавил администратора {new_admin_id} через интерфейс")
|
||||||
|
|
||||||
|
# Возвращаем главное меню
|
||||||
|
main_chat_id = user_main_messages[message.from_user.id].get('chat_id')
|
||||||
|
main_message_id = user_main_messages[message.from_user.id].get('message_id')
|
||||||
|
if main_chat_id and main_message_id:
|
||||||
|
user_main_messages[message.from_user.id]['state'] = None
|
||||||
|
await bot.edit_message_text(
|
||||||
|
chat_id=main_chat_id,
|
||||||
|
message_id=main_message_id,
|
||||||
|
text="Выберите действие:",
|
||||||
|
reply_markup=main_menu_markup
|
||||||
|
)
|
||||||
|
except ValueError:
|
||||||
|
await message.reply("Пожалуйста, введите корректный Telegram ID (число).")
|
||||||
|
asyncio.create_task(delete_message_after_delay(message.chat.id, message.message_id, delay=2))
|
||||||
|
return
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Ошибка при добавлении администратора: {e}")
|
||||||
|
await message.reply("Произошла ошибка при добавлении администратора.")
|
||||||
|
asyncio.create_task(delete_message_after_delay(message.chat.id, message.message_id, delay=2))
|
||||||
else:
|
else:
|
||||||
await message.reply("Неизвестная команда или действие.")
|
await message.reply("Неизвестная команда или действие.")
|
||||||
asyncio.create_task(delete_message_after_delay(message.chat.id, message.message_id, delay=2))
|
asyncio.create_task(delete_message_after_delay(message.chat.id, message.message_id, delay=2))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@dp.callback_query_handler(lambda c: c.data == "add_admin")
|
||||||
|
async def prompt_for_admin_id(callback_query: types.CallbackQuery):
|
||||||
|
if callback_query.from_user.id not in admins:
|
||||||
|
await callback_query.answer("У вас нет прав для выполнения этого действия.", show_alert=True)
|
||||||
|
return
|
||||||
|
|
||||||
|
main_chat_id = user_main_messages.get(callback_query.from_user.id, {}).get('chat_id')
|
||||||
|
main_message_id = user_main_messages.get(callback_query.from_user.id, {}).get('message_id')
|
||||||
|
if main_chat_id and main_message_id:
|
||||||
|
await bot.edit_message_text(
|
||||||
|
chat_id=main_chat_id,
|
||||||
|
message_id=main_message_id,
|
||||||
|
text="Введите Telegram ID нового администратора:",
|
||||||
|
reply_markup=InlineKeyboardMarkup().add(
|
||||||
|
InlineKeyboardButton("Домой", callback_data="home")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
user_main_messages[callback_query.from_user.id]['state'] = 'waiting_for_admin_id'
|
||||||
|
else:
|
||||||
|
await callback_query.answer("Ошибка: главное сообщение не найдено.", show_alert=True)
|
||||||
|
await callback_query.answer()
|
||||||
|
|
||||||
@dp.callback_query_handler(lambda c: c.data.startswith('add_user'))
|
@dp.callback_query_handler(lambda c: c.data.startswith('add_user'))
|
||||||
async def prompt_for_user_name(callback_query: types.CallbackQuery):
|
async def prompt_for_user_name(callback_query: types.CallbackQuery):
|
||||||
if callback_query.from_user.id not in admins:
|
if callback_query.from_user.id not in admins:
|
||||||
@@ -665,13 +723,15 @@ async def list_admins_callback(callback_query: types.CallbackQuery):
|
|||||||
return
|
return
|
||||||
admin_list = "\n".join([f"- {admin_id}" for admin_id in admins])
|
admin_list = "\n".join([f"- {admin_id}" for admin_id in admins])
|
||||||
text = f"Список администраторов:\n{admin_list}"
|
text = f"Список администраторов:\n{admin_list}"
|
||||||
|
keyboard = InlineKeyboardMarkup(row_width=2)
|
||||||
|
for admin_id in admins:
|
||||||
|
keyboard.insert(InlineKeyboardButton(f"Удалить {admin_id}", callback_data=f"remove_admin_{admin_id}"))
|
||||||
|
keyboard.add(InlineKeyboardButton("Домой", callback_data="home"))
|
||||||
await bot.edit_message_text(
|
await bot.edit_message_text(
|
||||||
chat_id=callback_query.message.chat.id,
|
chat_id=callback_query.message.chat.id,
|
||||||
message_id=callback_query.message.message_id,
|
message_id=callback_query.message.message_id,
|
||||||
text=text,
|
text=text,
|
||||||
reply_markup=InlineKeyboardMarkup().add(
|
reply_markup=keyboard
|
||||||
InlineKeyboardButton("Домой", callback_data="home")
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
await callback_query.answer()
|
await callback_query.answer()
|
||||||
|
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user