Если бы я хотел использовать discord.py "on message" для создания команд выключения и перезапуска, как бы я это сделал?

Мой Discord Bot запускает discord.py, используя функцию on_message. Если бы я хотел использовать это, чтобы создать команду, которая будет завершать работу, и другую, чтобы перезапустить мой Discord Bot, как бы я это сделал?

Я запускаю бота с хост-сервера на repl.it. Я сошлю код ниже, чтобы вы поняли, что я имею в виду под on_message:

  if message.content.upper().startswith("!SHUTDOWN"):
    if "534116283487223809" in [role.id for role in message.author.roles]:
      await client.send_message(message.channel, "*Shutting Down...*")
      time.sleep(0.5)
      #SCRIPT TO SHUTDOWN HERE

В идеале команды должны работать как !shutdown а также !restartи должен быть доступен только мне.

Спасибо заранее, H

2 ответа

Вы можете разместить свой код в while цикл и использование client.logout() закрыть Discord соединение. !restart Команда будет использовать только тогда client.logout() не прерывая while цикл, и !shutdown также будет использовать client.logout() но позвоню break отменить while петля.

Вы можете создать команды для обработки этого вместо того, чтобы все в on_message событие, которое станет загроможденным.

from discord.ext import commands

while True:
    client = commands.Bot(command_prefix='!')

    @client.command(pass_context=True)
    async def restart(ctx):
        if "534116283487223809" in [role.id for role in ctx.message.author.roles]:
            await client.logout()

    @client.command(pass_context=True)
    async def shutdown(ctx):
        if "534116283487223809" in [role.id for role in ctx.message.author.roles]:
            await client.logout()
            break

    @client.event
    async def on_message(message)
        # do previous on_message stuff here
        await client.process_commands(message) # add at bottom to allow commands to work

    client.run('token')

Чтобы выйти из скрипта, вы должны позвонить sys.exit([arg]), Чтобы перезапустить скрипт, взгляните на os.exec*(),

Например:

if message.content.upper().startswith("!SHUTDOWN"):
  if "534116283487223809" in [role.id for role in message.author.roles]:
    await client.send_message(message.channel, "*Shutting Down...*")
    time.sleep(0.5)
    os.exit(0) # the exit code, 0, means it exited successfully
if message.content.upper().startswith("!RESTART"):
  if "534116283487223809" in [role.id for role in message.author.roles]:
    await client.send_message(message.channel, "*Restarting...*")
    time.sleep(0.5)
    python = sys.executable
    os.execl(python, python, *sys.argv)
Другие вопросы по тегам