В этой статье я разберу своего телеграм бота который проверяет пароль по утекшим базам данных с помощью API have i been pwned. Начнем с того что я сделал кнопки, то есть пользователю не придется вводить унылые команды по типу /help или /scan
Часть кода написании кнопок:
def get_main_keyboard():
return ReplyKeyboardMarkup(
keyboard=[
[KeyboardButton(text="Сгенерировать пароль")],
[KeyboardButton(text="Как проверить свой пароль?")],
[KeyboardButton(text="Почему бот иногда не работает?")],
],
resize_keyboard=True
)
А здесь просто вызывается функция кнопок
@dp.message(CommandStart())
async def cmd_start(message: Message):
save_user(message.from_user.id, message.from_user.username, message.from_user.first_name)
logger.info(f"Юзер {message.from_user.id} (@{message.from_user.username}) нажал /start")
await message.answer(
"Привет! Я бот для проверки кибербезопасности твоих паролей.\n\n"
"• Нажми кнопку ниже, чтобы создать взломостойкий пароль.\n"
"• Или просто **отправьте мне любой текст**, и я проверю, есть ли он в базах утечек хакеров.",
reply_markup=get_main_keyboard()
)
Наш любимый пользователь всегда сталкивается с какими то ошибками. Неважно затупил он, или наш бот, важно то что это отправляется логом, и мы просто можем ответить на его же ошибку внутри бота
Кусок кода ответа админстратора
@dp.message(Command("send"))
async def cmd_send_to_user(message: Message):
if message.from_user.id != ADMIN_ID:
return
try:
args = message.text.split(maxsplit=2)
if len(args) < 3:
await message.answer("❌ Формат: /send ID ТЕКСТ")
return
target_id = int(args[1])
text_to_send = args[2]
await bot.send_message(chat_id=target_id, text=f"✉️ **Сообщение от разработчика:**\n\n{text_to_send}")
await message.answer(f"✅ Отправлено пользователю {target_id}")
logger.info(f"Админ отправил сообщение для {target_id}: {text_to_send}")
except ValueError:
await message.answer("❌ ID должен быть числом.")
except Exception as e:
await message.answer(f"❌ Ошибка отправки: {e}")
logger.error(f"Не удалось отправить сообщение от админа к {target_id}: {e}")
Так же я добавил телеметрию. Все что делает пользователь в боте отправляется в терминальный лог. Не знаю, просто рекомендую убрать если это кажется не конфиденциальным. Ну а кому важно как работает бот можете оставить. Все в свободном доступе.
Полный исходный код с зависимости на моем github.
Ссылка на github: https://github.com/dkrunkeevich/password-security-bot
p.p.s Файл нужно открывать только с помощью cmd а не двойным кликом иначе скрипт не сработает(Не могу понять причину почему, может вы напишите а?)

























