Как можно отслеживать подписки и отписки пользователей, использующих реферальные ссылки?

Я разрабатываю бота для мониторинга пользователей каналов и столкнулся с задачей отслеживания пользователей, пришедших по реферальной ссылке, а также определения, кто из них отписался от канала. В самом Телеграме можно увидеть, кто переходит по ссылке, и участники исчезают из списка при отписке. Однако я не понимаю, как осуществлять это наблюдение на протяжении всего времени существования ссылки без хранения данных в базе данных, извлекая их непосредственно из API Телеграма. Может быть, вы могли бы поделиться советами по этому поводу?
  • 1 ноября 2024 г. 10:32
Ответы на вопрос 2
Отслеживание подписок и отписок пользователей, приходящих по реферальным ссылкам в Telegram, может быть достаточно сложной задачей, особенно без использования базы данных для хранения информации. Однако, есть несколько подходов, которые вы можете использовать для решения этой задачи:

1. **Использование базы данных**: Хотя вы упомянули, что не хотите хранить данные в базе данных, стоит рассмотреть возможность хранения минимальной структуры данных, например, списка пользователей и их статусов (подписан/отписан) в базе данных. Это облегчит задачу отслеживания и позволит вам реализовать функциональность в более устойчивом и надежном виде.

2. **Таймеры и регулярные проверки**: Если вы не хотите использовать базу данных, вы можете установить таймер для регулярной проверки списка участников канала через API Telegram. Например, вы можете опрашивать участников канала раз в определенное время (каждый час, день и т.д.) и сравнивать текущий список участников с тем, что у вас было ранее. Таким образом, вы сможете выявить тех, кто отписался.

3. **Telegram Bot API**: С помощью Telegram Bot API вы можете использовать методы, такие как `getChatMembers`, чтобы извлечь информацию о текущих участниках канала. Однако необходимо помнить, что если ваш бот не является администратором канала, он не сможет получать полную информацию о всех участниках.

4. **Системы уведомлений**: Если вы можете управлять реферальными ссылками через вашего бота, вы можете настроить систему уведомлений, чтобы отправлять сообщение пользователю при подписке или отписке. Например, когда пользователь переходит по реферальной ссылке и подписывается на канал, бот может отправить ему сообщение, подтверждающее подписку.

5. **Логирование в памяти**: Если вы решите не использовать базу данных, вы можете логировать пользователей в памяти с использованием подхода на базе кэширования (например, использовать библиотеку `cachetools` или `redis-py` для временного хранения данных). Однако это будет временное решение, и данные будут потеряны при перезапуске бота.

6. **Анализ событий**: Некоторые решения могут включать использование webhook-ов или событийных систем, которые позволяют вашему боту реагировать на действия пользователя в режиме реального времени.

Учтите, что Telegram имеет ограничения по использованию API, которые могут повлиять на вашу возможность регулярно запрашивать данные. Прежде чем приступать к реализации, ознакомьтесь с документацией Telegram API и принятыми практиками для обеспечения соблюдения правил и ограничений платформы.
Ответа не дождался, но сам разобрался. Без записи в бд не выйдет, но хоть так можно вести статистику по динамике пользователей. Код ниже. 

# Это работает для получения данных пользователя при проходе по ссылке
@router.chat_join_request()
async def on_user_leave(update: ChatJoinRequest): 
    print(update.invite_link.invite_link, 'ССЫЛКА ПО КОТОРОЙ ПРОШЛИ')
    print(update.invite_link)

# Срабатывает, когда отписывается пользователь
@router.chat_member(ChatMemberUpdatedFilter(IS_MEMBER >> IS_NOT_MEMBER))
async def on_user_leave(event: ChatMemberUpdated):
    print(event, 'LEAVE')

# Срабатывает когда присоединяется новый пользователь
@router.chat_member(ChatMemberUpdatedFilter(IS_NOT_MEMBER >> IS_MEMBER))
async def on_user_join(event: ChatMemberUpdated):
    print(event, 'ADD NEW')
Похожие вопросы