@mudiikk

Можете помочь с определением пользователя?

Разрабатываю телеграм бота на пайтон используя библиотеку айограм. Есть следующий код:
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: добавил комментарии
  • Вопрос задан
  • 151 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы