import logging
import random
from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update
from telegram.ext import Application, CommandHandler, CallbackQueryHandler, CallbackContext
# Включаем логирование
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
level=logging.INFO)
logger = logging.getLogger(__name__)
# Состояние игры (простой пример)
user_data = {}
# Главное меню (включая игровые действия)
def get_main_menu():
keyboard = [
[InlineKeyboardButton("Собрать ресурсы", callback_data='collect_resources')],
[InlineKeyboardButton("Улучшить персонажа", callback_data='upgrade_character')],
[InlineKeyboardButton("Сразиться с врагом", callback_data='fight_enemy')],
[InlineKeyboardButton("Награды", callback_data='rewards')],
[InlineKeyboardButton("Рефералы", callback_data='referrals')],
[InlineKeyboardButton("Колесо Фортуны", callback_data='fortune')]
]
return InlineKeyboardMarkup(keyboard)
# Инициализация игрока
def init_user(user_id):
if user_id not in user_data:
user_data[user_id] = {
'resources': 0,
'level': 1,
'health': 100
}
# Функция для начала игры
async def start(update: Update, context: CallbackContext):
user_id = update.message.from_user.id
init_user(user_id)
await update.message.reply_text('Добро пожаловать в мини-игру! Выберите действие:', reply_markup=get_main_menu())
# Функция для сбора ресурсов
async def collect_resources(update: Update, context: CallbackContext):
user_id = update.callback_query.from_user.id
init_user(user_id)
resources_collected = random.randint(5, 20)
user_data[user_id]['resources'] += resources_collected
await update.callback_query.answer()
await update.callback_query.edit_message_text(
f"Вы собрали {resources_collected} ресурсов! У вас теперь {user_data[user_id]['resources']} ресурсов."
)
# Функция для улучшения персонажа
async def upgrade_character(update: Update, context: CallbackContext):
user_id = update.callback_query.from_user.id
init_user(user_id)
if user_data[user_id]['resources'] < 10:
await update.callback_query.answer()
await update.callback_query.edit_message_text(
"Недостаточно ресурсов для улучшения! Нужно минимум 10 ресурсов."
)
else:
user_data[user_id]['resources'] -= 10
user_data[user_id]['level'] += 1
await update.callback_query.answer()
await update.callback_query.edit_message_text(
f"Ваш персонаж улучшен! Уровень: {user_data[user_id]['level']}. Ресурсы: {user_data[user_id]['resources']}"
)
# Функция для сражения с врагом
async def fight_enemy(update: Update, context: CallbackContext):
user_id = update.callback_query.from_user.id
init_user(user_id)
if user_data[user_id]['health'] <= 0:
await update.callback_query.answer()
await update.callback_query.edit_message_text(
"Ваш персонаж мертв и не может сражаться. Сначала улучшите его!"
)
else:
enemy_health = random.randint(20, 50)
damage_dealt = random.randint(10, 30)
user_data[user_id]['health'] -= damage_dealt
if user_data[user_id]['health'] <= 0:
await update.callback_query.answer()
await update.callback_query.edit_message_text(
f"Вы сразились с врагом! Враг нанёс {damage_dealt} урона. Вы погибли. Ваш уровень: {user_data[user_id]['level']}. "
"Начните заново!"
)
user_data[user_id]['health'] = 100 # сбрасываем здоровье
else:
await update.callback_query.answer()
await update.callback_query.edit_message_text(
f"Вы сразились с врагом! Враг нанёс {damage_dealt} урона. Ваше здоровье: {user_data[user_id]['health']}."
)
# Обработка нажатий на кнопки меню
async def button(update: Update, context: CallbackContext):
query = update.callback_query
await query.answer()
if query.data == 'rewards':
await query.edit_message_text("В этом разделе будут отображаться награды, которые вы можете получить.")
elif query.data == 'referrals':
await query.edit_message_text("В этом разделе вы можете пригласить друзей!")
elif query.data == 'fortune':
result = random.choice(['Вы выиграли бонус!', 'Повезет в следующий раз!', 'Поздравляем, получите награду!'])
await query.edit_message_text(f"Результат Колеса Фортуны: {result}")
elif query.data == 'collect_resources':
await collect_resources(update, context)
elif query.data == 'upgrade_character':
await upgrade_character(update, context)
elif query.data == 'fight_enemy':
await fight_enemy(update, context)
# Основная функция
def main():
application = Application.builder().token("ваш_токен").build()
# Команды
application.add_handler(CommandHandler("start", start))
# Обработчики для кнопок меню
application.add_handler(CallbackQueryHandler(button))
# Запуск бота
application.run_polling()
if __name__ == '__main__':
main()