Как использовать "message.text" 2 раза в коде? Библиотека Aiogram

@dp.message_handler(text="Promo_Code")
async def promo(message: types.Message):
    if str(message.text) == "#BLAZER":
        await bot.send_message(message.from_user.id, text="Успешно! Ссылка на сборку: \n")
    else:
        await bot.send_message(message.from_user.id, text="Введите действующий промокод. Например: #ABCD")
@dp.message_handler()
async def bot_meesage(message: types.Message):
    if message.chat.type == "private":
        if is_number(message.text):
            message_money = int(message.text)
            if message_money >= 5:
                comment = str(message.from_user.id) + "_" + \
                    str(random.randint(1000, 9999))
                bill = p2p.bill(amount=message_money,
                                lifetime=15, comment=comment)
                db.add_check(message.from_user.id, message_money, bill.bill_id)

                await bot.send_message(message.from_user.id, f"Вам нужно отправить {message_money} руб. на на счет QIWI\nСсылка: {bill.pay_url}\n Указав комментарий к оплате: {comment}", reply_markup=buy_menu(url=bill.pay_url, bill=bill.bill_id))
            else:
                await bot.send_message(message.from_user.id, "Минимальная сумма для пополнения 5 руб.")
        else:
            await bot.send_message(message.from_user.id, "Введите целое число")

Если пользователь напишет например "#BALZER", то выполняется почему-то второй хендлер, как сделать так, чтобы "message.text" как отделялся от хендлеров?

from aiogram import executor, Bot, Dispatcher, types
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton, ReplyKeyboardRemove
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from Database import Database
from pyqiwip2p import QiwiP2P
import os
import random

Это все библиотеки.


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

Автор решения: floydpower

Можно отфильтровать хэндлер с помощью анонимной функции lambda:

@dp.message_handler(lambda mes: mes.text == '#BLAZER')
async def promo(message: types.Message):
    if str(message.text) == "#BLAZER":
        await bot.send_message(message.from_user.id, text="Успешно! Ссылка на сборку: \n")
    else:
        await bot.send_message(message.from_user.id, text="Введите действующий промокод. Например: #ABCD")

Такие же действия выполнить и со вторым хэндлером. Например, если у вас кнопка "Пополнить баланс":

@dp.message_handler(lambda mes: mes.text == 'Пополнить баланс')
async def bot_meesage(message: types.Message):
    if message.chat.type == "private":
        if is_number(message.text):
            message_money = int(message.text)
            if message_money >= 5:
                comment = str(message.from_user.id) + "_" + \
                    str(random.randint(1000, 9999))
                bill = p2p.bill(amount=message_money,
                                lifetime=15, comment=comment)
                db.add_check(message.from_user.id, message_money, bill.bill_id)

                await bot.send_message(message.from_user.id, f"Вам нужно отправить {message_money} руб. на на счет QIWI\nСсылка: {bill.pay_url}\n Указав комментарий к оплате: {comment}", reply_markup=buy_menu(url=bill.pay_url, bill=bill.bill_id))
            else:
                await bot.send_message(message.from_user.id, "Минимальная сумма для пополнения 5 руб.")
        else:
            await bot.send_message(message.from_user.id, "Введите целое число")
→ Ссылка
Автор решения: Four
@dp.message_handler(lambda mes: mess.text.startswith('Promo_Code'))
async def promo(message: types.Message):
    if str(message.text) == "#BLAZER":
        await bot.send_message(message.from_user.id, text="Успешно! Ссылка на сборку: \n")
    else:
        await bot.send_message(message.from_user.id, text="Введите действующий промокод. Например: #ABCD")

Здесь мы используем startswith() что бы проверить что строка начинается с Promo_Code

→ Ссылка