Почему метод `Timeout` не работает должным образом в Disnake (discord.py)?

Как установить правильную продолжительность времени для команды mute в вашем коде?
  • 10 апреля 2024 г. 9:29
Ответы на вопрос 2
Метод `Timeout` в Disnake (discord.py) не работает должным образом, потому что Disnake является форком библиотеки discord.py и имеет некоторые изменения и обновления в сравнении с оригинальной версией. 

Для установки правильной продолжительности времени для команды mute в вашем коде, вы можете использовать функцию `sleep()` из модуля `asyncio`. Вот пример:

```python
import asyncio

@commands.command()
async def mute(self, ctx, member: discord.Member, time: int):
    muted_role = discord.utils.get(ctx.guild.roles, name="Muted")
    await member.add_roles(muted_role)
    await ctx.send(f"{member.mention} has been muted for {time} seconds.")

    await asyncio.sleep(time)
    
    await member.remove_roles(muted_role)
    await ctx.send(f"{member.mention} has been unmuted.")
```

Этот код добавляет роль "Muted" пользователю и удаляет ее после указанной продолжительности времени. Функция `sleep()` приостанавливает выполнение кода на указанное количество секунд, а затем продолжает выполнение.
Таймаут под капотом максимально простая функция, работать не так он не может: 
if not (duration is MISSING) ^ (until is MISSING):
    raise ValueError("Exactly one of `duration` and `until` must be provided")

payload: Dict[str, Any] = {}

if duration is not MISSING:
    if duration is None:
        until = None
    elif isinstance(duration, datetime.timedelta):
        until = utils.utcnow() + duration
    else:
        until = utils.utcnow() + datetime.timedelta(seconds=duration)

# at this point `until` cannot be `MISSING`
payload["communication_disabled_until"] = utils.isoformat_utc(until)

data = await self._state.http.edit_member(self.id, user.id, reason=reason, **payload)
return Member(data=data, guild=self, state=self._state)


Поскольку ни в ней, ни в вашем коде нет упоминаний 4 часов, следовательно у вас вызывается какой-то другой код. Добавляйте принты и/или логирование и смотрите ваши данные.

P.S. Отформатируйте код вопроса через соответствующий тег.
Похожие вопросы