Как реализовать реферальную систему в aiogram версии 3?

Как можно изменить код, чтобы бот отправлял вам сообщение, когда кто-то запускает его по вашей ссылке?
  • 6 ноября 2023 г. 17:10
Ответы на вопрос 1
Для реализации реферальной системы в Aiogram версии 3 вы можете использовать встроенные средства работы с базой данных, например, SQLite или PostgreSQL.

Ниже представлен пример кода для реализации реферальной системы на основе SQLite:

```python
import sqlite3
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor

# Создание базы данных SQLite
conn = sqlite3.connect('referrals.db')
cursor = conn.cursor()

# Создание таблицы рефералов
cursor.execute('''
    CREATE TABLE IF NOT EXISTS referrals (
        user_id INTEGER PRIMARY KEY,
        referrer_id INTEGER
    )
''')

# Инициализация бота и диспетчера
bot = Bot(token='YOUR_TOKEN')
dp = Dispatcher(bot)

@dp.message_handler(commands=['start'])
async def start(message: types.Message):
    # Получение кода реферера из сообщения
    referrer_code = message.get_args()
    if referrer_code:
        try:
            referrer_id = int(referrer_code)
            # Добавление записи о реферале в базу данных
            cursor.execute('INSERT INTO referrals VALUES (?, ?)', (message.from_user.id, referrer_id))
            conn.commit()
        except ValueError:
            pass

    await bot.send_message(message.from_user.id, 'Привет! Вы успешно зарегистрировались с реферальной ссылкой.')

@dp.message_handler(commands=['stats'])
async def stats(message: types.Message):
    # Получение общего количества рефералов пользователя
    cursor.execute('SELECT COUNT(*) FROM referrals WHERE referrer_id=?', (message.from_user.id,))
    total_referrals = cursor.fetchone()[0]

    await bot.send_message(message.from_user.id, f'Ваше общее количество рефералов: {total_referrals}')

@dp.message_handler(commands=['notify'])
async def notify(message: types.Message):
    # Получение всех рефералов пользователя
    cursor.execute('SELECT user_id FROM referrals WHERE referrer_id=?', (message.from_user.id,))
    referrals = cursor.fetchall()

    for referral in referrals:
        user_id = referral[0]
        await bot.send_message(user_id, 'Бот был запущен по вашей реферальной ссылке.')

# Запуск бота
executor.start_polling(dp, skip_updates=True)
```

В данном примере используется база данных SQLite для хранения информации о рефералах. При вызове команды `/start` бот проверяет наличие кода реферера и добавляет запись о реферале в базу данных. Команда `/stats` выводит общее количество рефералов пользователя, а команда `/notify` отправляет сообщение каждому рефералу.

Чтобы бот отправлял вам сообщение, когда кто-то запускает его по вашей ссылке, вам необходимо добавить обработчик команды `/start` и изменить код следующим образом:

```python
@dp.message_handler(commands=['start'])
async def start(message: types.Message):
    referrer_code = message.get_args()
    if referrer_code:
        try:
            referrer_id = int(referrer_code)
            cursor.execute('INSERT INTO referrals VALUES (?, ?)', (message.from_user.id, referrer_id))
            conn.commit()

            # Отправка сообщения рефереру
            await bot.send_message(referrer_id, f'У вас новый реферал: {message.from_user.id}')
        except ValueError:
            pass

    await bot.send_message(message.from_user.id, 'Привет! Вы успешно зарегистрировались с реферальной ссылкой.')
```

Теперь каждый раз, когда кто-то запускает бота по вашей ссылке, вы будете получать сообщение с информацией о новом реферале.
Похожие вопросы