Как получить общее значение выпитых литров. Команда /leaders
Хочу создать команду /leaders, что-то наподобие как на скриншоте:

В db.py у меня есть данная функция не знаю как назвать, а именно get_totalenergetik: #UPD
import sqlite3
import time
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):
with self.connection:
self.cursor.execute("INSERT INTO `users` (`user_id`) VALUES (?)", (user_id,))
self.connection.commit() ###
def add_energetik(self, number, user_id):
with self.connection:
self.cursor.execute("UPDATE `users` SET `number` = `number` + ? WHERE `user_id` = ?", (number, user_id,))
self.connection.commit() ###
def get_totalenergetik(self, user_id):
with self.connection:
return self.cursor.execute("SELECT `number` FROM `users` WHERE `user_id` = ?;", (user_id, )).fetchall() ### UPD
def get_top_rows():
connection = sqlite3.connect(db_file)
cursor = self.connection.cursor()
with connection:
return cursor.execute("SELECT * FROM users order by number limit 0,5").fetchall()
И вот команда: #UPD
@dp.message_handler(commands=['leaders'], chat_type=[types.ChatType.SUPERGROUP, types.ChatType.GROUP])
async def leaders(message: types.Message):
answer = ''
data = db.get_top_rows()
i = 0
for x in data:
i += 1
name = await bot.get_chat(x[1])
answer += f"{i}.{name['first_name']} - выпито {x[2]} л. энергетика.\n"
await bot.send_message(message.chat.id, answer)
Ответы (1 шт):
Автор решения: Clark Devlin
→ Ссылка
Функция для извлечения топ записей из бд, которая извлечет 5 строк с самыми большими значениями в numbers:
def get_top_rows():
connection = sqlite3.connect(db_file)
cursor = self.connection.cursor()
with connection:
return cursor.execute("SELECT * FROM users order by number limit 0,5").fetchall()
Хендлер для команды
@dp.message_handler(commands=['leaders'], chat_type=[types.ChatType.SUPERGROUP, types.ChatType.GROUP])
async def leaders(message: types.Message):
answer = ''
data = db.get_top_rows()
data.reverse()
i = 0
for x in data:
i += 1
name = await bot.get_chat(x[1])
answer += f"{i}.{name['first_name']} — выпито {x[2]} литров энергетика.\n"
await bot.send_message(message.chat.id, answer)
