Помогите с реферальной системой для администрации

Всем привет. Начал писать реферальную систему для администратора. Зачем она нужна? Ответ - когда закупаешь рекламу своего бота у многих каналов/и тд ресурсов, то надо следить сколько зашло с того или иного ресурса. Вот я написал код, но он не работает как надо. Ссылки то он создает, записывает в бд sqlite3, но при команде /show_links показывает ссылку и ноль переходов, но уже зашло 2 человека.

Помогите пожалуйста, я хз как решить. (добавил ниже фулл функцию)

    conn = sqlite3.connect('link.db')
cursor = conn.cursor()
cursor.execute('''
    CREATE TABLE IF NOT EXISTS clicks (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        link_id INTEGER NOT NULL,
        user_id INTEGER NOT NULL,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    )
''')
conn.commit()
conn.close()

@dp.message_handler(commands=["ref"])
async def get_ref(message: types.Message):
    if message.from_user.id in admin_id:
        
        user_id = message.from_user.id
        link = await get_start_link(user_id, encode=True)
        url = link
        description = 'Реферальная ссылка'
        with sqlite3.connect('link.db') as conn:
            cursor = conn.cursor()
            cursor.execute("INSERT INTO links (url, description) VALUES (?, ?)", (url, description))
            conn.commit()
        await message.answer(f"Ваша реф. ссылка {link}")
    else:
        await message.answer("Извините, только администратор может создавать реферальные ссылки.")
@dp.message_handler(commands=["start"])
async def handler(message: types.Message):
    args = message.get_args()
    reference = decode_payload(args)
    await message.answer(f"Ваш реферал {reference}")

with sqlite3.connect('link.db') as conn:
  
    cursor = conn.cursor()
    cursor.execute('''
    CREATE TABLE IF NOT EXISTS links (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        url TEXT NOT NULL,
        description TEXT NOT NULL
    )
''')
    rows = cursor.fetchall()
    print(rows)
async def add_click(link_id: int, user_id: int):
    with sqlite3.connect('link.db') as conn:
        cursor = conn.cursor()
        cursor.execute("INSERT INTO clicks (link_id, user_id) VALUES (?, ?)", (link_id, user_id))
        conn.commit()
@dp.callback_query_handler(lambda c: c.data and c.data.startswith('ref'))
async def process_callback_reflink(callback_query: types.CallbackQuery):
    link_id = callback_query.data.split(':')[1]
    await add_click(link_id)
    await bot.answer_callback_query(callback_query.id)
    await bot.send_message(callback_query.from_user.id, "Вы перешли по ссылке. Спасибо!")

@dp.callback_query_handler(lambda c: c.data and c.data.startswith('link'))
async def link_clicked(callback_query: CallbackQuery, state: FSMContext):
    
    link_id = int(callback_query.data.split('_')[1])
    with sqlite3.connect('link.db') as conn:
        cursor = conn.cursor()
        cursor.execute("SELECT * FROM links WHERE id=?", (link_id,))
        link = cursor.fetchone()

        if link:
            
            user_id = callback_query.from_user.id
            await add_click(link_id, user_id)
            conn.commit()

            url = link[1]
            await bot.answer_callback_query(callback_query.id, url)
            await bot.send_message(callback_query.from_user.id, f"Ссылка: {url}")
        else:
            await bot.answer_callback_query(callback_query.id, "Ссылка не найдена")

@dp.message_handler(commands=["show_links"])
async def show_links(message: types.Message):
    if message.from_user.id in admin_id:
        with sqlite3.connect('link.db') as conn:
            cursor = conn.cursor()
            cursor.execute("SELECT * FROM links")
            links = cursor.fetchall()

            if len(links) == 0:
                await message.answer("Список ссылок пуст.")
                return

            text = "Список ссылок:\n"
            for link in links:
                cursor.execute("SELECT COUNT(*) FROM clicks WHERE link_id=?", (link[0],))
                count = cursor.fetchone()[0]
                text += f"{link[1]}: {link[2]} ({count} переходов)\n"

            await message.answer(text)
    else:
        await message.answer("Извините, только администратор может просматривать список ссылок.")
if name == 'main':
    executor.start_polling(dp, skip_updates=True)

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