Для реализации реферальной системы в 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, 'Привет! Вы успешно зарегистрировались с реферальной ссылкой.')
```
Теперь каждый раз, когда кто-то запускает бота по вашей ссылке, вы будете получать сообщение с информацией о новом реферале.