Почему discord-бот выходит из онлайна?
import discord
from discord.ext import commands
TOKEN = '(здесь токен моего бота)'
bot = commands.Bot(command_prefix='!')
client = commands.Bot( command_prefix = '!')
#!help
@client.event
async def on_ready():
print ( 'Bot has connected' )
@client.command( pass_context = True )
async def hello( ctx ):
await ctx.send( 'Bot greets you.' )
#Connect
@bot.command(pass_context=True)
async def test(ctx, arg):
await ctx.send(arg)
bot.run(TOKEN)
Бота очень сложно заставить появиться в онлайне, он «включается» только когда я запускаю файл с кодом, при закрытии файла он переходит в оффлайн. Каким образом можно сделать его независимым от меня?
Несмотря на все то, что написано в коде, он не выполняет никаких команд. Есть ли какие-то ресурсы, где даны списки команд для бота с примерами кодов?
Ответы (1 шт):
1. Бот уходит в офлайн, потому что вы завершаете выполнение кода. Пока выполняется код - бот запущен и готов выполнять команды. Если вам нужно, чтобы бот оставался в онлайне, даже когда вы выключаете компьютер, то написанного бота нужно ставить на хостинг. Поищите сервисы в интернете. Это, естественно, не бесплатно.
2. Что касается выполнения команд, вы объявили в коде двух ботов. Одного с именем client, второго с именем bot. А по итогу запустили только второго: bot.run(TOKEN)
Строку client = commands.Bot( command_prefix = '!'), я бы посоветовал убрать вообще и, поскольку он у вас не используется, все @client в коде заменить на @bot.
Ну и наконец, почему же именно не работают команды. async def on_ready(): и async def hello( ctx ): у вас не вызываются, потому что, как я уже написал ранее, они привязаны к @client, которого вы не запускали. Если поменяете на @bot, то будут работать.
Для вызова функции вы указали префикс "!", в этой строке bot = commands.Bot(command_prefix='!'), соответственно вызов функции должен происходить следующим образом:
В чат пишете [Префикс][Название функции] [Аргемунты]. В вашем случае: !test проверка
На что бот должен отправить в чат "проверка".
А вообще это вы должны были узнать из документации. Читайте, изучайте и подобных вопросов возникать не будет. Удачи :)