Вот что я заметил:
- Определение переменной time:
Здесь переменная time изначально содержит строку (так как она приходит как аргумент в функцию timeout). Но позже в коде она используется как объект datetime. Это может вызвать путаницу.
Чтобы избежать путаницы, лучше назвать эту переменную как-нибудь по-другому, например, timeout_duration или timeout_time.
- Проблема с типом переменной time:
Если time передается как строка (например, '10'), то когда вы создаете новый объект datetime, переменная time будет содержать объект datetime, а не строку.
Проблема в том, что вы используете ту же переменную time дважды в разных контекстах. После вычисления нового time, переменная уже не строка, а объект datetime, и использование её в строке для отправки сообщения может вызвать ошибку.
- Обработка времени и конкатенация строк:
В строке await interaction.response.send_message(f"Timed out {member.mention for {time} for {reason}", ephemeral=True) у вас ошибка в синтаксисе. Здесь ошибка заключается в том, что неправильная структура f-строки.
Вот исправленный вариант вашего кода:
@commands.slash_command()
async def timeout(self, interaction, member: disnake.Member, time: str, reason: str):
timeout_duration = datetime.datetime.now() + datetime.timedelta(minutes=int(time))
await member.timeout(reason=reason, until=timeout_duration)
await interaction.response.send_message(f"Timed out {member.mention} for {time} minutes for {reason}", ephemeral=True)
Обратите внимание, что я переименовал time в timeout_duration для ясности и добавил текст "minutes" в строку сообщения для уточнения.