@sovsemnevajno

Почему телеграм бот долго реагирует на команды?

Подскажите почему бот может долго реагировать на команду. После нажатия на кнопку проходит ~ 1 секунды, прежде чем бот выдаст ответ.

Такое ощущение, что он каждый раз подключается к бд, прежде чем выдать ответ. (возможно так и есть)

В плане подключения использую aiomysql.

import logging
import aiogram
import config
import importlib
import asyncio
import aiomysql
from config import DB_CONFS
from aiogram import Bot, Dispatcher, executor, types

# log level
logging.basicConfig(level=logging.INFO)

# bot init
bot = Bot(token=config.token)
dp = Dispatcher(bot=bot)
sync_tg = SyncTG(config.token)

queue = []


async def creatPool() -> aiomysql.Pool:
    pool = await aiomysql.create_pool(host=DB_CONFS["host"], port=DB_CONFS["port"],
                                      user=DB_CONFS["user"], password=DB_CONFS["passwd"],
                                      db=DB_CONFS["database"], loop=loop, autocommit=True, pool_recycle=120)


    return pool


@dp.message_handler(content_types="text", text=" Топ")
async def top(message: types.Message):
    async with pool.acquire() as conn:
        async with conn.cursor() as cursor:
            try:
                await cursor.execute(f"SELECT status FROM users WHERE tguserid='{message.chat.id}'")
                st = await cursor.fetchall()
                if st[0][0] == 4:
                    await message.answer('⚠️ <b>Доступ запрещён</b> ⚠️', parse_mode='HTML')
                else:
                    top_d = ""
                    await cursor.execute("SELECT * FROM users WHERE status = 1 ORDER BY all DESC LIMIT 10")
                    users = await cursor.fetchall()
                    num = 1
                    for user in users:
                        top_d += f"<b>{num}. @{user[2]}</b> - <b>{user[3]}</b> \n"
                        num = num + 1
                    await message.answer('<b> Топ 10:</b>\n\n' + top_d, parse_mode='HTML')
            except:
                pass


loop = asyncio.get_event_loop()
pool: aiomysql.Pool = loop.run_until_complete(creatPool())
  • Вопрос задан
  • 1086 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
async with pool.acquire() as conn:
async with conn.cursor() as cursor:

Как по вашему, что делают эти строки?
Такое ощущение, что он каждый раз подключается к бд, прежде чем выдать ответ.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы