Разрабатываю телеграм бота на пайтон используя библиотеку айограм. Есть следующий код:
import logging
from aiogram import Bot, Dispatcher, executor, types
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import State, StatesGroup
from peewee import *
logging.basicConfig(level=logging.INFO)
bot = Bot(token="*******")
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
db = SqliteDatabase("bot6.db")
class User(Model):
chat_id = IntegerField(primary_key=True)
username = CharField(unique=True, max_length=8)
money = IntegerField(default=0)
kill = IntegerField(default=0)
lvl = IntegerField(default=1)
position = CharField(default="Спавн")
bet = DecimalField(null=True)
training_count = IntegerField(default=0)
gym_xp = IntegerField(default=0)
class Meta:
database = db
# Создание таблицы
db.create_tables([User])
# Определение состояний для регистрации
class RegisterStates(StatesGroup):
waiting_for_username = State()
# Обработка команды /start
@dp.message_handler(commands=["start"])
async def cmd_start(message: types.Message, state: FSMContext):
# Получение пользователя по идентификатору чата
user = User.get_or_none(chat_id=message.chat.id)
if user:
await message.reply("Вы уже зарегистрированы.")
else:
await message.reply("Для регистрации введите ваш ник.")
# Отправка запроса на ник
await RegisterStates.waiting_for_username.set()
@dp.message_handler(state=RegisterStates.waiting_for_username)
async def process_username(message: types.Message, state: FSMContext):
# Получение ника пользователя
username = message.text.strip()
# Проверка, существует ли уже пользователь с таким ником
existing_user = User.get_or_none(username=username)
if existing_user:
await message.reply("Этот ник уже занят. Пожалуйста, выберите другой ник.")
return
# Создание нового пользователя
user = User(chat_id=message.chat.id, username=username)
user.save()
await message.reply("Регистрация прошла успешно!")
# Создание reply keyboard
keyboard = ReplyKeyboardMarkup(resize_keyboard=True)
buttons = [
KeyboardButton(" Профиль"),
KeyboardButton("Клик"),
KeyboardButton(" Карта"),
KeyboardButton(" Компьютер")
]
keyboard.add(*buttons)
await message.reply("Выберите действие:", reply_markup=keyboard)
await state.finish()
@dp.message_handler(text=" Профиль")
async def cmd_profile(message: types.Message):
# Получение пользователя
user = User.get_or_none(chat_id=message.chat.id)
if user:
profile_text = f"Ник: {user.username}\nКоличество денег: {user.money}\nKill: {user.kill}\nУровень: {user.lvl}"
else:
profile_text = "Профиль пользователя не найден."
await message.reply(profile_text)
if __name__ == "__main__":
executor.start_polling(dp, skip_updates=True)
Регистрирую пользователя, пишет что регистрация прошла успешно, хочу зайти в профиль но пишет мол "Профиль не найден" и при написании /start опять требуют зарегистрироваться. При этом ник который я вводил становится занят. Пробовал для определения пользователя использовать user id, та же проблема
p.s: добавил комментарии