Ответы пользователя по тегу Discord
  • Как сделать надпись "Discord Bot Думает" dislash.py?

    @y7o4ka
    Если команда затрачивает больше 3 секунд на ответ, дискорд отмечает её как невыполненную и девалидирует токен, нужный для отправки ответа. reply(), в случае, если токен неверный, отправляет ответ в dblt обычного сообщения.
    Исправить это можно, добавив в начало команды
    await ctx.reply(..., type=ResponseType.DeferredUpdateMessage)
    (discord docs)

    Насколько я помню, слеш-команды в dislash используют dislash.SlashInteraction, а не commands.Context
    Ответ написан
  • Как сделать команду пинг?

    @y7o4ka
    Зависит от того, какой именно пинг нужен.
    # последний пинг до гейтвея (время между отправкой опкода HEARTBEAT и получения HEARTBEAT_ACK)
    bot.latency  
    # возможная реализация пинга до REST API
    start = time.monotonic()
    message = await ctx.send("Pinging...")
    end = time.monotonic()
    totalPing = round((end - start) * 1000, 2)

    Если нужен общий пинг хоста, можно использовать пакет speedtest. Надо учесть, что он не асинхронный
    executor = concurrent.futures.ThreadPoolExecutor(max_workers=1)
    loop = asyncio.get_event_loop()
    try:
          s = speedtest.Speedtest(secure=True)
          await loop.run_in_executor(executor, s.get_servers)
          await loop.run_in_executor(executor, s.get_best_server)
    except Exception as exc:
          log.exception("An exception occured while fetching host latency.", exc_info=exc)
          host_latency = "`Failed`"
    else:
          result = s.results.dict()
          host_latency = round(result["ping"], 2)
    Ответ написан
    Комментировать