Устанавливаем пакет python3-venv

sudo apt install python3-venv

Создаем виртуальное окружение

python3 -m venv tgbot

Создался каталог tgbot. Переходим в него

cd tgbot

Активируем вирутальное окружение скриптом activate

source bin/activate

(tgbot) в начале командной строки означает, что мы находимся внутри виртуального окружения

Установим пакет aiogram внутри виртуального окружения:

pip install aiogram

Убедимся, что установили пакет:

pip list | grep aiogram

Создаём скрипт

import asyncio
import logging
import sqlite3
from aiogram import Router, F, Bot, Dispatcher
from aiogram.types import Message, CallbackQuery, ReplyKeyboardMarkup, KeyboardButton
from aiogram.filters import CommandStart, Command
router = Router()
TOKEN='xxx'
maink = ReplyKeyboardMarkup (keyboard=[[KeyboardButton(text='Список пользователей')]], resize_keyboard=True)
@router.message (CommandStart())
async def cmd_start(message: Message):
await message.answer('Привет!', reply_markup = maink)
@router.message (F.text == 'Список пользователей')
async def database (message: Message):
con = sqlite3.connect('/home/bsk23-01-student-1/python/pythondb2') cur = con.cursor()
cur.execute('SELECT * FROM users')
data_list = cur.fetchall()
con.close()
for data in data list:
await message.answer(f'Имя {data[0]}; Boзpacт {data[1]}')
@router.message()
async def word (message: Message):
await message.reply('Я тебя не понимаю!')
﻿async def main():
bot Bot (token=TOKEN)
dp = Dispatcher()
dp.include_router(router)
await dp.start_polling (bot)
if __name__=="__main__"
logging.basicConfig(level=logging.INFO)
try:
asyncio.run(main())
except KeyboardInterrupt:
print('Exit')

Создаём бота в TG:

В TG находим @BotFather и запускаем его

/newbot

Сочиняем имя бота и имя пользователя бота Например «My_WiFi_Users_bot»

Получаем токен и записываем его в значение переменную TOKEN в скрипте.