Не могу сделать телеграмм бота который выводит рандомное число и добавляет его в базу данных python aiogram

Мне нужен Telegram Bot на Python(Aiogram) который выводит рандомное число и добавляет его в БД(ORM PEEWEE). Бот должен выводит сообщение в котором это число и то число которое в БД, то есть при каждом вызове команды бот выводит сообщение с рандомным числом и каждый раз добавляет это рандомное число к тому числу которое в БД и выводит то число из БД в том же сообщении.

Файл main.py

import logging

from peewee import Update
import config

from aiogram import Bot, Dispatcher, executor, types
from cmnd import *
from models import User

bot = Bot(token=config.TOKEN)

dp = Dispatcher(bot)

logging.basicConfig(level=logging.INFO)

@dp.message_handler(commands="start")
async def cmd_start(message: types.Message):
    u, is_created = User.get_or_create(
        tg_id=message.from_user.id,
        defaults={
            'username': message.from_user.username
        })
    await message.answer("СТАРТ.")

@dp.message_handler(commands="test")
async def cmd_test(message: types.Message):
    u  = User.update(
        tg_id=message.from_user.id,
        test_sm=rndm
        ).execute
    await message.reply("Твоя на " + rndm + " см. Теперь твоя " + sm + " см. Поздравляю!")





if __name__ == "__main__":
    # Запуск бота
    executor.start_polling(dp, skip_updates=True)

Файл cmnd.py

import random

from models import User

rndm = str(random.randint(1, 10))

sm = str(User.get(User.test_sm == 0))

Файл models.py

from peewee import Model, CharField, IntegerField, DateTimeField
from config import DB

from datetime import datetime


class BaseModel(Model):
    class Meta:
        database = DB


class User(BaseModel):
    tg_id = IntegerField()
    username = CharField()
    registered = DateTimeField(default=datetime.now)
    test_sm = IntegerField(default=0)
    

# Создание таблиц
DB.create_tables([User, ])

Ответы (1 шт):

Автор решения: Sergey K.

По-видимому, проблема в том, что в модуле cmnd.py единоразово происходит инициализация переменных rndm и sm. Следует вызывать эти функции и инициализировать переменные при каждом вызове команды пользователем.

Предполагаю, что нужно это делать как-то так:

@dp.message_handler(commands="test")
async def cmd_test(message: types.Message):
    import random
    
    # так при каждом вызове будет генерироваться новое число
    rndm = str(random.randint(1, 10))
    # и будет выполняться запрос к бд для получения свежих данных
    u = User.get(User.tg_id = message.from_user.id)
        
    sm = str(u.test_sm)
    
    # потом обновляем данные пользователя
    User.update(tg_id=message.from_user.id, test_sm=rndm).execute()
    
    # возвращаем ответ пользователю
    await message.reply("Твоя на " + rndm + " см. Теперь твоя " + sm + " см. Поздравляю!")
→ Ссылка