@Sergey0432

Как добавить реферала в телеграм боте?

Я пишу реферальную систему с помощью sqlite3. видимо в нем есть ошибка. Вот код функций, они лежат в другом файле:
spoiler
import sqlite3


class Database:
    def __init__(self, db_file):
        self.connection = sqlite3.connect(db_file)  # подключаеся к базе данных
        self.cursor = self.connection.cursor()

    def user_exists(self, user_id):  # тут мы будем прверять есть ли реферал, или его нет
        with self.connection:  # это подклюцение к базе данных
            result = self.cursor.execute("SELECT * FROM 'users' WHERE 'user_id' = ?", (user_id,)).fetchall()
        return bool(len(result))

    def add_user(self, user_id, referrer_id=None):
        with self.connection:
            if referrer_id != None:
                return self.cursor.execute("INSERT INTO 'users' ('user_id', 'referrer_id') VALUES (?, ?)", (user_id, referrer_id,))
            else:
                return self.cursor.execute("INSERT INTO 'users' ('user_id') VALUES (?)", (user_id,))

    def count_reeferals(self, referrer_id):
        with self.connection:
            return self.cursor.execute("SELECT COUNT('id') as count FROM 'users' WHERE 'referrer_id' = ?", (referrer_id,)).fetchone()[0]


Ниже код самого бота:
import logging
from aiogram import Bot, Dispatcher, executor, types
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton, InlineKeyboardMarkup, InlineKeyboardButton
from db import Database


API_TOKEN = "iweu6cfnb88888884i734y7fnmv734ni - токен типо"
CHANNEL_ID = "-1006777796946"
BOT_ID = "salesman_test3_bot"
NOTSUB_MESSAGE = "Для того чтобы получить индикатора Possible Low подпишись на канал автора"


main_menu = ReplyKeyboardMarkup(resize_keyboard=True)
BtnReferal = KeyboardButton("Пригласить реферала")
main_menu.add(BtnReferal)


# Initialize bot and dispatcher
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)
db = Database('database.db')




@dp.message_handler(commands=['start'])
async def start(message: types.Message):
   if message.chat.type == 'private':
       if not db.user_exists(message.from_user.id):  # если пользователь не зарегистрирован
           start_command = message.text  # /start0573496326
           referrer_id = str(start_command[7:])
           if str(referrer_id) != "":
               if str(referrer_id) != str(message.from_user.id):
                   db.add_user(message.from_user.id, referrer_id)
                   try:
                       await bot.send_message(referrer_id, "По вашей ссылке зарегистроровался пользователь!")
                       # тут можем давать плюшки для нашего реферера
                       if db.count_reeferals(message.from_user.id) == 2:
                           await bot.send_message(referrer_id,
                                              "Переходите и получайте инструкции: http nnn",
                                              reply_markup=main_menu)
                       elif db.count_reeferals(message.from_user.id) == 1:
                           await bot.send_message(referrer_id, "Пригласите еще одного пользователя и получите ссылку")
                       else:
                           pass
                   except:
                       pass
               else:
                   db.add_user(message.from_user.id)  # регистрация пользователя обычным образом (не по реферальной ссылке)
                   await bot.send_message(message.from_user.id, "По собственной ссылке регистророваться нельзя!")
           else:
               db.add_user(message.from_user.id)


       await bot.send_message(message.from_user.id, "Для того чтобы получить инструкции, пригласите 2 человек по реферальной ссылке", reply_markup=main_menu)


Проблема выглядит так:
spoiler

63dbd0823bfd5063139790.png


Я пишу боту все хорошо => он дает мне ссылку => я копирую ссылку и отправляю ее другому аккаунту => нажимаю старт => реферальный аккаунт пишет? "По вашей ссылке зарегистрировался новый пользователь" => я нажимаю в надежде увидеть количество рефералов: 1, А ТАМ 0!

sqlite3 (db) появляются новые пользователи, и они имеют одинаковые реферальные ID

63dbd09763c24577683749.png

Должны добавляться рефералы, при повторном нажатии на кнопку "Пригласить реферала"
  • Вопрос задан
  • 86 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы