Если бы я хотел использовать 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)