Как сделать реферальную систему в боте телеграм
Перейти к содержимому

Как сделать реферальную систему в боте телеграм

Как сделать реферальную систему в боте телеграм

Completing the CAPTCHA proves you are a human and gives you temporary access to the web property.

What can I do to prevent this in the future?

If you are on a personal connection, like at home, you can run an anti-virus scan on your device to make sure it is not infected with malware.

If you are at an office or shared network, you can ask the network administrator to run a scan across the network looking for misconfigured or infected devices.

Another way to prevent getting this page in the future is to use Privacy Pass. You may need to download version 2.0 now from the Chrome Web Store.

Cloudflare Ray ID: 71aab03c51b1997a • Your IP : 82.102.23.104 • Performance & security by Cloudflare

РеФ система

Авторизуйтесь через Telegram, чтобы ответить.
Откройте бот @SiteAuthBot, нажмите кнопку Старт/Start. Следуйте инструкциям бота.

Ответы

Пример самый простой

я правильно понял это условие должно быть так?

Нет, не так.
Вы просили простой пример бота, который получает значение при переходе в него по ссылке с подстановкой значения в параметр /start

Я вам привел самодостаточную логику, а вы ее вставили в свое решение — получился код бота в одном из условии другого бота (бот в боте)

Вы может просто взять проверку на нужное вам условие из примера и подставить его в свой код

Когда я делаю так то пустота а когда $id_ref = "kfkfkf"; то все ок

Все нормально, если ваш бот выполняет условие, то шаблон в preg_match() должен поймать значение.
Пример шаблона

Покажите switch (ЧТО_У_ВАС_ЗДЕСЬ)

У вас значение для проверки в условиях лежит не в $text (в моем примере да, значение лежит в этой переменной), а в $message

Надо заменить на

Не запланированная реакция.

[moder_update]
Получается ни одно из условий не проходит.
Проверьте еще раз условия с preg_match()

погуглив я нашел вот это $url = ‘https://t.me/brobotmebot?start=ref403295577’;
$queryParams = [];

$query = parse_url($url, PHP_URL_QUERY);
parse_str($query, $queryParams);

if (isset($queryParams[‘start’])) <
echo $queryParams[‘start’];
>

по ссылке https://t.me/brobotmebot?start=ref403295577

Вам в бот прилетит объект message со значением по ключу text, которое будет равно:

А ваш пример просто разбор ссылки при помощи встроенной функции php parse-url

тогда я все равно не могу понять почему у меня не работает

", $text, $matches):
// здесь нужное вам значение
$id_ref = $matches[1];
// далее вы что-то делаете с $id_ref
$dataSend = array(
‘text’ => $id_ref,
‘chat_id’ => $chat_id,
‘reply_markup’ => $justKeyboard,

);
$this->requestToTelegram($dataSend, "sendMessage");
break;

шаблон в preg_match() у нас с вами разный

Я не вижу весь ваш код, мне сложно вам помочь урывками.
Можете прислать мне в бот обратной связи ваш код в архиве.

", ‘http://t.me/mybot?start=123’, $matches)) <
$ref = $matches[0];
>

У вас идет проверка в case по переменной $text а значение у вас лежит в $message

Реферальная система в Telegram ботах

Всем привет! Наверняка вы видели в различных ботах реферальную ссылку типа https://t.me/<юзернейм_бота>?start=<число>. Обычно в качестве числа указывается Telegram ID реферера. В этой статье я расскажу как обрабатывать такие ссылки в своем боте.

Для разработки ботов я использую Python библиотеку pytelegrambotapi.

Процесс создания бота через @BotFather опущу, приступлю сразу к коду. Есть файл config.py с переменной TOKEN, в которой хранится токен бота. В файле bot.py будем «химичить». Напишем обработчик команды /start и выведем все, что хранится в объекте сообщения.

Нас интересует строчка ‘text’: ‘/start’. Попробуем теперь перейти по ссылке вида https://t.me/<юзернейм_бота>?start=test и изменим 10-ю строчку на print(msg.text)

В консоли вывелось /start test . Делаем вывод, что в msg.text хранится необходимая нам информация из реферальной ссылки, которую необходимо обработать.

Приступим к обработке. Учитываем, что не всегда пользователь нажимает /start по реферальной ссылке, поэтому текста после /start может и не быть. Отличительным символом служит пробел (вспоминаем /start test ). Значит будем проверять наличие ID реферера по нему.

Если пользователь перейдет по ссылке https://t.me/<юзернейм_бота>?start=test test2, То test2 не попадет в msg.text, потому что там имеется пробел, который говорит, что test2 не является частью ссылки. Именно поэтому в msg.text находится только один символ пробела. А значит если он имеется, то и есть некоторая информация из реферальной ссылки. Поэтому в первой ветке мы создаем список ( msg.text.split() ), и берем его второй элемент (всем ведь известно, что нумерация списка идет с нуля, да?).

Хорошо, на этом этапе мы имеем текст из ссылки. Мы подразумеваем, что там число, но от пользователя можно поджидать чего угодно. Вдруг кому-то захочется «сломать» бота, указав в ссылке вместо ID реферера какой-то текст. Для этого проверим данные.

Здесь, используя try. except мы преобразуем при помощи int() информацию в число. Если в переменной referer хранится не число, то int() вызовет ошибку ValueError

Теперь в referer записано число. Но тут появляется загвоздка: функция int() может перевести строку «-101» в число -101. То есть на данном этапе в referer может храниться отрицательное число. Почему это не важно, расскажу чуть позднее.

Пользователь может вставить в ссылку свой TG ID. Реферальная система подразумевает под собой некий бонус за переход, поэтому таким образом можно выдать самому себе бонус. Предусмотрим это. ID пользователя получаем, используя user_id = msg.from_user.id

Допустим, что имеется функция get_all_users(), которая возвращает список всех пользователей бота. Делаем это для того, чтобы не назначить в качестве реферера пользователя, которого не существует.

Что необходимо делать в случае, если у пользователя и так уже есть реферер? Не будем ведь при каждом использовании реферальной ссылки выдавать бонус за приведенного реферала, это нас попросту разорит. Поэтому необходимо написать проверку. Напишем функцию has_referrer() , которая вернет True при наличии у пользователя реферера и False при его отсутствии. Логично ее написать в начале для оптимизации.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *