Deep linking aiogram

У меня есть код:

from aiogram import types

@dp.message_handler(commands=["ref"])
async def get_ref(message: types.Message):
  link = await get_start_link(str(message.from_user.username), encode=True)
  await message.answer(f"Ваша реф. ссылка {link}")

@dp.message_handler(commands=["start"])
async def handler(message: types.Message):
    args = message.get_args()
    reference = decode_payload(args)
    await message.answer(f"Ваш реферал {reference}")

Он работает, но я хочу что бы и создателю ссылки писало "Кто то перешёл пи вашей ссылке". Как это сделать?


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

Автор решения: QWERTYZ PB
  1. Наверняка у тебя есть файл config.py. Если нет, то рекомендую создать.
  2. Помести туда переменную bot = Bot(token="TOKEN")
  3. Так же можно создать отдельный файл (пускай это будет bot_comm.py), который будет отвечать за отправку сообщения и написать там такую функцию:
    from config import bot
    
    async def send_message_to_user(message, user_id):
        await bot.send_message(chat_id=user_id, text=message)
  1. Советую делать Deep link не с message.from_user.username, а message.from_user.id
  2. Тогда при распаковке decode_payload() мы получим id человека, которому сможем отправить сообщение.

Тогда ваш код будет выглядеть так:

from bot_comm import send_message_to_user
from aiogram import types

@dp.message_handler(commands=["ref"])
async def get_ref(message: types.Message):
  link = await get_start_link(str(message.from_user.id), encode=True)
  await message.answer(f"Ваша реф. ссылка {link}")

@dp.message_handler(commands=["start"])
async def handler(message: types.Message):
    args = message.get_args()
    id_from_referencer = decode_payload(args)

    await send_message_to_user(f"{message.from_user.username} перешел по вашей ссылке!", id_from_referencer)

P.s. Писал по памяти, если будут вопросы - пиши

→ Ссылка