import logging from aiogram import Bot , Dispatcher , types from aiogram . filters import Command from aiogram . types import ReplyKeyboardMarkup , KeyboardButton from aiogram . utils . keyboard import ReplyKeyboardBuilder from aiogram import F API_TOKEN = '' # Логирование logging . basicConfig ( level = logging . INFO ) bot = Bot ( token = API_TOKEN ) dp = Dispatcher ( ) # Хранилище users_data = { } # Клавиатура def get_main_menu ( ) : keyboard = ReplyKeyboardBuilder ( ) keyboard . button ( text = 'Моя информация' ) keyboard . button ( text = 'Майнинг ферма' ) keyboard . button ( text = 'Дача' ) keyboard . button ( text = 'Заработать деньги' ) return keyboard . as_markup ( resize_keyboard = True ) def init_user ( user_id ) : if user_id not in users_data : users_data [ user_id ] = { 'balance' : 1000 , 'farms' : 0 , 'houses' : 0 , 'farm_income' : 10 , 'house_income' : 50 , 'farm_price' : 500 , 'house_price' : 1000 } @dp.message ( Command ( "start" ) ) async def send_welcome ( message : types . Message ) : init_user ( message . from_user . id ) await message . answer ( f"Привет,{message.from_user.first_name}! Добро пожаловать в экономическую игру. У тебя на счету 1000 монет." , reply_markup = get_main_menu ( ) ) @dp.message ( F . text == 'Моя информация' ) async def show_info ( message : types . Message ) : user_id = message . from_user . id init_user ( user_id ) data = users_data [ user_id ] await message . answer ( f"Твой баланс:{data['balance']}монет\n" f"Майнинг ферм:{data['farms']}(доход{data['farm_income']}монет в час с каждой)\n" f"Дач:{data['houses']}(доход{data['house_income']}монет в час с каждой)" ) @dp.message ( F . text == 'Майнинг ферма' ) async def mining_farm ( message : types . Message ) : user_id = message . from_user . id init_user ( user_id ) data = users_data [ user_id ] if data [ 'balance' ] >= data [ 'farm_price' ] : data [ 'balance' ] -= data [ 'farm_price' ] data [ 'farms' ] += 1 data [ 'farm_price' ] += 200 # Увеличиваем цену на следующую ферму await message . answer ( f"Ты купил майнинг ферму! Теперь у тебя{data['farms']}ферм(ы). Следующая ферма стоит{data['farm_price']}монет." ) else : await message . answer ( f"У тебя недостаточно средств для покупки фермы. Текущая цена фермы:{data['farm_price']}монет." ) @dp.message ( F . text == 'Дача' ) async def buy_house ( message : types . Message ) : user_id = message . from_user . id init_user ( user_id ) data = users_data [ user_id ] if data [ 'balance' ] >= data [ 'house_price' ] : data [ 'balance' ] -= data [ 'house_price' ] data [ 'houses' ] += 1 data [ 'house_price' ] += 500 # Увеличиваем цену на следующую дачу await message . answer ( f"Ты купил дачу! Теперь у тебя{data['houses']}дач(и). Следующая дача стоит{data['house_price']}монет." ) else : await message . answer ( f"У тебя недостаточно средств для покупки дачи. Текущая цена дачи:{data['house_price']}монет." ) @dp.message ( F . text == 'Заработать деньги' ) async def earn_money ( message : types . Message ) : user_id = message . from_user . id init_user ( user_id ) data = users_data [ user_id ] income = data [ 'farms' ] * data [ 'farm_income' ] + data [ 'houses' ] * data [ 'house_income' ] if income > 0 : data [ 'balance' ] += income await message . answer ( f"Ты заработал{income}монет! Твой текущий баланс:{data['balance']}монет." ) else : await message . answer ( "У тебя пока нет ни ферм, ни дач для получения дохода." ) async def main ( ) : await dp . start_polling ( bot ) if __name__ == '__main__' : import asyncio asyncio . run ( main ( ) )