Помогите сделать реф систему для ТГ бота | End Way - форум программирования и сливов различных скриптов
  • Присоединяйтесь к нам в телеграм канал! EndWay канал | EndSoft канал | EWStudio канал
  • Хочешь поставить скрипт, но не умеешь?
    А может ты хочешь свой скрипт на основе слитого?

    Тогда добро пожаловать в нашу студию разработки!

    Телеграм бот: EWStudioBot
    Телеграм канал: EWStudio

Помогите сделать реф систему для ТГ бота

гуляй Вася

Джун
Автор темы
28 Ноя 2023
8
3
0
Привет, кто можем описать в общих чертах как сделать нормальную реф систему для тг бота на Aiogram 2. Нужно чтобы для каждого нового пользователя создавалась уникальная реф ссылка, и когда другой человек по ней заходит в бота, то он зачислялся рефералом.
 

blackrtruth

Главный модератор
EndWay.su
2 Июл 2023
98
274
53
генерируешь любую комбинацию символов (окончание ссылки), добавляешь ее в таблицу базы данных с ключом айди создателя
реферальная ссылка должна быть вида t.me/юзер бота?start=окончание
в хендлере команды старт достаешь из message.text окончание ссылки, сверяешь с бд и понимаешь, реферал человек или нет
 
Like
  • 1
Реакции: 1 user

bandicuttt

Сеньор
int('xyi')
8 Янв 2023
235
64
28
Код:
class ExistsUserMiddleware(BaseMiddleware):
    async def __call__(self, handler, event, data):
        this_user = data.get("event_from_user")
        if not this_user.is_bot:
            get_user = get_userx(user_id=this_user.id)
            user_id = this_user.id
            update_userx(user_id=user_id, last_activity=get_unix())
            user_login = this_user.username
            user_name = clear_html(this_user.first_name)
            user_surname = clear_html(this_user.last_name)
            user_fullname = clear_html(this_user.first_name)
            user_language = this_user.language_code
            if user_login is None: user_login = ""
            if user_name is None: user_name = ""
            if user_surname is None: user_surname = ""
            if user_fullname is None: user_fullname = ""
            if user_language != "ru": user_language = "en"
            if len(user_surname) >= 1: user_fullname += f" {user_surname}"
            if get_user is None:
                add_userx(user_id, user_login.lower(), user_name, user_surname, user_fullname)
                bot = data.get('bot')
                await bot.send_message(
                    chat_id=ADMIN_CHAT_ID,
                    text=ded(
                        f'''
                        🐘 Новый пользователь <a href="t.me/{user_login.lower()}">{user_id}</a>
                        '''
                    ),
                    disable_web_page_preview=True
                )
                
                try:
                    message = data.get('event_update').message.text.split(' ')
                except:
                    await preview_func(
                        bot=data.get('bot'),
                        user_id=user_id
                    )
                    return await handler(event, data)
                
                if len(message) > 1:
                    try:
                        referal_id = int(message[1])
                        bot: Bot = data.get('bot')
                    except TypeError:
                        pass
                    else:
                        if get_userx(user_id=referal_id) and this_user.id != referal_id:
                            add_referalx(
                                referrer_id=this_user.id,
                                referred_id=referal_id,
                            )
            else:
                if user_name != get_user['user_name']:
                    update_userx(get_user['user_id'], user_name=user_name)
                if user_surname != get_user['user_surname']:
                    update_userx(get_user['user_id'], user_surname=user_surname)
                if user_fullname != get_user['user_fullname']:
                    update_userx(get_user['user_id'], user_fullname=user_fullname)
                if user_login.lower() != get_user['user_login']:
                    update_userx(get_user['user_id'], user_login=user_login.lower())
            data['user'] = get_userx(user_id=user_id)
        return await handler(event, data)
Самый легкий и простой способ через мидлварь, под 2ку у меня мидлваря нет, но переписать думаю всё такки можно
 
Like
  • 1
Реакции: 1 user
Активность:
Пока что здесь никого нет