Дополню статью, как в sqlite выводить список id пользователей, а точнее файл.
Вот отдельная команда, аналогично как и другим
async def ids_command(message, bot, user_db):
user_id = message.from_user.id
admin_id = int(os.getenv("ADMIN_ID"))
if user_id != admin_id:
await bot.reply_to(message, "❌ У вас нет прав для выполнения этой команды.")
return
try:
# Получение списка ID
ids = await user_db.get_all_ids()
if not ids:
await bot.reply_to(message, "ℹ️ Нет пользователей в базе данных.")
return
# Определяем тип БД для названия файла
db_type = "SQLite" if isinstance(user_db, SqliteUserDataManager) else "JSON"
filename = f"user_ids_{db_type.lower()}.txt"
# Создаем временный файл
with open(filename, "w") as f:
for user_id in ids:
f.write(f"{user_id}\n") # Каждый ID на новой строке
# Отправляем файл через FSInputFile
document = FSInputFile(path=filename)
await bot.send_document(
chat_id=message.chat.id,
document=document,
caption=f"📋 Список ID пользователей ({db_type})"
)
# Удаляем временный файл
os.remove(filename)
except Exception as e:
logger.error(f"Ошибка при получении ID: {e}")
await bot.reply_to(message, f"❌ Ошибка: {str(e)}")
И не забудьте добавить метод в файле sqlite_db.py
async def get_all_ids(self):
await self._ensure_db_exists()
async with self.lock:
async with aiosqlite.connect(self.db_file) as db:
cursor = await db.execute("SELECT user_id FROM users")
rows = await cursor.fetchall()
return [row[0] for row in rows]
И в самом bot.py:
@main_router.message(Command("ids"))
async def handle_ids(message: types.Message):
await ids_command(message, bot, user_db)
А вот как выводится файл:
[image: 1751296552338-%D1%81%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA-%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0-2025-06-30-%D0%B2-18.15.47.png]
В основном это необходимо для рассылки пользователям уведомлений или рекламных интеграций.