fix(stats): count link_count per Telegram user, not per chat
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 2m11s
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 2m11s
chat_id is shared by every member of a group chat, so all group messages incremented one shared row and username kept getting overwritten by whoever sent last. Track link counts in a new user_links table keyed by the real from_user.id instead.
This commit is contained in:
parent
87ef82ef7f
commit
d5201df802
2 changed files with 40 additions and 9 deletions
13
admin_bot.py
13
admin_bot.py
|
|
@ -61,11 +61,16 @@ def get_total_users() -> int:
|
|||
|
||||
|
||||
def get_users_sent_link_count() -> int:
|
||||
"""Возвращает количество пользователей, отправивших хотя бы одну ссылку"""
|
||||
"""Возвращает количество пользователей, отправивших хотя бы одну ссылку.
|
||||
|
||||
Ключ — реальный Telegram user_id (таблица user_links), а не chat_id: в
|
||||
групповых чатах chat_id общий для всех участников и не годится для учёта
|
||||
по отдельным людям.
|
||||
"""
|
||||
try:
|
||||
conn = sqlite3.connect(str(DB_FILE))
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('SELECT COUNT(*) FROM users WHERE link_count > 0')
|
||||
cursor.execute('SELECT COUNT(*) FROM user_links WHERE link_count > 0')
|
||||
result = cursor.fetchone()
|
||||
conn.close()
|
||||
return result[0] if result else 0
|
||||
|
|
@ -75,12 +80,12 @@ def get_users_sent_link_count() -> int:
|
|||
|
||||
|
||||
def get_top_active_users(limit: int = 5) -> list[tuple[int, str, str, int]]:
|
||||
"""Возвращает топ пользователей по количеству отправленных ссылок"""
|
||||
"""Возвращает топ пользователей по количеству отправленных ссылок (по user_id)"""
|
||||
try:
|
||||
conn = sqlite3.connect(str(DB_FILE))
|
||||
cursor = conn.cursor()
|
||||
cursor.execute(
|
||||
'SELECT chat_id, username, first_name, link_count FROM users '
|
||||
'SELECT user_id, username, first_name, link_count FROM user_links '
|
||||
'WHERE link_count > 0 ORDER BY link_count DESC LIMIT ?',
|
||||
(limit,)
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue