@ivanil7

Как посчитать кол-во одинаковых строк в SQLite Telebot?

Помогите посчитать кол-во одинаковых строк в SQLite Telebot. Делаю простую реферальную систему. Осталось вывести в сообщении кол-во зарегистрированных пользователей
код:
import telebot
import sqlite3

bot = telebot.TeleBot('config.token')

user_markup = telebot.types.ReplyKeyboardMarkup(True, True)
user_markup.row('Реф. ссылка')


@bot.message_handler(commands=["start"])
def start_command_handler(message):
    start_command = message.text
    referrer_id = str(start_command[7:])
    connect = sqlite3.connect('database.db')
    cursor = connect.cursor()
    connect.commit()
    user_id = [message.from_user.id, referrer_id]

    try:
        cursor.execute("INSERT INTO users VALUES(?, ?);", user_id)
        bot.send_message(referrer_id, 'По вашей ссылке зарегистрировался новый пользователь')
    except:
        pass

    connect.commit()
    bot.send_message(message.from_user.id, 'Приветсвую тебя!',  reply_markup=user_markup)
    cursor.close()



@bot.message_handler(content_types=['text'])
def echo_all(message):
    if message.text == 'Реф. ссылка':
        print1 = message.from_user.id

        connect = sqlite3.connect('database.db')
        cursor = connect.cursor()
        #ref = cursor.execute(f"SELECT COUNT('referrer') as count FROM 'users' WHERE 'referrer' = ?", (print1,)).fetchone()[0]
        #ref = cursor.execute("SELECT COUNT(*) FROM 'users' WHERE 'referrer' = '243005921'").fetchone()[0]
        #ref = cursor.execute("SELECT 'referrer' COUNT('referer') FROM 'users' GROUP BY 'referrer' = ?", (print1))
        ref = cursor.execute(f"SELECT COUNT(*)  FROM 'users' WHERE 'referrer' = '{message.from_user.id}'").fetchone[0]
        bot.send_message(message.from_user.id, 'ID:' + str(print1) + '\n' + 'https://t.me/khbrinko2bot?start=' + str(print1) + '\nКол-во рефералов: ' + str(ref))


#https://t.me/<юзернейм_бота>?start=test

bot.polling(none_stop=True, interval=0)

Выдает 0 если не указывать [0] в - etchone()[0] то выдает (0,)

таблица - users
1 столбец - id
2 столбец - referrer
  • Вопрос задан
  • 106 просмотров
Решения вопроса 1
@TKDBOT
Учу python. Готов к конструктивной критике.
import telebot
from telebot import types
import sqlite3
bot = telebot.TeleBot(TOKEN)
link = 'https://t.me/(name_bot)'


@bot.message_handler(commands=['start'])
def start(message):
    msg = str(message.text).rsplit(' ', 1)
    ref = types.ReplyKeyboardMarkup(resize_keyboard=True)
    ref_btn = types.KeyboardButton('Ваша реф ссылка')
    ref_btn2 = types.KeyboardButton('Мои рефералы')
    ref.add(ref_btn, ref_btn2)
    conn = sqlite3.connect('db.db')
    cur = conn.cursor()
    user = cur.execute("SELECT id FROM users WHERE chat_id == ?", (message.chat.id,)).fetchone()
    if user:
        #Юзер уже сть в базе
        bot.send_message(message.chat.id, 'Доброго времени суток', reply_markup=ref)
    else: # Юзера пришел в первые
        if len(msg) == 2: #Проверяем есть ли реф сылка
            id_referer = msg[1]
            bot.send_message(message.chat.id, f'Вас пригласили в чат.\nID реферера: {msg[1]}', reply_markup=ref)
            cur.execute("INSERT INTO users(f_name, l_name, chat_id, referer) VALUES (?, ?, ?, ?)", (message.from_user.first_name, message.from_user.last_name, message.chat.id, id_referer))
            conn.commit()
            conn.close()
        else: # Сюда попадаем если реф ссылки нет
            cur.execute("INSERT INTO users(f_name, l_name, chat_id) VALUES (?, ?, ?)",
                        (message.from_user.first_name, message.from_user.last_name, message.chat.id))
            conn.commit()
            conn.close()
            bot.send_message(message.chat.id, 'Вы сами нашли наш чат', reply_markup=ref)


@bot.message_handler(content_types=['text'])
def ref(message):
    if message.text == 'Ваша реф ссылка':
        bot.send_message(message.chat.id, 'Ваша реф ссылка:')
        bot.send_message(message.chat.id, f'{link}?start={message.chat.id}')
    elif message.text == 'Мои рефералы':
        conn = sqlite3.connect('db.db')
        cur = conn.cursor()
        referal = cur.execute("SELECT * FROM users WHERE referer = ?", (message.chat.id,)).fetchall()
        bot.send_message(message.chat.id, f'Количество рефералов:\n    {len(referal)}')

bot.infinity_polling()


Структура БД:
1. ID - int
2. f_name - Имя, text
3. l_name - Фамилия, text
4. chat_id - telegram id юзера, int, уникальное значение в бд
5. referer - telegram id реферера, int
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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