Пытаюсь написать бота для игры в fuck, marry, kill. Как только запускаешь бота локально, он сразу же прекращает работу с сообщением: Procces finished with exit code 0. Как устранить данную проблему?
import logging
import random
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.middlewares.logging import LoggingMiddleware
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
from aiogram.utils import executor
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.dispatcher import FSMContext
from aiogram.contrib.fsm_storage.memory import MemoryStorage
API_TOKEN = 'TOKEN'
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(name)
bot = Bot(token=API_TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
dp.middleware.setup(LoggingMiddleware())
class GameStates(StatesGroup):
waiting_for_names = State()
waiting_for_mode = State()
waiting_for_action = State()
all_names = []
@dp.message_handler(commands=['start'])
async def send_welcome(message: types.Message):
logger.info(f"User {message.from_user.id} started the bot.")
await GameStates.waiting_for_names.set()
await message.reply("Привет! Давай сыграем в Fuck, Marry, Kill. Введи три имени через запятую:")
@dp.message_handler(state=GameStates.waiting_for_names)
async def process_names(message: types.Message, state: FSMContext):
logger.info(f"Processing names from user {message.from_user.id}")
global all_names
names = [name.strip() for name in message.text.split(',')]
if len(names) != 3:
await message.reply("Пожалуйста, введите ровно три имени, разделенных запятыми.")
return
all_names.extend(names)
await state.update_data(names=names)
keyboard = InlineKeyboardMarkup(row_width=2)
keyboard.add(
InlineKeyboardButton("Использовать свои имена", callback_data='own'),
InlineKeyboardButton("Случайные имена", callback_data='random')
)
await message.reply("Выберите режим игры:", reply_markup=keyboard)
await GameStates.waiting_for_mode.set()
@dp.callback_query_handler(state=GameStates.waiting_for_mode)
async def process_mode(callback_query: types.CallbackQuery, state: FSMContext):
logger.info(f"User {callback_query.from_user.id} selected mode {callback_query.data}")
user_data = await state.get_data()
names = user_data['names']
if callback_query.data == 'random':
if len(all_names) < 3:
await bot.send_message(callback_query.from_user.id,
"Недостаточно имен для выбора случайных. Пожалуйста, добавьте еще имена.")
await state.finish()
return
names = random.sample(all_names, 3)
await state.update_data(names=names)
keyboard = InlineKeyboardMarkup(row_width=3)
keyboard.add(
InlineKeyboardButton("Fuck", callback_data='fuck'),
InlineKeyboardButton("Marry", callback_data='marry'),
InlineKeyboardButton("Kill", callback_data='kill')
)
await bot.send_message(callback_query.from_user.id, f"Что ты выберешь для {names[0]}?", reply_markup=keyboard)
await state.update_data(current_index=0)
await GameStates.waiting_for_action.set()
@dp.callback_query_handler(state=GameStates.waiting_for_action)
async def process_action(callback_query: types.CallbackQuery, state: FSMContext):
logger.info(f"User {callback_query.from_user.id} selected action {callback_query.data}")
user_data = await state.get_data()
names = user_data['names']
current_index = user_data['current_index']
actions = user_data.get('actions', {})
actions[names[current_index]] = callback_query.data
await state.update_data(actions=actions)
current_index += 1
if current_index < len(names):
await state.update_data(current_index=current_index)
keyboard = InlineKeyboardMarkup(row_width=3)
remaining_actions = {'fuck', 'marry', 'kill'} - set(actions.values())
for action in remaining_actions:
keyboard.add(InlineKeyboardButton(action.capitalize(), callback_data=action))
await bot.send_message(callback_query.from_user.id, f"Что ты выберешь для {names[current_index]}?",
reply_markup=keyboard)
else:
results = "\n".join([f"{name}: {action}" for name, action in actions.items()])
await bot.send_message(callback_query.from_user.id, f"Игра закончена! Вот твои результаты:\n{results}")
await state.finish()
await callback_query.answer()
if name == 'main':
try:
logger.info("Starting bot")
executor.start_polling(dp, skip_updates=True)
except Exception as e:
logger.error(f"Error occurred: {e}")