Генерируем айди пользователей рандомно (опять, да)

This commit is contained in:
Alexey Polyakov
2026-05-09 18:16:32 +03:00
parent ddb810589f
commit d81eec5532
5 changed files with 25 additions and 9 deletions

View File

@@ -6,9 +6,9 @@ class SQLQueries:
INSERT_USER = """
INSERT INTO users
(phone, telegram_id, firstname, lastname, username,
(id, phone, telegram_id, firstname, lastname, username,
profileoptions, options, accountstatus, updatetime, lastseen)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
"""
INSERT_USER_DATA = """

View File

@@ -1,6 +1,6 @@
import json
import secrets
import time
import os
import geoip2.database
@@ -562,4 +562,14 @@ class Tools:
response = reader.country(ip)
return response.country.name or "Localhost Federation"
except Exception:
return "Localhost Federation"
return "Localhost Federation"
async def generate_user_id(self, db_pool):
"""Генерация id пользователя"""
async with db_pool.acquire() as conn:
async with conn.cursor() as cursor:
while True:
user_id = secrets.randbelow(2_147_383_647) + 100_000
await cursor.execute("SELECT id FROM users WHERE id = %s", (user_id,))
if not await cursor.fetchone():
return user_id

View File

@@ -397,15 +397,19 @@ class AuthProcessors(BaseProcessor):
now_ms = int(time.time() * 1000)
now_s = int(time.time())
# Генерируем ID пользователя
user_id = await self.tools.generate_user_id(self.db_pool)
# Создаем пользователя
await cursor.execute(
"""
INSERT INTO users
(phone, telegram_id, firstname, lastname, username,
(id, phone, telegram_id, firstname, lastname, username,
profileoptions, options, accountstatus, updatetime, lastseen)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
""",
(
user_id,
phone,
None,
first_name,
@@ -419,8 +423,6 @@ class AuthProcessors(BaseProcessor):
),
)
user_id = cursor.lastrowid
# Добавляем данные аккаунта
await cursor.execute(
"""

View File

@@ -88,10 +88,14 @@ class TelegramBot:
username = (message.from_user.username or f"user{int(time.time() * 1000)}")[:60]
try:
# Генерируем ID пользователя
user_id = await self.tools.generate_user_id(self.db_pool)
# Создаем юзера
await cursor.execute(
self.sql_queries.INSERT_USER,
(
user_id, # id
new_phone, # phone
tg_id, # telegram_id
firstname, # firstname

View File

@@ -1,5 +1,5 @@
CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT,
`id` INT NOT NULL,
`phone` VARCHAR(20) UNIQUE,
`telegram_id` VARCHAR(64) UNIQUE,
`firstname` VARCHAR(59) NOT NULL,