У меня возникла проблема, и хотя я прошелся по всем доступным интернет-ресурсам, мне не удалось найти ответ. Я работаю с библиотекой 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):
Чтобы узнать время, необходимое для выполнения команды в вашем боте на основе библиотеки `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