@IllIDan3

У всех одинаковое кол — во рефералов, что делать?

у всех количество рефералов равняется первому зареганному пользователю
main.py
# Импорты
import logging


from aiogram.utils.deep_linking import decode_payload
from aiogram import Bot, Dispatcher, executor, types, utils

from models import *

# Переменный
API_TOKEN = '5323293696:AAF8Zkh7PYDGwo1L2gHpoXznX2JNflBp2iU' 
ref_link = 'https://telegram.me/{}?start={}'
channel_link = 'https://t.me/+OglTxoMwV-VmZmNi'


# Настройка
logging.basicConfig(level=logging.INFO)

# Иницилизация бота
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)

# Базовые функции



# Хэндлер старта
@dp.message_handler(commands=['start'])
async def send_welcome(message: types.Message):

  # Проверка базы данных 
  cur.execute('SELECT user_id FROM users')
  users_id = cur.fetchall() # айди всех участников с табилцы
  user_id = message.from_user.id # айди зареганного участника  
  
  if str(user_id) in str(users_id):

    refferals_btn = types.KeyboardButton('Рефералы и ссылка')
    chat_btn = types.KeyboardButton('Вступить в чат')
  
    markup = types.ReplyKeyboardMarkup()
    markup.add(refferals_btn, chat_btn)
    
    await bot.send_message(message.chat.id, text = 'Ваш айди уже есть в базе данных', reply_markup =  markup)
    print
  else:
    # Реферальная система
    start_command = message.text
    refferer_id = str(start_command[7:])
    if str(refferer_id) != "":
      if str(refferer_id) != str(message.from_user.id):
        add_user(message.from_user.id, str(0), refferer_id)
        database.commit()
        await bot.send_message(message.from_user.id, text = 'Успешно зарегистирован!')
        try:
          await bot.send_message(refferer_id, 'По вашей ссылке зарегистрировался пользователь!')
          increase_ref(refferer_id)          
        except:
          pass
      else:
        await bot.send_message(message.from_user.id, text = 'По собственной ссылке регистрироваться нельзя!')
    else:
      refferals_btn = types.KeyboardButton('Рефералы и ссылка')
      chat_btn = types.KeyboardButton('Вступить в чат')
  
      markup = types.ReplyKeyboardMarkup()
      markup.add(refferals_btn, chat_btn)
      await bot.send_message(message.from_user.id, text = 'Успешно зарегистирован!', reply_markup = markup)
      add_user(message.from_user.id, str(0), str(0))  
      database.commit()
    
    refferals_btn = types.KeyboardButton('Рефералы и ссылка')
    chat_btn = types.KeyboardButton('Вступть в чат')
  
    markup = types.ReplyKeyboardMarkup()
    markup.add(refferals_btn, chat_btn)
  


@dp.message_handler()
async def func(message: types.Message):
  
  user_channel_status = await bot.get_chat_member(chat_id='-1001546913296', user_id = message.from_user.id)

  if user_channel_status["status"] != 'left':
    if message.text == 'Вступить в чат':
      await bot.send_message(message.from_user.id, text = 'типо чат')
    elif message.text == 'Рефералы и ссылка':
      bot_name = 'war3game_bot'
      await bot.send_message(message.from_user.id, text = f'Приглашено рефералов: {count_refs(message.from_user.id)}\n'
f'\n'
f'Ваша реферальная ссылка: \n'
f'{ref_link.format(bot_name, message.from_user.id)}')
    
      
  else:
    await bot.send_message(message.from_user.id, 'Для пользованием бота нужно подписаться на канал: \n'
                           f'{channel_link}')
    

  
if __name__ == '__main__':
  executor.start_polling(dp, skip_updates=True)


models.py
import sqlite3 as sq
import re

database = sq.connect('users.db')

cur = database.cursor()

cur.execute("""CREATE TABLE IF NOT EXISTS users(
            id INT PRIMARY KEY AUTOINCREMENT
            user_id INT,
            refferals INT,
            refferer_id INT
           )""")
database.commit()

def add_user(user_id, refferals, refferer_id):
  if refferer_id != None:
    return cur.execute('INSERT INTO users(user_id, refferals, refferer_id) VALUES(?, ?, ?)', (user_id, str(0), refferer_id))
    database.commit()
  else:
    return cur.execute('INSERT INTO users(user_id) VALUES(?)', (user_id))
    database.commit()

def increase_ref(user_id):
  cur.execute("SELECT refferals FROM users WHERE user_id = ?", (user_id, ))

  refs1 = cur.fetchall()
  for row in refs1:
    refs = row[0]
    
  refs = refs + 1
  cur.execute('UPDATE users SET refferals = ?', str(refs))
  database.commit()
  

def count_refs(user_id):
  cur.execute('SELECT refferals FROM users WHERE user_id = ?', (user_id, ))

  refs1 = cur.fetchall()
  for row in refs1:
    refs = row[0]
    
  return refs
  database.commit()
  • Вопрос задан
  • 152 просмотра
Пригласить эксперта
Ответы на вопрос 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
Проблема здесь:

cur.execute('UPDATE users SET refferals = ?', str(refs))


Это стандартная ошибка update without where. При таком запросе UPDATE изменяет все строки таблицы на одно и то же значение. Нужно изменять с фильтром WHERE конкретную запись.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы