import os import asyncio import logging from datetime import datetime from aiogram import Bot, Dispatcher, types from aiogram.enums.dice_emoji import DiceEmoji from aiogram import F, html from aiogram.types import Message from aiogram.filters import Command from aiogram.utils.formatting import Text, Bold, as_list, as_marked_section, as_key_value, HashTag from aiogram.enums import ParseMode from aiogram.client.default import DefaultBotProperties from config_reader import config # Включаем логирование, чтобы не пропустить важные сообщения logging.basicConfig(level=logging.INFO) # Для записей с типом Secret* необходимо # вызывать метод get_secret_value(), # чтобы получить настоящее содержимое вместо '*******' bot = Bot( token=config.bot_token.get_secret_value(), default=DefaultBotProperties( parse_mode=ParseMode.HTML # тут ещё много других интересных настроек )) # Объект бота напрямую из .env # bot = Bot(token=os.getenv("BOT_TOKEN")) # Диспетчер dp = Dispatcher() dp["started_at"] = datetime.now().strftime("%Y-%m-%d %H:%M") # Хэндлер на команду /start @dp.message(Command("start")) async def cmd_start(message: types.Message): # await message.answer("Привет! ") content = as_list( Text( "Привет! ", Bold(message.from_user.first_name) ), as_marked_section( Bold("Я умею:"), "/test1 - Отвечу Test1", "/answer - Просто отвечу", "/reply - Отвечу ответом", "/name - Поприветствую тебя по Имени и Фамилии", "/aboute - Дам тебе характеристику", "/dice - Подкину для тебя кубик, загадай число ;)", marker="✅ ", ), as_marked_section( Bold("Failed:"), "Не смогу назвать номер твоего телефона :( )", marker="❌ ", ), HashTag("#я"), # Text( # "Номер телефона, ", # Bold(message.contact.phone_number) # ) ) await message.answer( **content.as_kwargs() ) # Хэндлер на команду /test1 @dp.message(Command("test1")) async def cmd_test1(message: types.Message): await message.reply("Test 1") # Хэндлер на команду /test2 # Без декоратора, т.к. регистрируется ниже в функции main() async def cmd_test2(message: types.Message): await message.reply("Test 2") @dp.message(Command("answer")) async def cmd_answer(message: types.Message): await message.answer("Это простой ответ") # Хэндлер на команду /name @dp.message(Command("name")) async def cmd_name(message: Message): await message.answer( f"Доброго дня тебе, {html.bold(html.quote(message.from_user.full_name))}", parse_mode=ParseMode.HTML # f"Мой ник, {html.bold(html.quote(message.from_user.username))}", # parse_mode=ParseMode.HTML ) @dp.message(Command("aboute")) async def cmd_aboute(message: Message): content = as_list( Text( "User_name, ", Bold(message.from_user.username) ), as_marked_section( Bold("Это Ты:"), "Молодец", "Красава", "Умка", marker="✅ ", ), as_marked_section( Bold("Это точно не ты:"), "Душнила", marker="❌ ", ), HashTag("#характеристика"), # Text( # "Номер телефона, ", # Bold(message.contact.phone_number) # ) ) await message.answer( **content.as_kwargs() ) @dp.message(Command("reply")) async def cmd_reply(message: types.Message): await message.reply('Это ответ с "ответом"') @dp.message(Command("dice")) async def cmd_dice(message: types.Message): await message.answer_dice(emoji=DiceEmoji.DICE) # передача сообщения в другой чат с номером чата -1001826767638 @dp.message(Command("dice2")) async def cmd_dice2(message: types.Message, bot: Bot): await bot.send_dice(-1001826767638, emoji=DiceEmoji.DICE) # запрос даты запуска бота @dp.message(Command("info")) async def cmd_info(message: types.Message, started_at: str): await message.answer(f"Бот запущен {started_at}") # Запуск процесса поллинга новых апдейтов async def main(): # Регистрируем хэндлер cmd_test2 по команде /start dp.message.register(cmd_test2, Command("test2")) # Запускаем бота await dp.start_polling(bot) if __name__ == "__main__": asyncio.run(main())