Проблема с охватом аргуемта текстового сообщения '+ <кол-во денег >

Мне нужно написать переменую которая охватывает аргуемт текстового сообщения '+ <кол-во денег >

Но ,проблема заключается в том , что переменая которую я написал, она работает, но передаёт лишь 1 денежку, а мне нужно написаную мной сколько переводить.

elif '+' in message.text:
        if message.text.split()[1].replace(' ', '').isdigit():
            transfer_cash = message.text.split()[1].replace(' ', '').isdigit()
            if message.reply_to_message is None:
                pass
            else:
                if message.reply_to_message.from_user.is_bot == False:
                    if message.reply_to_message.from_user.id == id:
                        pass
                    else:
                        for trans_db in sql.execute(f"SELECT Money FROM User WHERE IdUser = {id}"):
                            me_transfer_money = trans_db[0]
                            sql.execute(f"SELECT IdUser FROM User WHERE IdUser = {message.reply_to_message.from_user.id}")
                            if sql.fetchone() is None:
                            else:
                                for tr_db in sql.execute(f"SELECT Money FROM User WHERE IdUser = {message.reply_to_message.from_user.id}"):
                                    others_transfer_money = tr_db[0]
                                    if me_transfer_money >= message.text.split()[1].replace(' ', '').isdigit():
                                        sql.execute(f"UPDATE User SET Money = {me_transfer_money - transfer_cash} WHERE IdUser = {id}")
                                        db.commit()
                                        sql.execute(f"UPDATE User SET Money = {others_transfer_money + transfer_cash} WHERE IdUser = {message.reply_to_message.from_user.id}")
                                        db.commit()
                                        await bot.send_message(message.chat.id , 'Чек перевода:\nСтатус: Успешный\nОтправитель: '+ message.from_user.first_name +'\nПолучитель: '+ message.reply_to_message.from_user.first_name +'\nСумма: '+ str(transfer_cash))

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

Автор решения: Евгений

Для начала пара замечаний:

  1. message.text.split()[1].replace(' ', '') эквивалентна message.text.split()[1], т.к. ни один элемент результата split() не содержит пробелов

  2. Если вы проводите операции перевода денег, то операции списания и зачисления нужно коммитить одновременно, а не раздельно. Вместо этого фрагмента:

sql.execute(f"UPDATE User SET Money = {me_transfer_money - transfer_cash} WHERE IdUser = {id}")
db.commit()
sql.execute(f"UPDATE User SET Money = {others_transfer_money + transfer_cash} WHERE IdUser = {message.reply_to_message.from_user.id}")
db.commit()

лучше использовать:

sql.execute(f"UPDATE User SET Money = {me_transfer_money - transfer_cash} WHERE IdUser = {id}")
sql.execute(f"UPDATE User SET Money = {others_transfer_money + transfer_cash} WHERE IdUser = {message.reply_to_message.from_user.id}")
db.commit()

В случае ошибки при выполнении запроса коммит будет отменён полностью. А при вашем подходе списание может пройти успешно, а при коммите зачисления произойдёт ошибка, и деньги, получается, исчезли.
3. Если для работы с базами данных вы используете sqlite3, то вместо

sql.execute(f'SELECT .... WHERE id = {id}')

желательно использовать

sql.execute('SELECT .... WHERE id = ?', (id,))

Об этом говорится в документации sqlite3. Такой способ подстановки безопаснее, т.к. проверяет значения на валидность типа данных.

А теперь то, что и стало причиной неверной работы. Вы неправильно задали значение transfer_cash. Метод isdigit() возвращает булево значение, так что для корректной работы вместо:

transfer_cash = message.text.split()[1].replace(' ', '').isdigit()

нужно написать:

transfer_cash = float(message.text.split()[1])

либо, если у вас деньги - целочисленная величина (а вдруг?), то:

transfer_cash = int(message.text.split()[1])
→ Ссылка