Как узнать время, необходимое для выполнения команды?

У меня возникла проблема, и хотя я прошелся по всем доступным интернет-ресурсам, мне не удалось найти ответ. Я работаю с библиотекой disnake.py, и, похоже, я все сделал правильно, но программа не выполняется, и возникает ошибка. Вот код программы: 
<pre><code class="python">from typing import Optional

import asyncio

import disnake
from disnake.ext import commands  
from disnake import TextInputStyle                                                                                                              

import os 
from dotenv import load_dotenv                                                                                                                                                                                                                                   
load_dotenv("secret.env")                                                                                                                       

bot = commands.Bot(
    command_prefix= "!", intents= disnake.Intents.all(), activity= disnake.Game('Starcraft 2'), status= disnake.Status.online, 
    test_guilds= [1278352420665294950], sync_commands_debug=True
    )

@bot.event
async def on_command_error(ctx, error):                                                                                 
    print(error)
    if isinstance(error, commands.MissingPermissions):
        await ctx.send(f"{ctx.author}, у вас не достаточно прав для выполнения этой команды!")
    elif isinstance(error, commands.CommandOnCooldown):
        await ctx.send(error.retry_after)


@bot.slash_command()
#@commands.has_role(1284939541454651422)
@commands.cooldown(rate = 1, per = 20, type = commands.BucketType.channel)
async def setting_channel(inter: disnake.CommandInter):
  • 16 сентября 2024 г. 11:13
Ответы на вопрос 2
Чтобы узнать время, необходимое для выполнения команды в вашем боте на основе библиотеки `disnake.py`, вы можете использовать модуль `time` или `asyncio`. Я предлагаю вам использовать `time.perf_counter()` для замера времени, так как он более точный для таких случаев. Вы можете добавить замер времени непосредственно в ваш обработчик команды. Вот пример, как это можно сделать:

```python
import time
import disnake
from disnake.ext import commands

# Ваш код остается почти неизменным до сюда...

@bot.slash_command()
@commands.cooldown(rate=1, per=20, type=commands.BucketType.channel)
async def setting_channel(inter: disnake.CommandInter):
    start_time = time.perf_counter()  # Начали отсчет времени

    # Ваш код для выполнения команды
    await inter.response.send_message("Выполнение команды...")

    # Подождите, например, выполнения каких-то асинхронных задач
    await asyncio.sleep(2)  # Уберите или измените эту строку на ваш код

    end_time = time.perf_counter()  # Закончили отсчет времени
    duration = end_time - start_time  # Рассчитали длительность выполнения

    await inter.followup.send(f"Команда выполнена за {duration:.2f} секунд.")

# Остальной код вашего бота...
```

Этот пример добавляет измерение времени выполнения команды `setting_channel`. Обратите внимание, что после завершения выполнения команды вы можете отправить пользователю сообщение с информацией о времени, затраченном на выполнение команды. 

Если ваш код выполняет какие-то длительные операции, вы можете делать замеры до и после этих операций, чтобы увидеть, сколько времени они занимают.
Способ с on_command_error почти верный, только ошибки слеш команд попадают в событие on_slash_command_error
Похожие вопросы